学习链接: Mybatis-plus入门
通用Mapper
1.查询(Retrieve)
-
基本查询方法
(基本方法在BaseMapper.class文件中,进行调用)
id查询:selectById()
多个id查询 selectBatchIds():userList.forEach(SysTem.out::println) //迭代输出
selectByMap():
columnMap.put("name","王天风"); //name要对应数据库中格式
-
以条件构造器为参数的查询方法(wrapper)
AbstractWrapper.calss中调用
like()、lt()小于、gt()大于:
like()、between()、isNotNull():
likeRight()、or()、orderByDesc()、orderByAsc():
开始相对复杂的查询:
apply()、inSql():or true是sql注入:
// 此处写法存在sql注入问题,不建议使用 userQuery.apply("date_format(create_time,'%Y-%m-%d')='2019-02-14' or true or true").inSql("manager_id","select id from user where name like '王%'");
likeRight()、and()的Lambda表达式融合:
like()、or()的Lambda表达式融合:
如果开头是在括号中的判断,则开头通过nested进行条件的联合:
(and、or优先级要注意)
如果是要找特定数组下的,用in:
如果是要选特定数量,在最后last(“limit n”) :
last条件构造器:last(sql)。注意:有sql注入风险。确保参数没有风险再使用。 -
select中字段不全出现的处理方式
select(可变参数)选择需要返回的字段
select(传入lambda四大函数之一 predicate)排除不需要返回的字段 -
条件构造器中condition的作用
condition相关类中:
condition 条件判断,当条件为true则查询条件加入where
即如果判定isNotEmpty为true,则进行该字段的对比查询
如果返回false,说明这个字段为空,不进行按此字段查询 -
创建条件构造器时传入实体对象
实体传参和Querywrapper条件构造互不冲突:
在使用过程中一点要慎重,会重复出现实体作为条件构造方法的参数,实体字段默认为等于,如果不想等于的做法。
也可以根据源码改造 -
条件构造器中allEq用法
allEq中主要传入一个Map对象,属性和值的键值对,如果值中有null,默认拼接is null,也可以加false,,那么就传入第二个参数为false:可以通过设置忽略null,如果想忽略传入的map中的某个键或值,通过调用Bipredicate方法加filter进行:(下例中忽略“name”字段,也可以忽略值value,但是要注意判断字段类型)
-
其他以条件构造器为参数的方法
selectMaps():
1、selectMap:List集合的泛型不再是实体,而是map集合。其中key表示字段名,value表示字段值。
使用场景1:当实体类属性非常多时,不易查看。如果返回的是一个实体类,那么即使我们设定了返回字段,那么它的值为null,但是属性仍然存在。如果返回的是Map类型,当指定了返回字段时,那么没返回的就不会存在。
使用场景2:当返回的不是一条一条记录时,也就是返回的字段不在实体类属性中,比如一些统计,像平均值,最大值,最小值这样的。
2、selectObject:List集合的泛型不再是实体,而是Object,只返回第一个字段的值。其他的会被舍弃。
3、selectCount:查询符合条件的总记录数的。4、selectOne:查询符合条件的数据,只会返回一条数据。
注意:查询的结果必须是一条或者查不到(多于1条就会报错)。 -
Lambda条件构造器
lambda条件构造器的创建有3种方式1、通过查询构造器QueryWrapper创建
2、通过new直接创建lambda条件构造器
3、通过构造器工具类Wrappers创建(此时需要泛型)
通过lambdaWrapper进行构造,能够防止误写,推荐使用Wrappers.lambda…
例一例二
4、3.0.7新增的创建lambda条件构造器,通过LambdaQueryChainWrapper,并且需要一个Mapper接口作为参数(通过源码可以,它是对普通查询构造器的再次封装,源码中仍然是通过Mapper接口去调用,方便一些)。
使用mybatis-plus可以简化开发中的代码,使很多应用场景变得简单,在使用条件构造器时,要注意熟练掌握各种方法,灵活使用,还是要多加练习!