1.yml配置
2.启动类加上@MapperScan注解
3.封装类
3.1注解说明
@TableName注解用于表名与包装类名匹配
@TableId注解用于指明主键,主键可以选择属性,比如自增
@TableField用于指明属性与表字段匹配,当字段名与属性名相同时可以不写
4.Mapper接口须继承BaseMapper接口
5.测试方法
5.1 selectList方法
传入参数null是为了查询所有结果,查询结果如下:
5.2 insert方法
运行结果:
6.排除非表字段的三种方式
6.1 用关键字transient标识
用transient关键字标识的属性不参与序列化过程,mp会忽略掉该属性,但是该属性也不能被序列化了.
6.2 用关键字static标识
用static标识的变量也会被mp忽略掉,但是lombok不会为静态属性生成set/get方法,需要自己手动生成.
6.3 加入@TableField注解
该注解默认是true,改成false标识该属性在表中不存在
7.查询
7.1 普通查询
7.1.1 传递单一参数查询
查询结果:
7.1.2 传递Collection集合查询
结果为:
通过结果可以看出是通过in查询的
7.1.3 传递Map集合查询
结果为:
中间是使用and连接
值得注意的是:map加的键是表字段,不是包装类属性
传递Collection集合与Map集合的区别:
Collection 是按照同一字段的不同参数查询
Map 是按照不同字段查询表信息
7.2 条件构造器查询
7.2.1 模糊查询与eq
运行结果为:
连接符号也是and
7.2.2 between和isNotNull
查询结果为:
全部都是and连接
7.2.3 逻辑运算符和倒序查询
结果为:
7.2.4 sql拼接和in
结果为:
7.2.5 AND 嵌套
7.2.6 OR嵌套
执行后的sql:
7.2.7 正常嵌套nested
执行后sql:
7.2.8 in
执行后sql:
7.2.9 list
list无视优化规则直接拼接到 sql 的最后,有sql注入风险
执行后sql:
7.2.10 select
使用select查询指定字段:
执行结果sql为:
使用select(Class entityClass, Predicate predicate)
剔除不需要的字段
运行后sql为:
7.3 条件构造器中condition用法
源码为:
condition为false,则表示该字段不加入where条件
sql执行结果:
7.4 创建条件构造器时,传入实体参数
实体参数和条件构造器互不冲突,都会被加在where后面
执行结果:
7.4.1 关于实体参数
注意事项:
实体条件查找默认时等值.但是可以在实体类加入@TableFiled注解改变查询条件
SqlCondition 提供的查询条件有限,仅仅五个
但是可以自己按照他的格式定义,例如:
表示查询小于指定参数的值:
sql查询结果为:
7.5 allEq
以map集合的形式传递参数
执行结果为:
该方法还有一个重载方法
图片来源于官方,第二个方法的null2IsNull为true时,表示当该参数为null时调用is null ,当null2IsNull为false时,则表示当传的参数为null时直接忽略.
null2IsNull为true时:
null2IsNull为false时:
allEq还有一种写法:
可以通过该方法过滤查询条件:
7.6 selectMaps
根据 Wrapper 条件,查询全部记录
因为返回值类型不在是实体类了,当实体类属性较多,而所需返回值较少时,可以使用这种方式查询,或者用于特殊查询
7.7 selectObjs
这个方法的查询结果只保留第一个字段的值
比如这个,明明查询了年龄和姓名,却只保留了姓名
7.8 selectOne
返回值时一个实体对象,但是查询到多个会报错
7.9 selectCount
该方法可用于统计数量
7.10 lambda条件构造器
lambda条件构造器的普通三种创建方法:
拿第三种创建方式举例:
lambda条件构造器的第四种写法
直接将接口传入,就能直接查询了
8 自定义Sql
需要在Mapper接口先写自己的方法,和mybatis一样的写法,但是参数需要指定的参数,Sql语句使用注解或者xml都行:
关于 ${ew.customSqlSegment} 的含义:
9 分页查询
第一步:
配置分页查询配置类
注:分页查询不成功,很有可能是配置信息的不完成
分页查询代码:
mp是分两次查询,一次是查询总记录数,一次是查询分页数据,可以通过重载方法,取消查询总记录数
不查询总记录数:
selectMapsPage返回的时一个map集合
也有自定义分页查询,详情见官网
10 更新功能
根据id更新:
这个方法是基于实体参数修改指定的值,entity是set参数,updateWrapper是where里的参数
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
updateWrapper也可以传入实体参数:
只改变部分参数,则不必要传入实体对象时,可以用set方法:
Lambda表达式写法
链式Lambda表达式写法
11 删除功能
deleteBuId
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
类似,就是传一个集合进去删除
int delete(@Param(Constants.WRAPPER) Wrapper wrapper);
这是lambda表达式的,普通构造器类似