2:分页功能
如果需要使用Mybatis的分页功能,那么需要开启Mybatis-Plus的分页功能拦截器.并加上@Configuration注解使得启动类能加载到他.
开启拦截器之后使用MybatisPlus内置的分页接口即可
同时如果想看到MybatisPlus的运行语句,那么需要开启日志
3:DQL编程控制
条件查询
可以发现BaseMapper接口中有着大量的方法,这些方法的参数为Wrapper,而这对象代表着对数据库查询时所携带的查询条件.
查询投影
查询投影即表示查询那些信息,即选择需要查看的字段
同时如果遇到不好使用这种方法来查询的,可以直接在对应的dao接口中用mybatis的注解的方式来解决
各种查询条件
1:等值匹配
@Test public void eq(){ LambdaQueryWrapper<Book>lqw=new LambdaQueryWrapper<>(); lqw.eq(Book::getName,"helo").eq(Book::getType,"sad"); System.out.println(bookDao.selectList(lqw)); }
2:范围查询
@Test public void between(){ LambdaQueryWrapper<Book>lqw=new LambdaQueryWrapper<>(); lqw.between(Book::getNumber,10,50); System.out.println(bookDao.selectList(lqw)); }
3:模糊匹配
@Test public void like(){ LambdaQueryWrapper<Book>lqw=new LambdaQueryWrapper<>(); lqw.like(Book::getName,"e"); //其中likeLeft/likeRight会使用左/右百分号 System.out.println(bookDao.selectList(lqw)); }
更多其他可以进行的查询条件可以搜索
6.条件查询介绍
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : 查询条件封装
UpdateWrapper : Update 条件封装
AbstractLambdaWrapper : 使用Lambda 语法
LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
@SpringBootTest publicclassQueryWrapperTests { @Autowired privateUserMapperuserMapper; }
2、测试用例
2.1 ge、gt、le、lt、isNull、isNotNull
@Test public void testQuery() { QueryWrapperqueryWrapper = newQueryWrapper<>(); queryWrapper .isNull(“name”) .ge(“age”, 12) .isNotNull(“email”); int result = userMapper.delete(queryWrapper); System.out.println("delete return count = " + result); }
2.2 eq、ne
注意:seletOne()返回的是一条实体记录,当出现多条时会报错
@Test public void testSelectOne() { QueryWrapperqueryWrapper = newQueryWrapper<>(); queryWrapper.eq(“name”, “Tom”); Useruser = userMapper.selectOne(queryWrapper);//只能返回一条记录,多余一条则抛出异常 System.out.println(user); }
2.3 between、notBetween
包含大小边界
@Test public void testSelectCount() { QueryWrapperqueryWrapper = newQueryWrapper<>(); queryWrapper.between(“age”, 20, 30); Integer count = userMapper.selectCount(queryWrapper); //返回数据数量 System.out.println(count); } 2.4 like、notLike、likeLeft、likeRight selectMaps()返回Map集合列表,通常配合select()使用 @Test public void testSelectMaps() { QueryWrapperqueryWrapper = newQueryWrapper<>(); queryWrapper .select(“name”, “age”) .like(“name”, “e”) .likeRight(“email”, “5”); List<Map<String, Object>>maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表 maps.forEach(System.out::println); } 2.5 orderBy、orderByDesc、orderByAsc @Test public void testSelectListOrderBy() { QueryWrapperqueryWrapper = newQueryWrapper<>(); queryWrapper.orderByDesc(“age”, “id”); Listusers = userMapper.selectList(queryWrapper); users.forEach(System.out::println); }
1、查询方式
查询方式 说明
setSqlSelect 设置 SELECT 查询字段
where WHERE 语句,拼接 + WHERE 条件
and AND 语句,拼接 + AND 字段=值
andNew AND 语句,拼接 + AND (字段=值)
or OR 语句,拼接 + OR 字段=值
orNew OR 语句,拼接 + OR (字段=值)
eq 等于=
allEq 基于 map 内容等于=
ne 不等于<>
gt 大于>
ge 大于等于>=
lt 小于<
le 小于等于<=
like 模糊查询 LIKE
notLike 模糊查询 NOT LIKE
in IN 查询
notIn NOT IN 查询
isNull NULL 值查询
isNotNull IS NOT NULL
groupBy 分组 GROUP BY
having HAVING 关键词
orderBy 排序 ORDER BY
orderAsc ASC 排序 ORDER BY
orderDesc DESC 排序 ORDER BY
exists EXISTS 条件语句
notExists NOT EXISTS 条件语句
between BETWEEN 条件语句
notBetween NOT BETWEEN 条件语句
addFilter 自由拼接 SQL
last 拼接在最后,例如:last(“LIMIT 1”)
多表联查
MybatisPlus只是在原有Mybatis的基础上增强了单表查询的功能,因此如果需要多表查询,那么依旧需要编写配置文件
mybatisplus默认的mapper配置文件的路径在类路径下的mapper目录中的所有xml文件
4:DML编程控制
id生成策略
NONE表示不启用,也就是默认值,表示按照MybatisPlus默认的id生成策略
AUTO表示使用自增
INPUT表示要求必须手动传递一个id过去
ASSING_ID表示使用雪花算法得到一个ID,对应实体类必须使用Long类型,数据库字段需要使用binary或者varchar来接受
也可以用配置文件来统一配置实体类中的id属性的注解属性
多记录操作
提供多数据的id即可
@Test public void deleteBatch(){ List<Long>list= Arrays.asList(2L,3L,4L); bookDao.selectBatchIds(list); bookDao.deleteBatchIds(list); }
逻辑删除
乐观锁
首先需要在数据库表中添加一个字段用于表示乐观锁操作的字段.
之后就可以在对应的实体类中添加属性来对应到数据库中的字段
为了开启乐观锁的效果,需要配置乐观锁的拦截器
之后如果想要修改version这个字段,那么首先我们得先保证得到version这个属性,否则乐观锁不会启动
乐观锁实现
用户1进来后修改数据为它的部分之后,version的值就已经改变了,当用户2进来操作后,它拿到的还是原先的version值,因此它的判断条件会失败,因此无法成功再次修改数据,因此用户1成功得到这个数据.