springboot整合mybatis实现多表查询的实战记录

下面就是“springboot整合mybatis实现多表查询的实战记录”的完整攻略。

一、准备工作

1.1 创建一个SpringBoot项目

在IDE中创建一个SpringBoot项目,选择Web、MyBatis、MySQL等依赖。

1.2 导入需要的依赖

pom.xml文件中导入以下依赖:

<!-- MyBatis依赖 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- MySQL依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

1.3 创建数据库和表

在MySQL中创建数据库和两个表,分别为orderuser。表之间的关系是一个用户可以拥有多个订单。下面是表结构和例子数据:

user表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `user` (id, name) VALUES (1, '张三');
INSERT INTO `user` (id, name) VALUES (2, '李四');

order表

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `order` (id, user_id, name) VALUES (1, 1, '订单1');
INSERT INTO `order` (id, user_id, name) VALUES (2, 1, '订单2');
INSERT INTO `order` (id, user_id, name) VALUES (3, 2, '订单3');

二、实现多表查询

2.1 创建实体类

在项目中创建UserOrder两个实体类,分别对应上面创建的两个表。

User.java

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

    // Getters and setters
}

Order.java

public class Order {
    private int id;
    private int userId;
    private String name;

    // Getters and setters
}

2.2 创建Mapper

src/main/java目录下创建一个mapper包,然后创建UserMapperOrderMapper两个Mapper接口。

UserMapper.java

public interface UserMapper {
    List<User> findAll();
}

OrderMapper.java

public interface OrderMapper {
    List<Order> findByUserId(int userId);
}

2.3 创建Mapper.xml

src/main/resources目录下创建mapper目录,然后在其中创建UserMapper.xmlOrderMapper.xml两个Mapper配置文件。

UserMapper.xml

<mapper namespace="com.example.demo.mapper.UserMapper">
    <resultMap id="UserResultMap" type="com.example.demo.entity.User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
    </resultMap>

    <select id="findAll" resultMap="UserResultMap">
        SELECT *
        FROM user
    </select>
</mapper>

OrderMapper.xml

<mapper namespace="com.example.demo.mapper.OrderMapper">
    <resultMap id="OrderResultMap" type="com.example.demo.entity.Order">
        <id property="id" column="id"/>
        <result property="userId" column="user_id"/>
        <result property="name" column="name"/>
    </resultMap>

    <select id="findByUserId" resultMap="OrderResultMap">
        SELECT *
        FROM `order`
        WHERE user_id = #{userId}
    </select>
</mapper>

2.4 实现多表查询

src/main/java目录下创建controller包,然后在其中创建UserControllerOrderController两个Controller类。

UserController.java

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/users")
    public List<User> getUsers() {
        return userMapper.findAll();
    }
}

OrderController.java

@RestController
public class OrderController {
    @Autowired
    private OrderMapper orderMapper;

    @GetMapping("/users/{userId}/orders")
    public List<Order> getOrdersByUserId(@PathVariable int userId) {
        return orderMapper.findByUserId(userId);
    }
}

2.5 测试多表查询

运行项目,然后在浏览器中访问http://localhost:8080/users接口,可以得到以下结果:

[
    {
        "id": 1,
        "name": "张三"
    },
    {
        "id": 2,
        "name": "李四"
    }
]

然后再访问http://localhost:8080/users/1/orders接口,可以得到以下结果:

[
    {
        "id": 1,
        "userId": 1,
        "name": "订单1"
    },
    {
        "id": 2,
        "userId": 1,
        "name": "订单2"
    }
]

这就是实现多表查询的完整攻略啦!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot整合mybatis实现多表查询的实战记录 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 深入了解Hadoop如何实现序列化

    深入了解Hadoop如何实现序列化的完整攻略如下: 什么是序列化? 序列化是指将对象(数据结构)转换为一系列字节的过程,用于在网络上传输或将它们持久化到磁盘中。 Hadoop中的序列化 在Hadoop中,序列化是通过Writable接口来进行的。Writable是一个Java接口,允许对象在网络上进行序列化和反序列化。 在Hadoop中,大多数数据类型都通过…

    Java 2023年6月1日
    00
  • Java小白第一次就能看懂的网络编程

    Java小白第一次就能看懂的网络编程攻略 什么是网络编程 网络编程指的是利用计算机网络进行通讯和信息交换的程序设计。Java中的网络编程是通过Java自带的网络库进行开发。 Java中的网络编程有两种:基于TCP协议的Socket编程和基于UDP协议的DatagramSocket编程。 Socket编程 Socket编程是指采用TCP协议来进行编程,是一个基…

    Java 2023年5月23日
    00
  • SpringBoot中web模板渲染的实现

    Spring Boot中Web模板渲染的实现 1. 什么是Web模板渲染? Web模板渲染是指将动态数据和静态模板文件结合起来,生成最终的HTML页面的过程。在Spring Boot中,我们可以使用多种模板引擎来实现Web模板渲染,例如Thymeleaf、FreeMarker、Velocity等。 2. Spring Boot中Web模板渲染的实现 在Spr…

    Java 2023年5月18日
    00
  • 详解SpringBoot下文件上传与下载的实现

    详解SpringBoot下文件上传与下载的实现 文件上传 在SpringBoot中,我们可以通过MultipartFile类型的参数来实现文件上传。步骤如下: 在前端,添加一个文件的input框,并设置为type=”file”。 <form action="/upload" method="post" encty…

    Java 2023年5月31日
    00
  • NodeJS实现不可逆加密与密码密文保存的方法

    下面是“NodeJS实现不可逆加密与密码密文保存的方法”的完整攻略。 1. 什么是不可逆加密 不可逆加密(也称哈希函数)是一种将任意长度的输入(一般是明文)通过哈希算法变换成固定长度的输出(一般是密文)的方法,它的特点是不可逆性、唯一性、固定性、散列值分布性等,常用于实现密码的密文保存。 2. NodeJS中的常见哈希函数 在NodeJS中,常见的哈希函数包…

    Java 2023年5月23日
    00
  • Spring Boot 使用 SSE 方式向前端推送数据详解

    在Spring Boot应用程序中,我们可以使用SSE(Server-Sent Events)方式向前端推送数据。SSE是一种基于HTTP协议的轻量级推送技术,它允许服务器向客户端推送数据,而无需客户端发起请求。在本文中,我们将详细讲解如何使用Spring Boot和SSE来实现向前端推送数据。 增加依赖 首先,我们需要在pom.xml文件中增加webflu…

    Java 2023年5月18日
    00
  • Java超详细讲解接口的实现与用法

    Java超详细讲解接口的实现与用法 什么是接口 在Java中,接口是一个与类有相似结构的抽象数据类型。与类不同的是,它只定义一组规范,而不实现这些规范。接口中定义的方法没有具体的实现逻辑,只是给出了方法的签名与返回值类型。 接口的定义与实现 定义接口可以使用interface关键字,接口中可以定义方法和属性。接口中的方法是公共的(public),没有方法体(…

    Java 2023年5月18日
    00
  • Spring-boot oauth2使用RestTemplate进行后台自动登录的实现

    针对这个问题,我将以以下方式进行回答: 1. 什么是Spring-boot oauth2? Spring-Boot Oauth2是Spring Boot框架的一个扩展,可以提供OAuth2的支持。OAuth2是一个用于授权的协议,它提供了一种方式让用户您,可以访问另一个用户的资源,而无需共享密码。 Spring-Boot Oauth2的使用,需要引入相对应的…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部