Mybatis一对一,一对多关联查询

简介: ## MyBatis一对一、一对多关联查询详解MyBatis是一款优秀的持久层框架,提供了灵活的SQL映射功能,支持复杂的数据库操作。本文将详细介绍MyBatis中一对一和一对多关联查询的实现。### 一对一关联查询一对一关联关系指的是一个表中的一条记录与另一个表中的一条记录相关联。例如,一个用户有一个地址信息。#### 数据库表设计假设有两个表:`user`和 `address`。```CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(50));CREATE TABLE address

MyBatis一对一、一对多关联查询详解

MyBatis是一款优秀的持久层框架,提供了灵活的SQL映射功能,支持复杂的数据库操作。本文将详细介绍MyBatis中一对一和一对多关联查询的实现。

一对一关联查询

一对一关联关系指的是一个表中的一条记录与另一个表中的一条记录相关联。例如,一个用户有一个地址信息。

数据库表设计

假设有两个表:useraddress

CREATE TABLE user (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE address (
    id INT PRIMARY KEY,
    user_id INT,
    address VARCHAR(100),
    FOREIGN KEY (user_id) REFERENCES user(id)
);
​

实体类设计

public class User {
    private int id;
    private String name;
    private Address address;

    // Getters and setters
}

public class Address {
    private int id;
    private int userId;
    private String address;

    // Getters and setters
}
​

MyBatis Mapper XML配置

<mapper namespace="com.example.UserMapper">
    <resultMap id="userMap" type="User">
        <id property="id" column="id" />
        <result property="name" column="name" />
        <association property="address" column="id" javaType="Address" select="selectAddressByUserId" />
    </resultMap>

    <select id="selectUserById" resultMap="userMap">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <select id="selectAddressByUserId" resultType="Address">
        SELECT * FROM address WHERE user_id = #{id}
    </select>
</mapper>
​

接口Mapper

public interface UserMapper {
    User selectUserById(int id);
}
​

一对多关联查询

一对多关联关系指的是一个表中的一条记录与另一个表中的多条记录相关联。例如,一个订单有多个商品。

数据库表设计

假设有两个表:orderitem

CREATE TABLE `order` (
    id INT PRIMARY KEY,
    order_number VARCHAR(50)
);

CREATE TABLE item (
    id INT PRIMARY KEY,
    order_id INT,
    item_name VARCHAR(50),
    FOREIGN KEY (order_id) REFERENCES `order`(id)
);
​

实体类设计

public class Order {
    private int id;
    private String orderNumber;
    private List<Item> items;

    // Getters and setters
}

public class Item {
    private int id;
    private int orderId;
    private String itemName;

    // Getters and setters
}
​

MyBatis Mapper XML配置

<mapper namespace="com.example.OrderMapper">
    <resultMap id="orderMap" type="Order">
        <id property="id" column="id" />
        <result property="orderNumber" column="order_number" />
        <collection property="items" ofType="Item" column="id" select="selectItemsByOrderId" />
    </resultMap>

    <select id="selectOrderById" resultMap="orderMap">
        SELECT * FROM `order` WHERE id = #{id}
    </select>

    <select id="selectItemsByOrderId" resultType="Item">
        SELECT * FROM item WHERE order_id = #{id}
    </select>
</mapper>
​

接口Mapper

public interface OrderMapper {
    Order selectOrderById(int id);
}
​

思维导图

- MyBatis 关联查询
  - 一对一关联
    - 数据库表设计
    - 实体类设计
    - MyBatis Mapper XML配置
    - 接口Mapper
  - 一对多关联
    - 数据库表设计
    - 实体类设计
    - MyBatis Mapper XML配置
    - 接口Mapper
​

总结

MyBatis提供了强大的关联查询功能,通过配置 <association><collection>标签,可以实现一对一和一对多的

目录
相关文章
|
3月前
|
SQL XML Java
MyBatis Mapper中使用limit参数的查询问题
总结而言,MyBatis中使用 `limit`参数的查询可以高度定制并且灵活,基于方法签名和XML映射文件的组合来达成多样化的查询需求。通过参数化查询和动态SQL,MyBatis可以有效地处理各种复杂情境下的数据库操作,并且将SQL语句的维护与业务代码的编写相分离,提升代码的可维护性和可阅读性。
326 13
|
4月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
167 1
|
9月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
863 6
|
10月前
|
XML Java 数据库连接
Mybatis实现RBAC权限模型查询
通过对RBAC权限模型的理解和MyBatis的灵活使用,我们可以高效地实现复杂的权限管理功能,为应用程序的安全性和可维护性提供有力支持。
247 5
|
4月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
627 1
Spring boot 使用mybatis generator 自动生成代码插件
|
7月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
548 0
|
9月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
322 2
|
12月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
456 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
12月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
357 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
12月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
2526 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个