Mybatis-plus入门

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
existsexists 条件语句
notExistsnot Exists 条件语句
isNullnull 值查询
isNotNullis Not Null 查询
inin 查询
notInnot in 查询
groupBy分组查询
orderBy排序查询
having分组后筛选
eq等于 =
ne不等于 <>
betweenbetween 条件语句
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则不加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值