环境介绍
Spring Boot使用版本
<version>2.0.6.RELEASE</version>
jdk使用版本
<java.version>1.8</java.version>
Mybatis-plus使用版本
<mybatis-plus.version>3.1.0</mybatis-plus.version>
Mybatis-plus使用的依赖
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
以上是项目使用的环境背景。
需求及解决方案
需求
需要实现的SQL如下:
select t1.CT_ID, t1.TITLE, t1.SUBTITLE, t1.CON, t1.CON_H5, t1.ABSTRACT_STRING, t1.AUTHOR, t1.CT_TIME, t1.KW, t1.IS_AUTODIS, t1.DIS_TIME, t1.AU_STATE, t1.PUB_STATE, t1.DEL_TAG, t1.PUB_OPT, t1.PUB_TIME, t1.LIKE_NUM, t1.READ_NUM, t1.COVER_PATH, t1.CONTENT_TYP, t1.URL, t1.IS_TIMEING, t1.TIMEING_DATE, t1.CRT_OPT, t1.CRT_TIME, t1.UPD_OPT, t1.UPD_TIME, t1.REMARK
from PCM_ARTICLE t1
WHERE ( au_state = '1' OR au_state = '2' ) AND pub_state = '0' and t1.DEL_TAG = '0'
(com.baomidou.mybatisplus.core.conditions.query)LambdaQueryWrapper使用该对象实现对条件的拼接,具体实现方案参考下文。
解决方案
需要查阅LambdaQueryWrapper的使用方法,这里需要用到Lambda表达式的用法,该例实现如下
queryWrapper.and(Wrapper -> Wrapper.eq(PcmArticle::getAuState, "1").or().eq(PcmArticle::getAuState, "2"));
效果如下:
WHERE ( au_state = '1' OR au_state = '2' )
如果此处SQL没有括号,直接使用or即可
queryWrapper.or();
参考资料:
https://mp.baomidou.com/guide/wrapper.html
有关Lambda表达式的部分可以参照百度百科
https://baike.baidu.com/item/Lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F/4585794?fr=aladdin
Java8中一个Lambda的简单例子:
//匿名内部类写法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("内部类写法");
}
}).start();
使用Lambda表达式后,效果:
//lambda 写法
new Thread(() -> System.out.println("lambda写法")).start();
使用Lambda表达式后,代码更加简洁,但可读性会有所提高,要酌情使用。