mybatis-plus使用二:mp基本增删改查

文章详细介绍了MP框架中的BaseMapper接口如何提供便捷的数据库增删改查功能。通过继承BaseMapper,开发者可以直接使用接口提供的方法,如insert(),deleteById(),updateById()和selectById()等,这些方法基于反射和AOP原理自动生成SQL语句,简化了Mybatis的使用。文章还展示了插入、删除、更新和查询的示例代码。
摘要由CSDN通过智能技术生成

MP的BaseMapper接口

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

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

主要看左侧这块,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.修改方法

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

@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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值