在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 进行两个表的关联,实现复杂的业务逻辑。

