一对多 嵌套查询

简介: 一对多 嵌套查询



在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 配置需要根据数据库结构和实际需求进行调整。


相关文章
|
8月前
|
C语言
一对多表操作
一对多表操作
43 0
|
11月前
|
SQL Java 数据库连接
Mybatis多表查询之一对多、多对一
Mybatis多表查询之一对多、多对一
102 0
|
Java 关系型数据库 MySQL
mybatis一对一,一对多,多对多的关联查询
mybatis一对一,一对多,多对多的关联查询
93 0
|
SQL Java 数据库连接
Mybatis的多表关联查询(一对一、一对多)
Mybatis的多表关联查询(一对一、一对多)
Mybatis的多表关联查询(一对一、一对多)
|
SQL Java 数据库连接
Mybatis的多表关联查询(多对多)
Mybatis的多表关联查询(多对多)
Mybatis的多表关联查询(多对多)
|
IDE Java 关系型数据库
MyBatis之一对多,多对一 关联查询(内容详细,建议收藏)
MyBatis之一对多,多对一 关联查询(内容详细,建议收藏)
309 0
MyBatis之一对多,多对一 关联查询(内容详细,建议收藏)
|
SQL 存储 关系型数据库
看完就懂的连表查询
看完就懂的连表查询
看完就懂的连表查询
|
Java 数据库
多对多级联操作
关联关系中多对多:                            一个对象对应着另一个表的多个数据,所以多对多都是用集合来封装                            之所以用集合是因为,因为一个表的对象对应另一个表的多个对象所以用集合 一、联查:  public class.
803 0
|
Java 数据库连接 关系型数据库