在 Java 中使用 MyBatis 進(jìn)行復(fù)雜查詢,可以通過編寫 SQL 映射文件和使用 MyBatis 提供的動態(tài) SQL 標(biāo)簽來實(shí)現(xiàn)。以下是一個簡單的復(fù)雜查詢示例:
public class User {
private int id;
private String name;
private int age;
// 省略 getter 和 setter 方法
}
<?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.mapper.UserMapper">
<resultMap id="UserResultMap" type="com.example.entity.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
</resultMap>
<select id="復(fù)雜查詢" resultMap="UserResultMap">
SELECT * FROM user
WHERE 1 = 1
<if test="name != null">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="age != null">
AND age = #{age}
</if>
<include refid="分頁查詢" />
</select>
<sql id="分頁查詢">
LIMIT #{offset}, #{pageSize}
</sql>
</mapper>
在這個示例中,我們使用了 MyBatis 的動態(tài) SQL 標(biāo)簽(如 <if>
和 <include>
)來實(shí)現(xiàn)復(fù)雜查詢。<if>
標(biāo)簽用于根據(jù)條件判斷是否添加 SQL 語句,<include>
標(biāo)簽用于引用其他 SQL 語句(如分頁查詢)。
package com.example.mapper;
import com.example.entity.User;
import java.util.List;
public interface UserMapper {
List<User> 復(fù)雜查詢(String name, Integer age, int offset, int pageSize);
}
package com.example.service;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import java.util.List;
public class UserService {
private UserMapper userMapper;
public List<User> getUsers(String name, Integer age, int offset, int pageSize) {
return userMapper.復(fù)雜查詢(name, age, offset, pageSize);
}
}
現(xiàn)在,你可以通過調(diào)用 UserService
類的 getUsers
方法來實(shí)現(xiàn)復(fù)雜查詢。