一对多 嵌套查询

简介: 一对多 嵌套查询



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


相关文章
|
15小时前
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
6 0
|
23天前
|
SQL 数据库
联合查询(多表查询)
联合查询(多表查询)
20 0
|
7月前
|
SQL 关系型数据库 MySQL
第6章_多表查询
第6章_多表查询
305 0
|
12月前
|
SQL Java 数据库连接
Mybatis多表查询之一对多、多对一
Mybatis多表查询之一对多、多对一
109 0
|
12月前
|
存储 SQL Java
【Mybatis】常见面试题:处理表与表之间的关系:多对一,一对多
【Mybatis】常见面试题:处理表与表之间的关系:多对一,一对多
|
12月前
|
SQL Java 关系型数据库
第06章_多表查询(下)
第06章_多表查询(下)
68 0
第06章_多表查询(下)
|
12月前
|
Oracle 关系型数据库 MySQL
第06章_多表查询(上)
第06章_多表查询
84 0
|
Java 关系型数据库 MySQL
mybatis一对一,一对多,多对多的关联查询
mybatis一对一,一对多,多对多的关联查询
100 0
|
SQL Java 数据库连接
Mybatis的多表关联查询(多对多)
Mybatis的多表关联查询(多对多)
Mybatis的多表关联查询(多对多)
|
SQL Java 数据库连接
Mybatis的多表关联查询(一对一、一对多)
Mybatis的多表关联查询(一对一、一对多)
Mybatis的多表关联查询(一对一、一对多)

热门文章

最新文章