2.MP基本增删改查的用法

老马 老马 | 375 | 2022-07-27

MP的BaseMapper接口

我们的UserMapper之所以有那么多现成的方法,得益于继承了MP的BaseMapper接口。该接口的方法如下:

image-20220727160608830

可以看到,基本我们常用的增删改查都在这个接口中定义了。这里可以看看MP的架构来帮助理解为什么继承了接口就能有一堆好用的方法了。

image-20220727160709437

主要看左侧这块,MP会扫描Entity类,通过反射提取,能分析出表和相对应的字段值,然后改造成增删改查的sql语句,注入到Mybatis的中完成最终的sql操作。

这里可以把MP想象成一个AOP,当执行insert,update,delete,select方法时,切面发现你要执行相应的sql语句,然后分析entity类,把它拼接成要执行的sql语句交给mybatis来执行;然后还能把mybatis执行的结果通过AOP方式再转换成想要的最终结果。

基本的增删改查测试

这里先不测试Warpper【包装器】相关的方法。单独放到后面章节来测试。

1.插入方法

就一个插入方法。这个插入方法,比以前用到的框架有个好的地方,就是表的id字段名不用再叫id了。比如可以叫userid,orderid等都是可以的。而且插入后都能回填回来的。

@Test
public void testInsert() {
    User user = new User();
    user.setName("李四");
    user.setAge(24);
    user.setEmail("lisi@163.com");
    user.setAddress("北京海淀");
    int result = this.userMapper.insert(user);
    System.out.println("打印插入结果===>" + result);
    System.out.println("打印插入后user的id值===>" + user.getId());
}
//sql语句
==>  Preparing: INSERT INTO user ( name, age, email, address ) VALUES ( ?, ?, ?, ? )
==> Parameters: 李四(String), 24(Integer), lisi@163.com(String), 北京海淀(String)

2.删除方法

@Test
public void testDelete() {
    //通过id删除记录
    this.userMapper.deleteById(1);
    //通过id删除记录,传入对象方式
    User user = new User();
    user.setId(2L);
    this.userMapper.deleteById(user);
    //批量删除id的方式
    List<Long> idList = Arrays.asList(1L, 2L);
    this.userMapper.deleteBatchIds(idList);
    //通过map条件删除记录
    Map<String,Object> condition = new HashMap<>();
    condition.put("name","李四");
    condition.put("age", 24);
    this.userMapper.deleteByMap(condition);
}
//sql语句
==>  Preparing: DELETE FROM user WHERE id=?
==> Parameters: 1(Integer)
==>  Preparing: DELETE FROM user WHERE id=?
==> Parameters: 2(Long)
==>  Preparing: DELETE FROM user WHERE id IN ( ? , ? )
==> Parameters: 1(Long), 2(Long)
==>  Preparing: DELETE FROM user WHERE name = ? AND age = ?
==> Parameters: 李四(String), 24(Integer)

3.修改方法

因为上面删除了所有记录,再测试该方法前,加入了张三、李四两条记录

image-20220727161242594
@Test
public void testUpdate() {
    //通过id来修改,传入对象方式
    User user = new User();
    user.setId(3L);
    user.setName("李四222");
    user.setAddress("北京海淀222");
    this.userMapper.updateById(user);
}
//sql语句
==>  Preparing: UPDATE user SET name=?, address=? WHERE id=?
==> Parameters: 李四222(String), 北京海淀222(String), 3(Long)

4.查询方法

@Test
public void testSearch() {
    //通过id查询
    User user = this.userMapper.selectById(3L);
    System.out.println(user);
    //通过id进行批量查询
    List<User> users = this.userMapper.selectBatchIds(Arrays.asList(3L, 4L));
    users.forEach(System.out::println);
    //通过map条件进行查询
    Map<String, Object> condition = new HashMap<>();
    condition.put("name", "张三");
    condition.put("email", "zhangsan@163.com");
    users = this.userMapper.selectByMap(condition);
    users.forEach(System.out::println);
}
//sql语句
==>  Preparing: SELECT id,name,age,email,address,createtime,updatetime FROM user WHERE id=?
==> Parameters: 3(Long)
==>  Preparing: SELECT id,name,age,email,address,createtime,updatetime FROM user WHERE id IN ( ? , ? )
==> Parameters: 3(Long), 4(Long)
==>  Preparing: SELECT id,name,age,email,address,createtime,updatetime FROM user WHERE name = ? AND email = ?
==> Parameters: 张三(String), zhangsan@163.com(String)
文章标签: Mysql
推荐指数:

真诚点赞 诚不我欺~

2.MP基本增删改查的用法

点赞 收藏 评论

关于作者

老马
老马

不要假装很努力,结果不会陪你演戏。

等级 LV2

粉丝 4

获赞 14

经验 204