常用注解
@TableName 指定当前实体对应表
@TableField 指定当前属性映射的列
@TableField(exist = false) 表示当前属性不参与映射(不参与sql拼接)
@TableId(type = IdType = Auto)
如果不对id做任何配置操作,mybatis-plus id 会自动使用雪花算法创建一个唯一的long 类型数据作为id主键
@TableLogic 逻辑删除
通用Mapper接口
日志
mybatisplus.configuration.logimpl=org.apache.ibatis.logging.stdout.StdOutImpl
insert
与mybatis逻辑相同
update
updateById存在问题,mybatis-plus 的SQL拼接规则导致
mybatis-plus 在拼接SQL时,如果传入的是实体对象,mybatis-plus会判断属性值是否为null,如果为null;该属性不参与SQL拼接
mybatis-plus 在拼接SQL时,如果传入的是实体对象,而属性是基本类型,有默认值,mybatis-plus会认为他有值,该属性参与SQL拼接
解决方案:
1.使用基本类型的包装类型
2.先查,替换属性,在更新
3.使用update(null,wrapper)实现部分字段更新
UpdateWrapper<Employee> wrapper = new UpdateWrapper<>(); wrappper.eq("id",1L); wrapper.set("name","testName") xxxMapper.update(null,wrapper);
updateById 和 update 区别
updateById
1.更新条件是id时
2.所有字段更新时
update
1.更新条件不仅仅是id时
2.部分字段更新时
delete
deleteByid() 和 mybatis中类似
deleteBatchIds() 传入集合进行批量删除
对应SQL delete FROM tableName where id in (?,?)
deleteByMap() 传入Map进行条件删除 key 条件列名。value条件值
对应SQL delete FROM tableName where key1 = value1 and key2 = value2....
delete() 传入条件构造器 进行条件删除Wrapper
对应SQL delete FROM tableName where (column1= value1 and column2= value2...)
select
selectById() 传入id进行查找
selectBatchIds() 传入id集合进行查找 返回值为List集合类型
selectByMap() 传入map进行条件查找 key 条件列名 value条件值 返回值为List集合类型
selectCount() 传入条件构造器QueryWrapper 进行条件查找,返回值为Integer
selectList() 传入条件构造器 返回值为List
selectMaps() 传入条件构造器,返回值为List<Map>
selectList() 和 selectMaps()区别
当查询结果无法封装成对象时(列多了或少了),使用selectMaps()
selectPage(page,wrapper)默认不开启分页,要先配置分页拦截器,编写分页逻辑new Page<>(currentPage,size);返回值为page把查询到的数据封装到传入的page里面(与之前new的page是同一个对象)
条件构造器
用于生成sql中的where条件
准确的说可以理解为Mybatis的动态sql,类似于mybatis中的<sql></sql>
继承体系
QueryWrapper和UpdateWrapper都继承于AbstractWrapper
LambdaQueryWrapper和LambdaUpdateWrapper继承于AbstractLambdaWrapper继承于AbstractWrapper
更新操作
eq(column,value)条件列名和条件值
set(column,value) 修改列名和修改值
setSql(sql语句) 例如“name = ‘xxx’ ”省去预编译,直接插入sql语句执行
LambdaUpdate
wrapper.eq(Object::getXx,value)可以在编译时检查条件列名是否出错
查询操作
类似以上更新操作
Wrappers
QueryWrapper<Xxx> wrapper = Wrappers.<Xxx>query();
高级查询
列投影
wrapper.select(String...columns);
排序
wrapper.orderBy()
wrapper.orderByAsc()
wrapper.orderByDesc()
分组查询
wrapper.groupBy();
使用前一定要用wrapper.select()规定查询的列
注意:select语句中使用group by只能查询分组列和聚合函数(如count())
wrapper.having(sqlHaving,Object..parms)Object..parms表示占位符,可不写
条件查询
比较运算符
wrapper.allEq()
模糊查询
wrapper.like(column,val)
wrapper.likeLeft()
wrapper.likeRIght
自定义查询
1.xml方式
2.注解方式
通用service
public interface IXxxService extends IService<Xxx>(){}
public class XxxServiceImpl extends ServiceImpl<XxxMapper,Xxx> implements IXxxService{}