SpringBoot整合Mybatis-Plus实现关联查询
作者:晴栀_mm
一、搭建环境
1.创建Maven普通项目
2.添加依赖坐标
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> </parent> <dependencies> <!--单元测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 数据库驱动 --> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!-- <version>8.0.19</version>--> </dependency> <!-- lombok 简化set get toString --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> </dependencies>
3.导入SpringBoot的相关插件
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
4.创建mapper包、pojo包和启动类Starter
mapper包:
在该包下定接口继承BaseMapper接口
pojo包:
在该包下定义实体类:客户类、商品类、订单类和订单详情类
Starter类:
用于SpringBoot项目启动运行
import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication //扫描mapper接口所在的包 @MapperScan("com.hs.mapper") public class Starter { public static void main(String[] args) { SpringApplication.run(Starter.class); } }
5.在resources文件下配置yml文件(数据库配置和日志配置)
#数据库配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm2?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: 123456 #添加日志配置项 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
6.在resources文件下创建mapper文件夹,在mapper下创建XML文件自定义数据库操作功能实现
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
二、实现订单表和用户表关联查询(一对一)
需求:关联查询其相关用户信息
订单表->用户表:一个订单只由一个用户创建,一对一关系
做法:1.在Orders类中加入Users属性,Users属性用于存储关联查询的用户信息。
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Orders { private Integer id; private String orderNumber; private Double totalPrice; private String status; private Integer userId; /* *多表查询:一对一关系 * 订单表关联查询用户表 * */ private Users users; }
2.在OrderMapper接口中,自定义功能实现
@Mapper public interface OrderMapper extends BaseMapper<Orders> { public List<Orders> selectUserResultMap(); }
3.在resources文件下mapper文件夹里,书写映射下XML文件UserMapper
resultMap:需要单独定义resultMap,使用 resultMap可以完成将关联查询映射到实体类的属性中。
association标签: 一对一关系映射描述。
- property: 关系属性名称。
- javaType: 关系属性类型。
<resultMap id="selectUserResultMap" type="com.hs.pojo.Orders"> <id column="id" property="id"/> <id column="order_number" property="orderNumber"/> <id column="total_price" property="totalPrice"/> <id column="status" property="status"/> <association property="users" javaType="com.hs.pojo.Users"> <id column="user_id" property="id"/> <id column="username" property="username"/> <id column="password" property="password"/> <id column="realname" property="realname"/> </association> </resultMap> <select id="selectUserResultMap" resultType="com.hs.pojo.Orders"> select o.*,u.username,u.password,u.realname from orders o,users u where o.user_id=u.id </select>
4.在测试类中进行测试
@RunWith(SpringRunner.class) @SpringBootTest(classes=Starter.class) public class Test1 { @Resource private OrderMapper orderMapper; //多表查询:一对一关系 //订单表关联查询用户表 @Test public void selectOneByOne(){ List<Orders> orders = orderMapper.selectUserResultMap(); orders.forEach(System.out::println); } }
三、实现订单表和订单详情表关联查询(一对多)
需求:
- 关联查询其相关用户信息。
- 关联查询其相关订单详情信息。
订单表->订单详情表:一对多
具体做法同上。
1.在Orders类中加入属性ordersDetailList
/* * 一对多关系属性:一个订单包含多个订单详情 * */ private List<OrderDetails> ordersDetailList;
2.在OrderMapper接口中,自定义功能实现
/* * 一对多:查询订单信息, * 一个订单对应多条详情信息,则是一对多 * */ public List<Orders> selectOrdersAndDetail();
3.在resources文件下mapper文件夹里,书写映射下XML文件UserMapper
在Order类中加入ordersDetailList属性,details属性用于存储关联查询的订单详情。
collection标签: 一对多关系映射描述。
- property: 关系属性名称。
- ofType: 关系属性是一个List集合,集合中存放的元素类型。
<!-- collection:一对多 property:订单实体类中的属性 ofType:集合里面存储的类型 --> <collection property="orderDetailList" ofType="com.hs.pojo.OrderDetails"> <id column="detail_id" property="id"/> <id column="amount" property="amount"/> <id column="orders_id" property="ordersId"/> <id column="goods_id" property="goodsId"/> </collection> </resultMap> <select id="selectOrdersAndDetail" resultMap="detailResultMap"> select o.*,u.username,u.password,u.realname,d.id detail_id,d.amount,d.orders_id,d.goods_id from orders o,users u,orders_detail d where o.user_id=u.id and o.id=d.orders_id </select>
四、实现订单表和商品表关联查询(多对多)
中间表:订单详情表
需求:
- 关联查询其相关用户信息。
- 关联查询其相关订单详情信息。
- 关联查询订单详情中的商品信息。
订单表->订单详情表:一对多 订单详情表->订单表:一对一
订单详情表->商品表:一对一 商品表->订单详情表:一对多
订单表->商品表:一对多 商品表->订单表:多对一
做法:
1.在OrderDetails类中加入属性goods
2.在OrderMapper接口中,自定义功能实现
3.在resources文件下mapper文件夹里,书写映射下XML文件UserMappe
<resultMap id="goodsResultMap" type="com.hs.pojo.Orders"> <id column="id" property="id"/> <id column="order_number" property="orderNumber"/> <id column="total_price" property="totalPrice"/> <id column="status" property="status"/> <!-- collection:一对多映射 property:订单实体类中的属性 ofType:集合里面存储的类型 --> <collection property="orderDetailList" ofType="com.hs.pojo.OrderDetails"> <id column="detail_id" property="id"/> <id column="amount" property="amount"/> <id column="orders_id" property="ordersId"/> <id column="goods_id" property="goodsId"/> <association property="goods" javaType="com.hs.pojo.Goods"> <id column="goods_id" property="id"/> <id column="goods_name" property="goodsName"/> <id column="description" property="description"/> <id column="price" property="price"/> </association> </collection> </resultMap> <select id="selectOrdersAndGoods" resultMap="goodsResultMap"> select o.*,d.goods_id,g.goods_name,g.description,g.price from orders o,orders_detail d,goods g where o.id = d.orders_id and d.goods_id = g.id </select>
以上就是SpringBoot整合Mybatis-Plus实现关联查询的详细内容,更多关于SpringBoot Mybatis-Plus关联查询的资料请关注脚本之家其它相关文章!