Mybatis-plus在原有的select查询语句中动态追加查询条件
一、适用场景
1、使用了xml形式的mapper。
2、不想在select查询中大量使用<if>标签来判断条件是否存在而加入条件。
二、步骤
1、自定义wrapper继承QueryWrapper:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.shiro.util.StringUtils; public class CustomWrapper<T> extends QueryWrapper<T> { /**
* ifSql记录自定义追加的条件
*/
private String ifSql; /**
* 赋值给ifSql
* @return
*/
public CustomWrapper init(){
String sqlSegment = getSqlSegment();
if (StringUtils.hasText(sqlSegment)){
this.ifSql = "and" + getSqlSegment();
}
return this;
} public String getIfSql() {
return this.ifSql;
} //自定义eq、like等等方法,动态判断是否要加入条件 public CustomWrapper eq(String column,String val){
this.eq(StringUtils.hasText(val),column,val);
return this;
} public CustomWrapper like(String column,String val){
this.like(StringUtils.hasText(val),column,val);
return this;
}
public CustomWrapper ge(String column,String val){
this.ge(StringUtils.hasText(val),column,val);
return this;
} public CustomWrapper le(String column,String val){
this.le(StringUtils.hasText(val),column,val);
return this;
}
}
2、在mapper.java接口中定义方法:
@Mapper
public interface IApplyInfoMapper extends CustomizedBaseMapper<ApplyInfo> { List<ApplyInfo> getApplyList(@Param(Constants.WRAPPER) Wrapper ew); //... }
3、在xml中加入标识符 ${ew.ifSql}
<select id="getAllApplyInfoList" resultMap="allApplyInfoMapper">
SELECT
...
FROM b
LEFT JOIN w ON b.wid= w.id
LEFT JOIN n ON b.nid= n.id
WHERE b.ZT = '1'
${ew.ifSql}
</select>
4、在service层加入mybatis-plus自定义wrapper条件
@Service
public class ApplyInfoServiceImpl extends ServiceImpl<IApplyInfoMapper,ApplyInfo> implements IApplyInfoService { @Autowired
private IApplyInfoMapper mapper; @Override
public PageInfo queryPage(PageInfo pageInfo) {
Page page = PageUtils.getPage(pageInfo);
CustomWrapper<ApplyInfo> wrapper = getCustomWrapper(pageInfo);
List<ApplyInfo> list = mapper.getApplyList(wrapper.init());
PageUtils.setPageInfoProperty(pageInfo,page,list);
return pageInfo;
} /**
* 这里的我将pageInfo为传入的条件
* @return
*/
private CustomWrapper<ApplyInfo> getCustomWrapper(PageInfo pageInfo) {
CustomWrapper<ApplyInfo> wrapper = new CustomWrapper<>();
wrapper.eq("b.id",pageInfo.getProperty1())
return wrapper;
} ...... }
5、最终执行sql语句为:
SELECT
...
FROM b
LEFT JOIN w ON b.wid= w.id
LEFT JOIN n ON b.nid= n.id
WHERE b.ZT = '1'
AND b.id="这里为你在service中传入的值"
Mybatis-plus在原有的select查询语句中动态追加查询条件的更多相关文章
- HQL查询语句中的模糊查询
From Person this Where this.name like '%abc%' @SuppressWarnings("unchecked") @Override pub ...
- 查询语句中select from where group by having order by的执行顺序
查询语句中select from where group by having order by的执行顺序 1.查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from--w ...
- Mybatis中动态SQL多条件查询
Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...
- 在 SQL Server 数据库的 WHERE 语句中使用子查询
这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Serv ...
- 关于sql查询语句中的别名
sql语句中给子查询或其他查询类型加别名的时候可能会报错 java.sql.SQLException: 无法转换为内部表示 原因是select返回类型的实体类中没有写该别名 原来的实体类 更改后的实体 ...
- mysql查询语句中使用星号真的慢的要死?
前言 之所以写这篇文章,是源于以前看过的关于sql语句优化的帖子,里面明确提到了在sql语句中不要使用 * 来做查询,就像下面的规则中说的 2.尽量避免使用select *,返回无用的字段会降低查询效 ...
- Mysql查询语句中字符型字段不区分大小写解决方法
项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...
- mysql常用内置函数-查询语句中不能使用strtotime()函数!
来自:http://yushine.iteye.com/blog/775407 FROM_UNIXTIME把 unix时间戳转换为标准时间 unix_timestamp把标准时间转换为 unix时间戳 ...
- mysql查询语句中like 的用法
1.常见用法: (1)搭配%使用 %代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据: (2)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一 ...
随机推荐
- 微信二维码引擎OpenCV开源研究
<微信二维码引擎OpenCV开源研究> 一.编译和Test测试 opencv_wechat_qrcode的编译需要同时下载opencv(https://github.com/ ...
- TypeError: Can't convert 'int' object to str implicitly Python常见错误
尝试连接非字符串值与字符串 想要字符串连接非字符串需要先进行强制转化 可以用str()函数 --------------------------------
- 更改当前目录--cd
pwd 显示当前所在的目录路径 cd ../ 回到上一层目录 cd ../../ 回到上上层目录 cd / 回到根目录 cd ~ 回到当前用户的根目录 c ...
- [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.2 伏秒平衡/安秒平衡 小纹波近似
2.2 电感伏秒平衡.电容充放电平衡以及小纹波近似 让我们更加仔细地观察图2.6中的buck变换器的电感和电容的波形.我们是不可能设计一个滤波器能够只允许直流分量通过而完全滤除开关频率次谐波的.所以, ...
- python基础(四):切片和索引
Python中的序列有元组.列表和字符串,因此我们都可以通过索引和切片的方式,来获取其中的元素. 索引 Python中的索引,对于正向索引,都是从0开始的.但是对于反向索引,确实从-1开始的.如图所示 ...
- centos 7升级gcc到10.2.0
安装gcc 由于 Linux 操作系统的自由.开源,在其基础上衍生出了很多不同的 Linux 操作系统,如 CentOS.Ubuntu.Debian 等.这些 Linux 发行版中,大多数都默认装有 ...
- 201871010113-贾荣娟 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三-软件工程结对项目 这个课程学习目标 掌握软件开发流程,提高自身能力 这个作业在哪些方面帮助我实现了学习目标 本次实验让我对软件工程 ...
- Dynamics CRM报表点击自动运行方法
当我们点击了报表后一般会进入到条件筛选界面,再点击运行报表才可以直接运行报表.有一个方法可以点击报表后直接运行报表. 文本编辑器打开报表的rdl文件 找到如下位置的代码: 把Value部分改为: &l ...
- Java后端进阶-JVM参数调优
package com.study.performance; import org.springframework.boot.SpringApplication; import org.springf ...
- 现代 CLI 和 GUI 方案指南
原文链接:http://axuebin.com/articles/fe-solution/cli/desc.html,转载请联系 写在前面 提到初始化项目,那就必须提到脚手架这个名词,那为什么这篇文章 ...