一、适用场景

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查询语句中动态追加查询条件的更多相关文章

  1. HQL查询语句中的模糊查询

    From Person this Where this.name like '%abc%' @SuppressWarnings("unchecked") @Override pub ...

  2. 查询语句中select from where group by having order by的执行顺序

    查询语句中select from where group by having order by的执行顺序   1.查询中用到的关键词主要包含六个,并且他们的顺序依次为  select--from--w ...

  3. Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...

  4. 在 SQL Server 数据库的 WHERE 语句中使用子查询

    这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Serv ...

  5. 关于sql查询语句中的别名

    sql语句中给子查询或其他查询类型加别名的时候可能会报错 java.sql.SQLException: 无法转换为内部表示 原因是select返回类型的实体类中没有写该别名 原来的实体类 更改后的实体 ...

  6. mysql查询语句中使用星号真的慢的要死?

    前言 之所以写这篇文章,是源于以前看过的关于sql语句优化的帖子,里面明确提到了在sql语句中不要使用 * 来做查询,就像下面的规则中说的 2.尽量避免使用select *,返回无用的字段会降低查询效 ...

  7. Mysql查询语句中字符型字段不区分大小写解决方法

    项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...

  8. mysql常用内置函数-查询语句中不能使用strtotime()函数!

    来自:http://yushine.iteye.com/blog/775407 FROM_UNIXTIME把 unix时间戳转换为标准时间 unix_timestamp把标准时间转换为 unix时间戳 ...

  9. mysql查询语句中like 的用法

    1.常见用法: (1)搭配%使用 %代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据: (2)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一 ...

随机推荐

  1. ubuntu修改默认启动内核

    一.序言 新换的笔记本由于太新的主板芯片,驱动还没有完善.每次升级系统内核都要小心谨慎.经常发生部分硬件驱动失败的事情.系统Ubuntu 20.04.2 LTS x86_64 ,我现在使用的两个版本的 ...

  2. canvas绘制图像轮廓效果

    在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果.  发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...

  3. PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...

  4. 解决删除Azure Active Directory的Enterprise Applications异常

    当我们不需要使用某个Azure Active Directory(以下简称AAD)的时候,我们可以删除它,这个时候Azure会对当前的AAD包含的内容进行检查, 在所有的检查项目中有一个名叫" ...

  5. java面试-集合类不安全问题及解决方案

    一.List 1.代码演示 public class ArrayListNotSafeDemo { public static void main(String[] args) { List<S ...

  6. OO_Unit3总结

    OO_Unit3总结 一.JML情况 理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言,为严格的程序设计提供了一套行之有效的方法.通过J ...

  7. Java刷题-tree

    一.分别按照二叉树先序,中序和后序打印所有的节点. 这道题就是书上的算法思想的实际使用,唯一需要特别注意到的是用递归的方式建树,还是比较巧妙的,因为一棵树的建立过程字符流是重复使用的,用递归的方式对根 ...

  8. Django中 render() 函数的使用方法

    render() 函数 在讲 render() 函数之前,我们在 Django 项目 index 文件夹的 urls.py 和 views.py 中编写如下功能代码:(不难,望读者细心阅之) # in ...

  9. @Transactional+@Autowired出现的lateinit property xx has not been initialized错误

    1 问题描述 用Kotlin编写Spring Boot,在业务层中使用@Transactional+@Autowired时出现如下错误: lateinit property dao has not b ...

  10. JavaFX获取屏幕尺寸

    1 awt Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); double width = screenSize. ...