MyBatis-Plus 使用教程,增删改查详细介绍
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。官网:https://mp.baomidou.com/guide/
注解
mp一共提供了8个注解,这些注解是用在Java的实体类上面的。
@TableName
注解在类上,指定类和数据库表的映射关系。实体类的类名(转成小写后)和数据库表名相同时,可以不指定该注解。
@TableId
注解在实体类的某一字段上,表示这个字段对应数据库表的主键。当主键名为id时(表中列名为id,实体类中字段名为id),无需使用该注解显式指定主键,mp会自动关联。若类的字段名和表的列名不一致,可用value属性指定表的列名。另,这个注解有个重要的属性type,用于指定主键策略。
@TableField
注解在某一字段上,指定Java实体类的字段和数据库表的列的映射关系。这个注解有如下几个应用场景。
- 排除非表字段
若Java实体类中某个字段,不对应表中的任何列,它只是用于保存一些额外的,或组装后的数据,则可以设置exist属性为false,这样在对实体对象进行插入时,会忽略这个字段。排除非表字段也可以通过其他方式完成,如使用static或transient关键字,但个人觉得不是很合理,不做赘述
- 字段验证策略
通过insertStrategy,updateStrategy,whereStrategy属性进行配置,可以控制在实体对象进行插入,更新,或作为WHERE条件时,对象中的字段要如何组装到SQL语句中。
- 字段填充策略
通过fill属性指定,字段为空时会进行自动填充
@Version
乐观锁注解
@EnumValue
注解在枚举字段上
@TableLogic
逻辑删除
- KeySequence
序列主键策略(oracle)
- InterceptorIgnore
插件过滤规则
CRUD接口
- insert(T entity) 插入一条记录
- deleteById(Serializable id) 根据主键id删除一条记录
- delete(Wrapper wrapper) 根据条件构造器wrapper进行删除
- selectById(Serializable id) 根据主键id进行查找
- selectBatchIds(Collection idList) 根据主键id进行批量查找
- selectByMap(Map<String,Object> map) 根据map中指定的列名和列值进行等值匹配查找
- selectMaps(Wrapper wrapper) 根据 wrapper
条件,查询记录,将查询结果封装为一个Map,Map的key为结果的列,value为值 - selectList(Wrapper wrapper) 根据条件构造器wrapper进行查询
- update(T entity, Wrapper wrapper) 根据条件构造器wrapper进行更新 updateById(T
entity)
selectMaps
BaseMapper接口还提供了一个selectMaps方法,这个方法会将查询结果封装为一个Map,Map的key为结果的列,value为值
该方法的使用场景如下:
只查部分列
当某个表的列特别多,而SELECT的时候只需要选取个别列,查询出的结果也没必要封装成Java实体类对象时(只查部分列时,封装成实体后,实体对象中的很多属性会是null),则可以用selectMaps,获取到指定的列后,再自行进行处理即可
public void test() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("id","name").likeRight("name","王");
List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
maps.forEach(System.out::println);
}
public void test3() {
QueryWrapper<User> wrapper = new Que