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)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一 ...
随机推荐
- (数据科学学习手札114)Python+Dash快速web应用开发——上传下载篇
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- 借鉴Elasticsearch 7.x 深入系列学习
开始 Elasticsearch 深入系列目录如下: Elasticsearch 7.x 深入 数据准备 Elasticsearch 7.x 深入[1]索引[一]原理 Elasticsearch 7. ...
- Golang学习的方法和建议
学习方法: 学习方向:go方向是没有问题的 学习方法:多思考多练习,注重语法和关键词练习,切记哑巴学习,会看不会写,切记注意多写 课外学习,数据结构和算法:清华 谭浩强老师(链表.数组.排序...等等 ...
- 解决跨域问题chrome浏览器插件
https://www.crx4chrome.com/crx/53489/ 解决chrome浏览器跨域的问题
- windows2003安装php ,mysql,fastgui
在上一章中,windows2003的iis搭建已经完成,但是我们现在用的多的也包含php,该如何让Windows2003成功使用php文件呢? windows2003需要先行安装vc9运行库才能与fa ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之物理机配置-01
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之物理机配置-01 欢迎加QQ群:1026880196 进行交流学习 近期我发现网上有人转载或者复制 ...
- DevOps之Jenkins相关知识
目录 认识Jenkins 持续集成 持续交付 Jenkins简介 为什么需要Jenkins Jenkins的目标 Jenkins安装 初次使用Jenkins 加速插件安装 Jenkins-CI Jen ...
- 为什么 DNS 协议使用 UDP?只使用了 UDP 吗?
尽人事,听天命.博主东南大学硕士在读,携程 Java 后台开发暑期实习生,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收 ...
- Day09_46_Set集合_SortedSet03
SortedSet03 让SortedSet集合完成比较,还有另外一种方法,那就是单独编写一个比较器. java.util.comparator 在TreeSet集合创建的时候可以在集合中传入一个比较 ...
- python 闭包函数与装饰器
1.什么是闭包函数 (1):什么是闭包函数: #内部函数包含对外部作用域而非全局作用域的引用, 简而言之, 闭包的特点就是内部函数引用了外部函数中的变量. 在Python中,支持将函数当做对象使用,也 ...