Spring Boot 集成Mybatis-Plus(二)

660 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第24天,点击查看活动详情

前言

上一篇文章讲解了Mybatis-plus的入门和简单CRUD功能,不熟悉的朋友可以查看juejin.cn/post/709001… 本文将讲解Mybatis-plus的高级特性中的条件构造器。

图片.png

条件构造器

为了实现各种复杂的查询,mybatis-plus提供了丰富的条件构造器来满足各种不同的需求。其条件构造器的关系结构如下:

图片.png

说明: 蓝色表示抽象类,绿色代表实现类。通过关系我们可以看出,条件构造器源码采用了装饰模式,不熟悉的朋友可以百度了解下。

基本使用

Mybatis-plus提供了丰富的查询条件如下:

- 比较大小:## ( =, <>, >, >=, <, <= )

 eq(R column, Object val); // 例: eq("name", "张三") ---> name = '张三'
 ne(R column, Object val); // 例: ne("name", "张三") ---> name <> '张三'
 gt(R column, Object val); // 例: gt("name", "张三") ---> name > '张三'
 ge(R column, Object val); // 例: ge("name", "张三") ---> name >= '张三'
 lt(R column, Object val); // 例: lt("name", "张三") ---> name < '张三'
 le(R column, Object val); // 例: le("name", "张三") ---> name <= '张三'

- 范围:## (## between、not between、in、not in)

between(R column, Object val1, Object val2); 例:between("age", 20, 30) ---> age between 20 and 30

notBetween(R column, Object val1, Object val2); 例:notBetween("age", 28, 30) ---> age not between 28 and 30

in(R column, Object... values); 例: in("age",10,20,30) ---> age in (10,20,30)

notIn(R column, Object... values);  例: notIn("age",10,20,30) ---> age not in (10,20,30)

inSql(R column, Object... values); 例: inSql("oid", "select oid from t_user where oid < 100 ") ---> 例:oid in (select oid from t_user where oid < 100)

//尽量少用
notInSql(R column, Object... values) 例:oid notIn (select oid from t_user where oid < 499052);

- 模糊匹配:## (## like、likeLeft、likeRight、notLike)

like(R column, Object val); //例: like("name", "张三") ---> name like '%张三%'
notLike(R column, Object val); //例: notLike("name", "张三") ---> name not like '%张三%'
likeLeft(R column, Object val); 例: likeLeft("name", "张三") ---> name like '%张三'
likeRight(R column, Object val); 例: likeRight("name", "张三") ---> name like '张三%'

- 分组、排序:## (## group、having、orderby)

groupBy(R... columns); 例: groupBy("oid", "age") ---> group by oid,age

orderByAsc(R... columns); 例: orderByAsc("oid", "age") ---> order by oid ASC,age ASC

orderByDesc(R... columns); 例: orderByDesc("oid", "name") ---> order by oid DESC,name DESC

having(String sqlHaving, Object... params); 例: having("sum(age) > {0}", 11) ---> having sum(age) > 11

- 拼接、非空:## (## or、and、isNull、isNotNull)

or();  例:eq("oid",1).or().eq("name","zhangsan") ---> oid = 1 or name = 'zhangsan'

or(Consumer<Param> consumer); 例: or(i -> i.eq("name", "李四").ne("status", "1")) ---> or (name = '李四' and status <> '1')

and(Consumer<Param> consumer);  例: and(i -> i.eq("name", "李四").ne("status", "1")) ---> and (name = '李四' and status <> '1')

isNull(R column); 例: isNull("address") ---> address is null 

isNotNull(R column);例: isNotNull("name") ---> name is not null

查询 QueryWrapper

基本语法

   eq(String column, Object val)

示例

 @RequestMapping("/getUserByWrapper")
    public String getUserByWrapper()
    {
       QueryWrapper<TUser> queryWrapper =new QueryWrapper<>();
       // 等于
       queryWrapper.eq("name", "张三1");
              
       //大于
       queryWrapper.gt("age", 18);
       //like
       queryWrapper.like("email", "%123%");
       //排序
       queryWrapper.orderBy(true,true,"age");
       
       List<TUser> tUser= userService.list(queryWrapper);
       return JSON.toJSONString(tUser);
    }

Lambda方式查询 QueryWrapper

  @RequestMapping("/getUserBylambdaWrapper")
    public String getUserBylambdaWrapper()
    {
      LambdaQueryWrapper<TUser> lambdaQueryWrapper =Wrappers.lambdaQuery();
      lambdaQueryWrapper.eq(TUser::getName, name);
      TUser tUser= userService.getOne(lambdaQueryWrapper);
       return JSON.toJSONString(tUser);
    }

获取LambdaQueryWrapper对象有几种方式,本文采用的时静态方法调用.

更新 UpdateWrapper

基本语法

set(String column, Object val)
set(boolean condition, String column, Object val)

示例

  @RequestMapping("/updateUserByWrapper")
    public String updateUserByWrapper()
    {
       UpdateWrapper<TUser> updateWrapper =new UpdateWrapper<>();
       //修改字段
       updateWrapper.set("email", "52@1j234.com");
       //条件
       updateWrapper.eq("oid", 52);
       userService.update(updateWrapper);
       return "成功";
    }

复杂多表查询

对于一些复杂的SQl语句,当条件构造器无法满足的时我们需要自定义SQl语句来实现。其实现的方式与mybatis方式一样,同样时非常方便的。

定义Mapper和SQL语句

//sql语句
<mapper namespace="com.skywares.mybatisplus.mapper.OrderHeadMapper">

<insert id="getOrderList" parameterType="com.skywares.mybatisplus.pojo.OrderHead" resultType="com.skywares.mybatisplus.pojo.OrderHead">
      select * From t_order_head o
      join t_order_detail d on d.orderHeaderOid=o.oid
      where o.status>120;
 </insert>
</mapper>

测试

  @Autowired
  private  OrderHeadMapper orderHeadMapper;
  @RequestMapping("/getOrderList")
  public String getOrderList(@RequestBody OrderHead orderHead)
  {
     orderHeadMapper.getOrderList(orderHead);
     return "成功";
  }

总结

本文主要讲解了mybatis-plus的条件查询器,通过查询器可以满足项目大部分的查询需求,后续 将介绍Mybatis-plus的其他高级特性。