SelectProvider是MyBatis提供的一種動態SQL的方式,可以根據不同的條件動態生成SQL語句。下面是一個簡單的示例來說明如何使用SelectProvider來實現動態SQL:
首先,定義一個SelectProvider類來生成動態SQL語句,示例如下:
public class UserSqlProvider {
public String findUserById(Integer id) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT * FROM user WHERE id = ").append(id);
return sql.toString();
}
public String findUserByNameAndAge(String name, Integer age) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT * FROM user WHERE 1=1");
if (name != null) {
sql.append(" AND name = ").append(name);
}
if (age != null) {
sql.append(" AND age = ").append(age);
}
return sql.toString();
}
}
然后,在MyBatis的映射文件中使用SelectProvider來引用這個類,示例如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.UserMapper">
<select id="findUserById" resultType="com.example.User"
statementType="CALLABLE">
SELECT *
FROM user
WHERE id = #{id}
</select>
<select id="findUserByNameAndAge" resultType="com.example.User"
statementType="CALLABLE">
SELECT *
FROM user
WHERE 1=1
AND name = #{name}
AND age = #{age}
</select>
</mapper>
在映射文件中,使用SelectProvider的方式引用了UserSqlProvider類中的方法來生成動態SQL語句。在調用這兩個方法時,可以傳入不同的參數來生成不同的SQL語句,實現動態查詢功能。