前言
我们 可以控制sql 在Mybatis的 xml 映射文件里面。Mybatis 也提供了很多标记来帮助我们动态生成Sql 语句,比如 <if>, <foreach> 等等。 但是在我们使用中仍然是觉得不够灵活。
举个例子: 我们想要查询学生表, 第一个筛选是我需要通过学生的id 唯一找到这个学生;第二个筛选是我要找年龄大于10岁的学生。 通常的情况下我们不得不写出两个 <select>
<select id="getStudentById">
SELECT * FROM student WHERE ID = #{id}
</select>
<select id="getStudentsAgeGreaterThan10">
SELECT * FROM student WHERE age > 10
</select>
我们看到了这里其实只是where 条件不同,就需要写两个select, 如果筛选条件多了那么在 xml文件 会有很多代码, 更可怕的是 xml文件是一种弱类型的编辑,如果你写错了是很难排查出来的。
所以如果用mybatis-dynamic-query 我们只用一个select 描述筛选查询:
<select id="getStudentByDynamic" parameterType="java.util.Map">
SELECT * FROM student
<if test="whereExpression != null and whereExpression != ''">WHERE ${whereExpression}</if>
</select>
项目
项目地址: https://github.com/wz2cool/mybatis-dynamic-query
Maven:
<dependency>
<groupId>com.github.wz2cool</groupId>
<artifactId>mybatis-dynamic-query</artifactId>
<version>1.0.2</version>
</dependency>