前言
MyBatis非常方便,代码简洁,开发速度极高,通过继承BaseMapper就可以获取到各种各样的单表操作,无需再写其他的接口方法,非常的简便快捷。
我们可以看到BaseMapper 为我们提供了很多方法供我们CRUD使用。
Mapper CRUD 接口
说明:
- 通用 CRUD 封装[BaseMapper 接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
- 泛型 T 为任意实体对象
- 参数 Serializable为任意类型主键 Mybatis-Plus不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
- 对象 Wrapper为 条件构造器
1、查询
1、查询所有,不加条件去查询
//1、查询所有,不加条件去查询userMapper.selectList(null).forEach(System.out::println); //forEach遍历打印
2、查询所有,加条件去查询
//2、查询所有,加条件去查询//2.1、new QueryWrapperQueryWrapperqueryWrapper1=newQueryWrapper(); //2.2、设置条件queryWrapper1.eq("age", 20); userMapper.selectList(queryWrapper1).forEach(System.out::println);
• lt #小于
• gt #大于
• ne #不等于
• eq #等于
• le #小于等于
• ge #大于等于
• 等等
3、多条件去查询
new一个hashmap,把条件放到map中,再把map放到条件中。
QueryWrapperqueryWrapper2=newQueryWrapper(); //3.1、设置多条件Map<String,Object>map=newHashMap<>(); map.put("age",20); map.put("name","张三"); //3.2、map放进queryWrapperqueryWrapper2.allEq(map);
4、分页查询
//4、分页查询//1、配置类paginationInterceptor//2、设置分页参数Page<User>page=newPage<>(1,3); //当前页,每页显示条数2Page<User>userPage=userMapper.selectPage(page, null);//分页参数,查询条件System.out.println(userPage.getCurrent()); //当前页System.out.println(userPage.getSize()); //每页显示条数userPage.getRecords().forEach(System.out::println); //查询结果
5、等等
@Test
voidselect() {
//1、查询所有,不加条件去查询
userMapper.selectList(null).forEach(System.out::println); //forEach遍历打印
//2、查询所有,加条件去查询
//2.1、new QueryWrapper
QueryWrapperqueryWrapper1=newQueryWrapper();
//2.2、设置条件
queryWrapper1.eq("age", 20);
/**
* lt #小于
* gt #大于
* ne #不等于
* eq #等于
* le #小于等于
* ge #大于等于
* between #between
* like like 模糊查询 #likeLeft 左模糊 likeRight 右模糊
* isNull
* isNotNull
* in #inSql in sql语句
* notIn
* orderBy #排序 ASC DESC 升序降序
* orderByDesc
*/
userMapper.selectList(queryWrapper1).forEach(System.out::println);
//3、多条件去查询
QueryWrapperqueryWrapper2=newQueryWrapper();
//3.1、设置多条件
Map<String,Object>map=newHashMap<>();
map.put("age",20);
map.put("name","张三");
//3.2、map放进queryWrapper
queryWrapper2.allEq(map);
//byId
Useruser=userMapper.selectById(1);
System.out.println(user);
//byBatchIds
userMapper.selectBatchIds(Arrays.asList(1,2,3)).forEach(System.out::println); //Arrays.asList(1,2,3)是一个数组,把数组转换成list集合
//通过map条件查询
//map只能是一个条件,不能是多个条件
Map<String,Object>map1=newHashMap<>();
map1.put("age",20);
map1.put("name","张三");
userMapper.selectByMap(map).forEach(System.out::println);
//4、分组查询
QueryWrapperqueryWrapper3=newQueryWrapper();
queryWrapper3.gt("age",20);
System.out.println(userMapper.selectCount(queryWrapper3));
//将查询结果放入map中
userMapper.selectMaps(queryWrapper1).forEach(System.out::println);
//分页查询
//1、配置类paginationInterceptor
//2、设置分页参数
Page<User>page=newPage<>(1,3); //当前页,每页显示条数2
Page<User>userPage=userMapper.selectPage(page, null);//分页参数,查询条件
System.out.println(userPage.getCurrent()); //当前页
System.out.println(userPage.getSize()); //每页显示条数
userPage.getRecords().forEach(System.out::println); //查询结果
//封装到map中
Page<Map<String,Object>>mapPage=newPage<>(1,3); //分页参数,查询条件
userMapper.selectMapsPage(mapPage, null).getRecords().forEach(System.out::println); //查询结果
//查询所有,只输出id
userMapper.selectObjs(null).forEach(System.out::println); //查询结果
//查询一个
System.out.println(userMapper.selectOne(null)); //查询结果
}
2、添加
/*** Insert*/voidinsertTest(){ Useruser=newUser(); user.setName("张三"); user.setAge(20); userMapper.insert(user); System.out.println(user); }
3、删除
/*** Delete*/voiddeleteTest(){ //通过id删除userMapper.deleteById(1); //通过多条件id删除userMapper.deleteBatchIds(Arrays.asList(1,2,3)); //通过条件删除QueryWrapperqueryWrapper=newQueryWrapper (); queryWrapper.eq("name","张三"); //与查询相同userMapper.delete(queryWrapper); //通过条件删除---MapMap<String,Object>map=newHashMap<>(); map.put("name","张三"); userMapper.deleteByMap(map); }
4、修改
/*** Update*/voidupdateTest(){ //通过id更新Useruser=userMapper.selectById(1); //查询数据user.setName("李四"); //修改数据user.setAge(30); userMapper.updateById(user); //通过QueryWrapper更新Useruser1=userMapper.selectById(1); //查询数据QueryWrapperqueryWrapper=newQueryWrapper(); //构建条件queryWrapper.eq("name","张三"); queryWrapper.eq("age",20); userMapper.update(user1,queryWrapper); //更新数据 }
5、自定义 SQL(多表关联查询)
当我们需要多表查询时,简单的crud满足不了我们的需求时,我们就需要通过自定义sql,来实现我们的所需的功能。
packagecom.southwind.mybatisplus.mapper; importcom.baomidou.mybatisplus.core.mapper.BaseMapper; importcom.southwind.mybatisplus.entity.ProductVO; importcom.southwind.mybatisplus.entity.User; importorg.apache.ibatis.annotations.Select; importjava.util.List; publicinterfaceUserMapperextendsBaseMapper<User> { "select p.*,u.name userName from product p,user u where p.user_id = u.id and u.id = #{id}") (List<ProductVO>productList(Integerid); }
总结
Mybatis 为我们提供了基本的增删改查的接口,特别是 Mybatis-Plus 提供的 Wrappers 更是可以组合出更复杂的查询语句以满足我们需求。但有些复杂的操作,比如联表查询等,这些就需要使用自定义 SQL 语句进行操作的。