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)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一 ...
随机推荐
- 学习C#第一天
学习C#第一天 先是了解了VS 2019编辑器的基本使用 安装Visual Studio https://mp.weixin.qq.com/s?__biz=MzU0MTg5NDkzNA==&m ...
- 运维趋势2019年总结,运维就是要做到"技多不压身"
2019年 在互联网这个行业中对运维的要求越来越来越高,比如2015.16年的时候,运维只是做一些人力投入的事情,比如重启个服务,搭建一个nginx,mysql主从服务,简单的优化一下,就可以上线了, ...
- HTTPS证书通过cert-manager自动获取,部署,续期
HTTP-01验证和DNS-01验证 使用cert-manager给阿里云的DNS域名授权SSL证书 第一步:安装cert-manager 配置 CRD kubectl apply -f https: ...
- 鸿蒙开源第三方组件——SlidingMenu_ohos侧滑菜单组件
目录: 1.前言 2.背景 3.效果展示 4.Sample解析 5.Library解析 6.<鸿蒙开源第三方组件>文章合集 前言 基于安卓平台的SlidingMenu侧滑菜单组件(http ...
- 201871030135-姚辉 实验二 个人项目—《D{0-1} KP》项目报告
项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 这个作业要求链接 我的课程学习目标 (1)掌握软件项目个人开发流程.(2)掌握Github发布软件项目的操作方法. 这个作业在哪些方面 ...
- 「Unity卡牌自走棋」项目NABCD分析
项目 内容 这个作业属于哪个课程 2021学年春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-初次邂逅,需求分析 在这个课程的目标是 锻炼在大规模开发中的团队协作能力 这个作业在哪个具体方 ...
- Java(100-113)【类与对象、封装、构造方法】
1.对象的创建以及使用 Student stu =new Student(); 根据一个类创建一个对象 导包.创建.使用 2.手机练习 有main才能run Phone.java package cn ...
- 【深度学习】PyTorch CUDA环境配置及安装
Pytorch版本介绍 torch:1.6 CUDA:10.2 cuDNN:8.1.0 安装 NVIDIA 显卡驱动程序 一般 电脑出厂/装完系统 会自动安装显卡驱动 如果有 可直接进行下一步 下载链 ...
- Run Horovod
Run Horovod https://horovod.readthedocs.io/en/stable/running_include.html https://horovod.readthedoc ...
- WERTYU UVA - 10082
A common typing error is to place the hands on the keyboard one row to the right of the correct po ...