在mybati-config.xml中引入
配置Orders.xml
<?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.wy.mapper.Orders"> <!-- 根据id查询证件信息 --> <select id="findUserWithOrders1" parameterType="Integer" resultType="Orders"> SELECT * FROM tb_orders where id =#{id} </select> </mapper>
在配置User.xml
<?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.wy.mapper.UserMapper"> <select id="findUserWithOrders1" parameterType="Integer" resultMap="UserWithOrdersResult1"> SELECT *from tb_user where id=#{id} </select> <resultMap type="User" id="UserWithOrdersResult1"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="address" column="address"/> <collection property="ordersList" column="id" ofType="com.wy.po.Orders" select="com.wy.mapper.Orders.findUserWithOrders1"/> </resultMap>
即可
在 MyBatis 中,嵌套查询可以用于处理一对多(One-to-Many)关系。这种关系通常发生在数据库表之间,其中一个记录在一个表中,而与之关联的多个记录存储在另一个表中。
以下是一个简单的示例,展示如何在 MyBatis 中进行一对多的嵌套查询:
假设我们有两个实体类 `Author` 和 `Book`,分别对应数据库中的两个表。
```java public class Author { private Long id; private String name; private List<Book> books; // getters and setters } public class Book { private Long id; private String title; private Long authorId; // getters and setters } ``` 对应的 Mapper 接口可能如下: ```java public interface AuthorMapper { Author getAuthorWithBooks(Long authorId); } ``` 对应的 XML 映射文件(AuthorMapper.xml): ```xml <mapper namespace="com.example.AuthorMapper"> <resultMap id="AuthorResultMap" type="Author"> <id property="id" column="author_id"/> <result property="name" column="author_name"/> <collection property="books" ofType="Book" resultMap="BookResultMap"/> </resultMap> <resultMap id="BookResultMap" type="Book"> <id property="id" column="book_id"/> <result property="title" column="book_title"/> <result property="authorId" column="author_id"/> </resultMap> <select id="getAuthorWithBooks" resultMap="AuthorResultMap"> SELECT a.id AS author_id, a.name AS author_name, b.id AS book_id, b.title AS book_title FROM authors a LEFT JOIN books b ON a.id = b.author_id WHERE a.id = #{authorId} </select> </mapper> ```
在这个例子中,`Author` 类包含一个 `List<Book>` 属性,通过在 XML 映射文件中使用 `collection` 元素,我们可以进行一对多的嵌套查询。`LEFT JOIN` 语句确保即使某个作者没有书籍,他们的信息也会被检索出来。
通过调用 `getAuthorWithBooks` 方法,我们可以获取一个作者及其关联的所有书籍的详细信息。
```java
Author author = authorMapper.getAuthorWithBooks(1L);
```
这个例子涉及到 MyBatis 的 resultMap、association 和 collection 等元素的使用。具体的 SQL 查询和 XML 配置需要根据数据库结构和实际需求进行调整。