请选择 进入手机版 | 继续访问电脑版

MyBatis-Plus条件构造器

[复制链接]
滚雪球少年 发表于 2021-1-1 09:59:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
条件构造器


wapper先容 :
Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理处罚分析 lambda 获取 column。
LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
mybatis-plus条件构造器简介

mybatis-plus提供了AbstractWrapper抽象类,提供了许多sql语法支持的方法,好比暗昧查询,比力,区间,分组查询,排序,判断空等等,方便我们用面向对象的方式去实现sql语句。
AbstractWrapper

说明:
QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件
QueryWrapper
  1. List company = companyService.list(new QueryWrapper().like("name",appoinment.getCompanyName()));List salesManager = userService.list(new QueryWrapper().like("name",appoinment.getSalesManagerName()));
复制代码
UpdateWrapper
  1. contactsService.update(new UpdateWrapper().eq("company_id",company.getId()).set("create_user",(sales.getUserId())));
复制代码
eq

  1. eq(R column, Object val)eq(boolean condition, R column, Object val)
复制代码
等于 =
例: eq(“name”, “张三”)—>name = ‘张三’
between

  1. between(R column, Object val1, Object val2)between(boolean condition, R column, Object val1, Object val2)
复制代码
BETWEEN 值1 AND 值2
例: between(“age”, 18, 30)—>age between 18 and 30
like

  1. like(R column, Object val)like(boolean condition, R column, Object val)
复制代码
LIKE ‘%值%’
例: like(“name”, “李四”)—>name like ‘%李四%’
isNull

  1. isNull(R column)isNull(boolean condition, R column)
复制代码
字段 IS NULL
例: isNull(“name”)—>name is null
isNotNull

  1. isNotNull(R column)isNotNull(boolean condition, R column)
复制代码
字段 IS NOT NULL
例: isNotNull(“name”)—>name is not null
in

  1. in(R column, Collection value)in(boolean condition, R column, Collection value)
复制代码
字段 IN (value.get(0), value.get(1), …)
例: in(“age”,{1,2,3})—>age in (1,2,3)
  1. in(R column, Object... values)in(boolean condition, R column, Object... values)
复制代码
字段 IN (v0, v1, …)
例: in(“age”, 1, 2, 3)—>age in (1,2,3)
inSql

  1. inSql(R column, String inValue)inSql(boolean condition, R column, String inValue)
复制代码
字段 IN ( sql语句 )
例: inSql(“age”, “1,2,3,4,5,6”)—>age in (1,2,3,4,5,6)
例: inSql(“id”, “select id from table where id < 3”)—>id in (select id from table where id < 3)
orderByDesc

  1. orderByDesc(R... columns)orderByDesc(boolean condition, R... columns)
复制代码
排序:ORDER BY 字段, … DESC
例: orderByDesc(“id”, “name”)—>order by id DESC,name DESC
例子:根据创建时间举行排序(orderByDesc(“create_time”));
  1. /**         *          */        @GetMapping("/list")        @ApiOperationSupport(order = 2)        @ApiOperation(value = "分页", notes = "传入appoinment")        public R list(AppoinmentVO appoinment, Query query) {                //暗昧查询                List company = companyService.list(new QueryWrapper().like("name",appoinment.getCompanyName()));                List salesManager = userService.list(new QueryWrapper().like("name",appoinment.getSalesManagerName()));                IPage pages = appoinmentService.page(Condition.getPage(query),                        new QueryWrapper().                                in(null!=company&&company.size()>0,"company_id",company.stream().map(Company::getId).collect(Collectors.toList())).                                in(null!=salesManager&&salesManager.size()>0,"sales_manager",salesManager.stream().map(User::getId).collect(Collectors.toList())).orderByDesc("create_time"));                if((null!=appoinment.getSalesManagerName()&&salesManager.size()==0)||null!=appoinment.getCompanyName()&&company.size()==0){pages.setTotal(0);pages.setRecords(new ArrayList());}                return R.data(AppoinmentWrapper.build().pageVO(pages));        }
复制代码
func

  1. func(Consumer consumer)func(boolean condition, Consumer consumer)
复制代码
func 方法(主要方便在出现if…else下调用差异方法能不断链)
例: func(i -> if(true) {i.eq(“id”, 1)} else {i.ne(“id”, 1)})
or

  1. or()or(boolean condition)
复制代码
拼接 OR
  注意事项: 主动调用or体现紧接着下一个方法不是用and毗连!(不调用or则默认为使用and毗连)
例: eq(“id”,1).or().eq(“name”,“王五”)—>id = 1 or name = ‘王五’
OR 嵌套

  1. or(Consumer consumer)or(boolean condition, Consumer consumer)
复制代码
例: or(i -> i.eq(“name”, “李四”).ne(“status”, “上班”))—>or (name = ‘李四’ and status  ‘上班’)
分页插件

XML 自界说分页

UserMapper.java 方法内容
  1. public interface UserMapper {//可以继承大概不继承BaseMapper    /**     *      * 查询 : 根据state状态查询用户列表,分页显示     *
  2.      *     * @param page 分页对象,xml中可以从内里举行取值,通报参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)     * @param state 状态     * @return 分页对象     */    IPage selectPageVo(Page page, Integer state);}
复制代码
UserMapper.xml 等同于编写一个平凡 list 查询,mybatis-plus 自动替你分页
  1.     SELECT id,name FROM user WHERE state=#{state}
复制代码
UserServiceImpl.java 调用分页方法
  1. public IPage selectUserPage(Page page, Integer state) {    // 不举行 count sql 优化,办理 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部门    // page.setOptimizeCountSql(false);    // 当 total 为小于 0 大概设置 setSearchCount(false) 分页插件不会举行 count 查询    // 要点!! 分页返回的对象与传入的对象是同一个    return userMapper.selectPageVo(page, state);}
复制代码
实例:
  1. /**         * 分页          */        @GetMapping("/list")        @ApiOperationSupport(order = 2)        @ApiOperation(value = "分页", notes = "传入contacts")        public R list(Contacts contacts, Query query) {                IPage pages = contactsService.page(Condition.getPage(query), Condition.getQueryWrapper(contacts));                return R.data(ContactsWrapper.build().pageVO(pages));        }
复制代码
来源:https://blog.csdn.net/lk14478/article/details/111942090
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )