springboot项目在pom文件中引入依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>Latest Version</version>
</dependency>
添加数据库配置、添加包扫描等操作后就可以使用mp进行增删改查了。
Mybatis-plus单表的单个新增与修改方法:
/**
* 插入一条记录
* @param entity
* 实体对象
* @return int
*/
int insert(T entity);
// 根据 whereWrapper 条件,更新记录
int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper);
// 根据 ID 修改
int updateById(@Param(Constants.ENTITY) T entity);
Mybatis-plus的insert与update时的默认策略 : Mybatis-plus新增和更新的默认策略是如果实体对象中的属性的值为null的话,数据库中对应的列不会出现在insert和update语句中。
常用注解:
@TableName
指定实体类对应的表名
@TableId
指定数据库中的主键
@TableField
指定数据库中对应的列
排除非表字段的三种方式
1、transient 修饰符(让成员变量不参与序列化过程)
private transient String remark;
2、static 修饰符
private static String remark;
3、@TableField注解
@TableField(exist=false)
private String remark;
Mybatis-plus的查询:
BaseMapper中基本查询方法:
1、 通过id查询表中单行信息
T selectById(Serializable id);
2、根据id批量查询
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
3、 查询(根据 columnMap 条件,其中map的key是列名,value是列对应的值)
/**
*map.put("name","jackson")==>where name = 'jackson'
*/
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
以条件构造器为参数的查询方法:
Mybatis-Plus 通过 QueryWrapper( MP 封装的一个查询条件构造器,继承自AbstractWrapper,AbstractWrapper 实现了 Wrapper等接口) 来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率。
支持的查询方式 | 说明 |
---|---|
or | 或条件语句 |
and | 且条件语句 |
like | 模糊查询 like |
notLike | 模糊查询 not Like |
exists | exists 条件语句 |
notExists | not Exists 条件语句 |
isNull | null 值查询 |
isNotNull | is Not Null 查询 |
in | in 查询 |
notIn | not in 查询 |
groupBy | 分组查询 |
orderBy | 排序查询 |
having | 分组后筛选 |
eq | 等于 = |
ne | 不等于 <> |
between | between 条件语句 |
allEq | 全部eq |
··· | ··· |
代码中创建QueryWrapper的两种方式:
QueryWrapper<T> queryWrapper = new QueryWrapper<T>();
QueryWrapper<T> queryWrapper = Wrappers.<T>query();
1、根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
2、根据 entity 条件,查询符合条件的全部记录
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
3、 根据 Wrapper 条件,查询全部记录(返回Map类型,key为字段名,Object就是该字段对应的值,此方法常用于不需要查询全字段的查询)
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
4、根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值(应用场景为只返回一列的时候,通过select设置来返回哪一列)
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
5、根据 Wrapper 条件,查询总记录数(默认是count(1)写法)
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
select不列出全部字段:
//其中id、name是表中的字段名
queryWrapper.select("id","name").like("name","鱼");
//排除写法
queryWrapper.select(User.class,info->!info.getColumn.equals("create_time")&&!info.getColumn.equals("manager_id");
实体作为条件构造器构造方法的参数:
在创建条件构造器对象时可以选择创建一个带有实体参数的条件构造器对象
例如:
User whereUser = new User();
whereUser.setName("张三");
whereUser.setAge(31);
QueryWrapper<User> queryWrapper = new QueryWrapper<User>(whereUser);
这样使用这个条件构造器进行查询时会把实体对象中不为null的属性对应的字段以默认等于的条件加入where语句中,并且不与queryWrapper构造的查询条件冲突。可以使用@TableField修改默认的等于条件,例如名字是模糊匹配的,就在实体类的name属性上加上@TableField注解:
@TableField(condition=SqlCondition.LIKE)
private String name;
条件构造器中allEq用法:
allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
- 全部eq(或个别isNull)
个别参数说明:
params : key为数据库字段名,value为字段值
null2IsNull : 为true则在map的value为null时调用 isNull 方法,为false时则忽略value为null的
- 例1: allEq({id:1,name:“老王”,age:null})—>id = 1 and name = ‘老王’ and age is null
- 例2: allEq({id:1,name:“老王”,age:null}, false)—>id = 1 and name = ‘老王’
allEq(BiPredicate<R, V> filter, Map<R, V> params)
allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
个别参数说明:
filter : 过滤函数,是否允许字段传入比对条件中
params 与 null2IsNull : 同上
- 例1: allEq((k,v) -> k.indexOf(“a”) >= 0, {id:1,name:“老王”,age:null})—>name = ‘老王’ and age is null
- 例2: allEq((k,v) -> k.indexOf(“a”) >= 0, {id:1,name:“老王”,age:null}, false)—>name = ‘老王’
boolean condition作用:根据条件控制当前语句加不加入到where语句中,true则加入,false则不加。