当前位置:实例文章 » JAVA Web实例» [文章]在Spring Boot中使用MyBatis进行两个表的关联

在Spring Boot中使用MyBatis进行两个表的关联

发布人:shili8 发布时间:2024-11-09 08:43 阅读次数:0

**在 Spring Boot 中使用 MyBatis 进行两个表的关联**

在实际开发中,经常会遇到需要从两个或多个表中获取数据的情况。例如,我们有一个用户表(User)和一个订单表(Order),我们需要根据用户 ID 来获取该用户下的所有订单信息。在这种情况下,我们可以使用 MyBatis 的关联功能来实现。

**第一步:配置 MyBatis**

首先,我们需要在 Spring Boot项目中配置 MyBatis。我们可以通过以下方式进行配置:

xml<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>2.1.4</version>
</dependency>


然后,我们需要创建一个 MyBatis 配置文件(application.properties 或 application.yml),配置 MyBatis 的基本信息:

propertiesspring.datasource.url=jdbc:mysql://localhost:3306/mydbspring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.type-aliases-package=com.example.demo.entity


**第二步:创建实体类**

接下来,我们需要创建两个实体类,分别对应 User 和 Order 表:

java// User.java@Entitypublic class User {
 @Id private Long id;
 private String name;

 // getter and setter}

// Order.java@Entitypublic class Order {
 @Id private Long id;
 private Long userId; // foreign key to User table private Date orderDate;

 // getter and setter}


**第三步:创建 MyBatis 映射**

然后,我们需要创建一个 MyBatis 映射文件(UserMapper.xml 或 OrderMapper.xml),定义如何从数据库中获取数据:

xml<!-- UserMapper.xml -->
<mapper namespace="com.example.demo.mapper.UserMapper">
 <resultMap id="BaseResultMap" type="com.example.demo.entity.User">
 <id column="id" jdbcType="BIGINT"/>
 <result column="name" jdbcType="VARCHAR"/>
 </resultMap>

 <select id="findUserById" resultMap="BaseResultMap">
 SELECT * FROM user WHERE id = #{id}
 </select>
</mapper>

<!-- OrderMapper.xml -->
<mapper namespace="com.example.demo.mapper.OrderMapper">
 <resultMap id="BaseResultMap" type="com.example.demo.entity.Order">
 <id column="id" jdbcType="BIGINT"/>
 <result column="user_id" jdbcType="BIGINT"/>
 <result column="order_date" jdbcType="DATE"/>
 </resultMap>

 <select id="findOrdersByUserId" resultMap="BaseResultMap">
 SELECT * FROM order WHERE user_id = #{userId}
 </select>
</mapper>


**第四步:创建 Service 类**

接下来,我们需要创建一个 Service 类,负责业务逻辑的处理:

java// UserService.java@Servicepublic class UserService {
 @Autowired private UserMapper userMapper;

 public List findUsersByUserId(Long userId) {
 //1. 根据用户 ID 获取用户信息 User user = userMapper.findUserById(userId);

 //2. 根据用户 ID 获取订单信息 List orders = userMapper.findOrdersByUserId(userId);

 //3. 将订单信息添加到用户对象中 user.setOrders(orders);

 return Arrays.asList(user);
 }
}


**第五步:测试**

最后,我们需要测试一下我们的 Service 类:

java// TestUserService.java@RunWith(SpringRunner.class)
@SpringBootTestpublic class TestUserService {
 @Autowired private UserService userService;

 @Test public void testFindUsersByUserId() {
 Long userId =1L;
 List users = userService.findUsersByUserId(userId);
 System.out.println(users.get(0).getName());
 System.out.println(users.get(0).getOrders().size());
 }
}


通过以上步骤,我们可以在 Spring Boot 中使用 MyBatis 进行两个表的关联,实现复杂的业务逻辑。

其他信息

其他资源

Top