温馨提示×

MyBatis SelectProvider如何动态SQL

小樊
87
2024-08-02 00:54:14
栏目: 云计算

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语句,实现动态查询功能。

0