Tk.mybatis零sql语句实现动态sql查询的方法(4种)
有时候,查询数据需要根据条件使用动态查询,这时候需要使用动态sql,通常我们会自己写动态sql来实现,比如:
<select id="findStudentByCondition" resultType="com.example.service.entity.Student">
SELECT id, name, score FROM tbl_student
<where>
<if test="score !=null and score > 0">
score > #{score}
</if>
<if test="name !=null and name != ''">
<bind name="pattern" value=" '%' + name + '%' "/>
AND name LIKE #{pattern}
</if>
</where>
ORDER BY score DESc
</select>
这个sql是查询成绩大于90并且名字包含“i”的学生信息。但是有时候又加了一个条件,又要去改sql,改入参,有没有一种方式可以将写动态sql像写代码一样实现呢?如果你有这个想法,推荐你了解一下Tk.mybatis。
关于Tk.mybatis的介绍以及如何配置,本文暂不介绍,不了解的请自行百度,本文只介绍如何基于tk.mybatis实现不写sql语句也能实现动态sql查询。
实现方式:
1. 使用Example实现
2. 使用Example.createCriteria
3. 使用Example.builder实现
4. 使用WeekendSqls实现
方式一:使用Example实现
/**
* 第一种:使用example查询
*/
@Test
public void testSelectByExample() {
Example example = new Example(Student.class);
// 设置查询列
example.selectProperties("id","name","score");
// 动态sql
example.and()
.andGreaterThan("score",90)
.andLike("name", "%i%");
// 去重
example.setDistinct(true);
// 排序
example.orderBy("score").desc();
List<Student> students = studentMapper.selectByExample(example);
System.out.println(students);
}
方式二:使用example.createCriteria实现
/**
* 第二种:使用example.createCriteria查询
*/
@Test
public void testSelectByExampleCriteria() {
Example example = new Example(Student.class);
// 设置查询列
example.selectProperties("id","name","score");
// 动态查询
example.createCriteria()
.andGreaterThan("score",90)
.andLike("name", "%i%");
// 去重
example.setDistinct(true);
// 排序
example.orderBy("score").desc();
List<Student> students = studentMapper.selectByExample(example);
System.out.println(students);
}
方式三:使用Example.builder实现
/**
* 第三种:使用Example.builder实现
*/
@Test
public void testSelectByExampleBuilder() {
Example example = Example.builder(Student.class)
// 查询列
.select("id","name","score")
// 动态sql
.where(Sqls.custom()
.andGreaterThan("score",90)
.andLike("name","%i%"))
// 去重
.distinct()
// 排序
.orderByDesc("score")
.build();
List<Student> students = studentMapper.selectByExample(example);
System.out.println(students);
}
方式四:使用weekendSqls实现
/**
* 第四种:使用weekendSqls实现
*/
@Test
public void testSelectByWeekendSqls() {
WeekendSqls<Student> sqls = WeekendSqls.custom();
sqls = sqls
.andGreaterThan(Student::getScore,90)
.andLike(Student::getName,"%i%");
List<Student> sysRoles = studentMapper.selectByExample(Example.builder(Student.class)
.select("id","name","score")
.where(sqls)
.distinct()
.orderByDesc("score")
.build());
System.out.println(sysRoles);
}
到此这篇关于Tk.mybatis零sql语句实现动态sql查询的方法(4种)的文章就介绍到这了,更多相关Tk.mybatis 动态sql查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringMVC 文件上传配置,多文件上传,使用的MultipartFile的实例
本篇文章主要介绍了SpringMVC 文件上传配置,详解介绍了如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤,有兴趣的可以了解一下。2016-12-12
Java中redisTemplate注入失败NullPointerException异常问题解决
这篇文章主要介绍了Java中redisTemplate注入失败NullPointerException异常问题解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2023-08-08
Java弱键集合WeakHashMap及ConcurrentCache原理详解
这篇文章主要介绍了Java弱键集合WeakHashMap及ConcurrentCache原理详解,基于哈希表的Map接口实现,支持null键和值,但是WeakHashMap具有弱键,可用来实现缓存存储,在进行GC的时候会自动回收键值对,需要的朋友可以参考下2023-09-09


最新评论