MyBatis User对象表内有课程表的集合 如何将查询结果加入集合 不影响分页查询应该怎么写
要将查询结果加入集合,并且不影响分页查询,可以使用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/i5rk 著作权归作者所有。请勿转载和采集!