MyBatis-Plus详解(环境搭建、关联操作)
环境搭建
添加依赖
在 pom.xml
文件中添加 MyBatis-Plus 的依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
配置文件
在 application.yml
文件中添加 MyBatis-Plus 的配置。
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
typeAliasesPackage: com.example.entity
代码生成器
MyBatis-Plus 提供了一个自动生成代码的工具。在使用前,需要在 pom.xml
文件中添加代码生成器的依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
<scope>test</scope>
</dependency>
在 application.yml
文件中,添加代码生成器的相关配置。
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
mp-generator:
datasource:
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
driverName: com.mysql.jdbc.Driver
username: root
password: root
package:
parent: com.example
strategy:
naming: underline_to_camel
table_prefix: sys_
field_prefix: sys_
运行 MybatisPlusGeneratorApplication
类,即可自动生成代码。
关联操作
MyBatis-Plus 支持 SQL 关联操作,本文以一对多、多对多关联为例。
一对多关联
实体类定义:
@Data
public class User {
private Long id;
private String name;
private String address;
// 一对多关联
@TableField(exist = false)
private List<Order> orderList;
}
@Data
public class Order {
private Long id;
private Long userId;
private BigDecimal price;
private Integer status;
}
Mapper 文件:
<!-- 获取用户及其订单信息 -->
<select id="getUserWithOrders" resultMap="userResultMap">
SELECT
user.id, user.name, user.address,
order.id AS order_id, order.user_id AS order_user_id, order.price, order.status
FROM
sys_user user
LEFT JOIN sys_order order ON user.id = order.user_id
<where>
<if test="id != null">
AND user.id = #{id}
</if>
</where>
<!-- 根据用户id进行分组 -->
<groupBy property="id"></groupBy>
</select>
<resultMap id="userResultMap" type="com.example.entity.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="address" column="address"/>
<!-- 一对多关系 -->
<collection property="orderList" column="order_id" ofType="com.example.entity.Order">
<id property="id" column="order_id"/>
<result property="userId" column="order_user_id"/>
<result property="price" column="price"/>
<result property="status" column="status"/>
</collection>
</resultMap>
调用关联查询:
User user = userMapper.getUserWithOrders(1L);
多对多关联
实体类定义:
@Data
public class User {
private Long id;
private String name;
private String address;
// 多对多关联
@TableField(exist = false)
private List<Role> roleList;
}
@Data
public class Role {
private Long id;
private String roleName;
}
@Data
public class UserRole {
private Long id;
private Long userId;
private Long roleId;
}
Mapper 文件:
<!-- 获取用户及其角色信息 -->
<select id="getUserWithRoles" resultMap="userResultMap">
SELECT
user.id, user.name, user.address,
role.id AS role_id, role.role_name
FROM
sys_user user
LEFT JOIN sys_user_role user_role ON user.id = user_role.user_id
LEFT JOIN sys_role role ON user_role.role_id = role.id
<where>
<if test="id != null">
AND user.id = #{id}
</if>
</where>
<!-- 根据用户id进行分组 -->
<groupBy property="id"></groupBy>
</select>
<resultMap id="userResultMap" type="com.example.entity.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="address" column="address"/>
<!-- 多对多关系 -->
<collection property="roleList" ofType="com.example.entity.Role">
<id property="id" column="role_id"/>
<result property="roleName" column="role_name"/>
</collection>
</resultMap>
调用关联查询:
User user = userMapper.getUserWithRoles(1L);
以上是 MyBatis-Plus 的详细讲解,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis-Plus详解(环境搭建、关联操作) - Python技术站