MyBatis 查询用户及其课程并进行分页查询
要将查询结果加入集合,并且不影响分页查询,可以使用 MyBatis 的嵌套查询功能。以下是一个示例代码:
- 首先,创建一个 User 类,包含一个 List
属性:
public class User {
private int id;
private String name;
private List<Course> courses;
// 省略 getter 和 setter 方法
}
- 创建一个 Course 类,表示课程:
public class Course {
private int id;
private String name;
// 省略 getter 和 setter 方法
}
- 在 UserMapper.xml 文件中,编写查询用户及其课程的 SQL 语句:
<select id="getUserWithCourses" resultMap="userWithCoursesResultMap">
SELECT u.id, u.name, c.id AS course_id, c.name AS course_name
FROM user u
LEFT JOIN user_course uc ON u.id = uc.user_id
LEFT JOIN course c ON uc.course_id = c.id
WHERE u.id = #{id}
</select>
<resultMap id="userWithCoursesResultMap" type="User">
<id property="id" column="id" />
<result property="name" column="name" />
<collection property="courses" ofType="Course">
<id property="id" column="course_id" />
<result property="name" column="course_name" />
</collection>
</resultMap>
- 在 UserMapper 接口中定义一个 getUserWithCourses 方法:
public interface UserMapper {
User getUserWithCourses(int id);
}
- 在 UserMapper.xml 文件中,编写分页查询用户的 SQL 语句:
<select id="getUserList" resultMap="userResultMap">
SELECT id, name
FROM user
LIMIT #{offset}, #{limit}
</select>
<select id="getUserCount" resultType="int">
SELECT COUNT(*) FROM user
</select>
<resultMap id="userResultMap" type="User">
<id property="id" column="id" />
<result property="name" column="name" />
</resultMap>
- 在 UserMapper 接口中定义一个 getUserList 方法:
public interface UserMapper {
List<User> getUserList(@Param("offset") int offset, @Param("limit") int limit);
int getUserCount();
}
这样,你就可以分别调用 getUserWithCourses 和 getUserList 方法来查询用户及其课程,以及进行分页查询,两者之间互不影响。
原文地址: https://www.cveoy.top/t/topic/mMw9 著作权归作者所有。请勿转载和采集!