MyBatis 关联查询:查询用户及其创建的图书信息
在 MyBatis 中,可以通过关联查询来查询一个用户,并同时查询出该用户创建的图书信息。\n\n首先,需要创建两个实体类 User 和 Book,分别对应用户和图书的实体对象。假设 User 实体类中有一个 books 属性,用于存储该用户创建的图书信息。\n\njava\npublic class User {\n private Integer id; \n private String username; \n private List<Book> books; \n // 省略 getter 和 setter 方法\n}\n\npublic class Book {\n private Integer id; \n private String name; \n private Integer userId; \n // 省略 getter 和 setter 方法\n}\n\n\n然后,创建两个 Mapper 接口 UserMapper 和 BookMapper,用于定义查询方法。\n\njava\npublic interface UserMapper {\n User getUserWithBooks(Integer userId); \n}\n\npublic interface BookMapper {\n List<Book> getBooksByUserId(Integer userId); \n}\n\n\n接下来,在 Mapper XML 文件中配置对应的 SQL 语句。\n\nUserMapper.xml:\n\nxml\n<mapper namespace="com.example.mapper.UserMapper">\n <resultMap id="userMap" type="com.example.entity.User">\n <id property="id" column="id"/>\n <result property="username" column="username"/>\n <collection property="books" ofType="com.example.entity.Book">\n <id property="id" column="book_id"/>\n <result property="name" column="book_name"/>\n </collection>\n </resultMap>\n \n <select id="getUserWithBooks" resultMap="userMap">\n SELECT u.id, u.username, b.id AS book_id, b.name AS book_name\n FROM user u\n LEFT JOIN book b ON u.id = b.user_id\n WHERE u.id = #{userId}\n </select>\n</mapper>\n\n\nBookMapper.xml:\n\nxml\n<mapper namespace="com.example.mapper.BookMapper">\n <select id="getBooksByUserId" resultType="com.example.entity.Book">\n SELECT id, name, user_id\n FROM book\n WHERE user_id = #{userId}\n </select>\n</mapper>\n\n\n最后,在业务层中调用对应的 Mapper 方法来完成查询操作。\n\njava\n@Autowired\nprivate UserMapper userMapper; \n\npublic User getUserWithBooks(Integer userId) {\n // 查询用户信息\n User user = userMapper.getUserWithBooks(userId); \n // 查询用户创建的图书信息\n List<Book> books = bookMapper.getBooksByUserId(userId); \n // 将查询结果设置到用户对象中\n user.setBooks(books); \n return user; \n}\n\n\n这样,就可以通过关联查询一次性查询出一个用户的信息,并同时查询出该用户创建的图书信息。
原文地址: https://www.cveoy.top/t/topic/pvLw 著作权归作者所有。请勿转载和采集!