• Mybatis 快速入门之 关联关系映射


    目录

    一:基本概念

    二:关联关系的分类

    一对一,一对多,多对一,多对多

    关系的撰述:

    一对多:一本书对应多种书本类型,例如:西游记 -> 神话、古典、名著

    多对一:多本书指向一种书本类型,例如:西游记、山海经、聊斋志异 -> 神话  

    多对多:永远视为两个一对多

    一个人负责多个项目开发,例如:张三负责 A B C

    一个项目由多个人来开发,例如:A项目由张三、李四、王五来开发

    三:实现关联关系的操作步骤

    案例一:实现一对多关系

           一对多:一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a, 在多的一方,添加一的一方的主键作为外键

    1.将数据表导入数据库中

    2.通过mybatis-generator插件生成dao、mapper、model层

    重点:

    客户实体类----Customer:

    CustomerMapper:

    3..配置mybatis关联映射文件------CustomerMapper.xml

    属性解析:

    servicej接口类与实现类:

    4.junit4单元测试

    案例二:实现多对一关系

    建立实体层面的关联关系: 多对一:多个订单对应一个客户(一个订单对应唯一一个客户)

    订单实体类----order

    1.orderMapper层

    2.配置mybatis关联映射文件------OrderMapper.xml

     在元素中,包含了一个子元素,MyBatis通过该元素来处理一对多关联关系。

    在元素中,包含了一个子元素,MyBatis就是通过该元素来处理一对一关联关系。

    3.servicej接口类与实现类:

    4.junit4单元测试

    案例三:实现多对多关系

    2.通过mybatis-generator插件生成dao、mapper、model层

    NewsCategoryMapper:

    3.配置mybatis关联映射文件

    4.servicej接口类与实现类:

    5.junit4单元测试


    一:基本概念

            关联关系是指类之间的引用关系,如果类A与类B关联,那么类A将被定义成类B的属性。

    以下例子可以表现类之间的引用关系:

      Adress类:

    1. public class Address{
    2. private String name;
    3. }

    B类:

    1. public class B{
    2. private String sid;
    3. private Float score;
    4. private Address address;
    5. }

           adress这个类被定义成类B的属性,可以通过B类来调用adress类的相关属性,它们之间存在着引用关系

    二:关联关系的分类

    • 一对一,一对多,多对一,多对多

    关系的撰述:

    • 一对多:一本书对应多种书本类型,例如:西游记 -> 神话、古典、名著

    • 多对一:多本书指向一种书本类型,例如:西游记、山海经、聊斋志异 -> 神话  

    • 多对多:永远视为两个一对多

    • 一个人负责多个项目开发,例如:张三负责 A B C

    • 一个项目由多个人来开发,例如:A项目由张三、李四、王五来开发

    三:实现关联关系的操作步骤

    • 案例一:实现一对多关系

           一对多:一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a, 在多的一方,添加一的一方的主键作为外键

    1.将数据表导入数据库中

    1. -- 一对多
    2. -- 客户表(主表)
    3. create table t_customer
    4. (
    5. customer_id int primary key not null auto_increment,
    6. customer_name varchar(50) not null
    7. );
    8. -- 多对一
    9. -- 订单表(从表)
    10. create table t_order
    11. (
    12. order_id int primary key not null auto_increment,
    13. order_no varchar(50) not null unique,
    14. cid int not null,
    15. foreign key(cid) references t_customer(customer_id)
    16. );
    17. -- 初始化代码
    18. delete from t_order;
    19. delete from t_customer;
    20. -- 与mssql不一样,自动增长是可以赋值,也可以不赋值
    21. insert into t_customer(customer_id,customer_name) values(1, 'zs');
    22. insert into t_customer(customer_id,customer_name) values(2, 'ls');
    23. insert into t_customer(customer_id,customer_name) values(3, 'ww');
    24. insert into t_customer(customer_id,customer_name) values(4, 'xm');
    25. insert into t_order(order_no,cid) values('P01',1);
    26. insert into t_order(order_no,cid) values('P02',1);
    27. insert into t_order(order_no,cid) values('P03',1);
    28. insert into t_order(order_no,cid) values('P04',1);
    29. insert into t_order(order_no,cid) values('P05',1);
    30. insert into t_order(order_no,cid) values('P06',2);
    31. insert into t_order(order_no,cid) values('P07',2);
    32. insert into t_order(order_no,cid) values('P08',2);
    33. insert into t_order(order_no,cid) values('P09',3);
    34. insert into t_order(order_no,cid) values('P10',3);
    35. SELECT * FROM t_customer;
    36. SELECT * FROM t_order;

    2.通过mybatis-generator插件生成dao、mapper、model层

    如果有兴趣了解插件的配置,可以参考之前的博客:

    nullMVC全名是ModelViewCotroller,是模型(model)——视图(view)——控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码自定义MVCSSMaction(中转站-----servlet类)controller(控制层)biz(业务逻辑处理层)servicedao(数据访问层)mapperIXxxDAO.java(接口)XxxMapper.java(接口)XxxDAOImpl.java(实现类)......https://blog.csdn.net/qq_61313896/article/details/125969558

    重点:

    • 建立实体层面的关联关系:

            一对多:一个客户(customer)对应多个订单(order)

    如果要建立一对多的关系,则要在客户实体类建立关系:
      private List orders=new ArrayList<>();
    

    客户实体类----Customer:

    1. package com.tangyuan.model;
    2. import lombok.ToString;
    3. import java.util.ArrayList;
    4. import java.util.List;
    5. /**
    6. * 建立实体层面的关联关系:
    7. * 一对多:一个客户(customer)对应多个订单(order)
    8. */
    9. public class Customer {
    10. private Integer customerId;
    11. private String customerName;
    12. //A:订单(Order) B:客户(Customer)
    13. //一对多
    14. private List orders=new ArrayList<>();
    15. public Customer(Integer customerId, String customerName) {
    16. this.customerId = customerId;
    17. this.customerName = customerName;
    18. }
    19. public List getOrders() {
    20. return orders;
    21. }
    22. public void setOrders(List orders) {
    23. this.orders = orders;
    24. }
    25. public Customer() {
    26. super();
    27. }
    28. public Integer getCustomerId() {
    29. return customerId;
    30. }
    31. public void setCustomerId(Integer customerId) {
    32. this.customerId = customerId;
    33. }
    34. public String getCustomerName() {
    35. return customerName;
    36. }
    37. public void setCustomerName(String customerName) {
    38. this.customerName = customerName;
    39. }
    40. @Override
    41. public String toString() {
    42. return "Customer{" +
    43. "customerId=" + customerId +
    44. ", customerName='" + customerName + '\'' +
    45. ", orders=" + orders +
    46. '}';
    47. }
    48. }

    CustomerMapper:

    1. package com.tangyuan.mapper;
    2. import com.tangyuan.model.Customer;
    3. import org.springframework.stereotype.Repository;
    4. import java.util.List;
    5. @Repository
    6. public interface CustomerMapper {
    7. /**
    8. * 查询所有
    9. * @return
    10. */
    11. List queryCustomer();
    12. }

    3..配置mybatis关联映射文件------CustomerMapper.xml

    1. <resultMap id="one2many" type="Customer">
    2. <id column="customer_id" property="customerId"/>
    3. <result column="customer_name" property="customerName"/>
    4. <collection property="orders" ofType="Order">
    5. <id column="order_id" property="orderId"/>
    6. <result column="order_no" property="orderNo"/>
    7. collection>
    8. resultMap>

    属性解析:

                元素表示的是结果映射集,是 MyBatis 中最重要也是最强大的元素,主要是用来定义映射规则、级联的更新以及定义类型转化器等。

                 在元素中,包含了一个子元素,MyBatis通过该元素来处理一对多关联关系

         包含一个特殊属性ofType,它用于指定实体对象中集合类属性所包含的元素类型

          Property:指定映射到的实体类对象属性,与表字段一一对应

          Column:指定表中对应的字段

          javaType:指定映射到实体对象属性的类型

          Select:指定引入嵌套查询的子SQL语句,该属性用于关联映射中的嵌套查询

     完整代码如下:

    1. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    2. <mapper namespace="com.tangyuan.mapper.CustomerMapper" >
    3. <resultMap id="BaseResultMap" type="com.tangyuan.model.Customer" >
    4. <constructor >
    5. <idArg column="customer_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
    6. <arg column="customer_name" jdbcType="VARCHAR" javaType="java.lang.String" />
    7. constructor>
    8. resultMap>
    9. <resultMap id="oneToMany" type="com.tangyuan.model.Customer">
    10. <id property="customerId" javaType="java.lang.Integer" column="order_id"/>
    11. <result property="customerName" javaType="java.lang.String" column="customer_name"/>
    12. <collection property="orders" ofType="com.tangyuan.model.Order" column="cid">
    13. <id property="cid" javaType="java.lang.Integer" column="cid"/>
    14. <id property="orderId" javaType="java.lang.Integer" column="order_id"/>
    15. <result property="orderNo" javaType="java.lang.String" column="order_no"/>
    16. collection>
    17. resultMap>
    18. <sql id="Base_Column_List" >
    19. customer_id, customer_name
    20. sql>
    21. <select id="queryCustomer" resultMap="oneToMany">
    22. SELECT * FROM t_customer c left join
    23. t_order o on c.customer_id=o.cid;
    24. select>
    25. mapper>

          注意事项,使用左外连接而非内连接,为了防止因为内连接的特性而让有一些客户因为没有订单而消失不见

    servicej接口类与实现类:

    1. package com.tangyuan.service;
    2. import com.tangyuan.model.Customer;
    3. import org.springframework.stereotype.Repository;
    4. import java.util.List;
    5. public interface ICustomerService {
    6. /**
    7. * 查询所有
    8. * @return
    9. */
    10. List queryCustomer();
    11. }
    1. package com.tangyuan.service.impl;
    2. import com.tangyuan.mapper.CustomerMapper;
    3. import com.tangyuan.model.Customer;
    4. import com.tangyuan.service.ICustomerService;
    5. import com.tangyuan.service.IOrderService;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. import java.util.List;
    9. /**
    10. * @author 唐渊
    11. * @create  2022-07-27 11:29
    12. */
    13. @Service
    14. public class CustomerServiceImpl implements ICustomerService {
    15. @Autowired
    16. private CustomerMapper customerMapper;
    17. @Override
    18. public List queryCustomer() {
    19. return customerMapper.queryCustomer();
    20. }
    21. }

    4.junit4单元测试

    1. package com.tangyuan.service.impl;
    2. import com.tangyuan.model.Customer;
    3. import com.tangyuan.model.Order;
    4. import com.tangyuan.service.ICustomerService;
    5. import com.tangyuan.service.IOrderService;
    6. import org.junit.Test;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import java.util.List;
    9. import static org.junit.Assert.*;
    10. /**
    11. * @author 唐渊
    12. * @create  2022-07-27 11:32
    13. */
    14. public class CustomerServiceImplTest extends BaseTest{
    15. @Autowired
    16. //用接口接收代理对象
    17. private ICustomerService customerService;
    18. @Test
    19. public void queryCustomer() {
    20. List customers = customerService.queryCustomer();
    21. customers.forEach(System.out::println);
    22. }
    23. }

    测试结果: 

    • 案例二:实现多对一关系

    重点:

    • 建立实体层面的关联关系:
      多对一:多个订单对应一个客户(一个订单对应唯一一个客户)

      private Customer customer;
    

    订单实体类----order

    1. package com.tangyuan.model;
    2. /**
    3. * 建立实体层面的关联关系:
    4. * 多对一:多个订单对应一个客户(一个订单对应唯一一个客户)
    5. */
    6. public class Order {
    7. private Integer orderId;
    8. private String orderNo;
    9. private Integer cid;
    10. //B:订单(Order) A:客户(Customer)
    11. //多对一
    12. private Customer customer;
    13. public Order(Integer orderId, String orderNo, Integer cid) {
    14. this.orderId = orderId;
    15. this.orderNo = orderNo;
    16. this.cid = cid;
    17. }
    18. public Order() {
    19. super();
    20. }
    21. public Customer getCustomer() {
    22. return customer;
    23. }
    24. public void setCustomer(Customer customer) {
    25. this.customer = customer;
    26. }
    27. public Integer getOrderId() {
    28. return orderId;
    29. }
    30. public void setOrderId(Integer orderId) {
    31. this.orderId = orderId;
    32. }
    33. public String getOrderNo() {
    34. return orderNo;
    35. }
    36. public void setOrderNo(String orderNo) {
    37. this.orderNo = orderNo;
    38. }
    39. public Integer getCid() {
    40. return cid;
    41. }
    42. public void setCid(Integer cid) {
    43. this.cid = cid;
    44. }
    45. @Override
    46. public String toString() {
    47. return "Order{" +
    48. "orderId=" + orderId +
    49. ", orderNo='" + orderNo + '\'' +
    50. ", cid=" + cid +
    51. ", customer=" + customer +
    52. '}';
    53. }
    54. }

    1.orderMapper层

    1. package com.tangyuan.mapper;
    2. import com.tangyuan.model.Order;
    3. import org.springframework.stereotype.Repository;
    4. @Repository
    5. public interface OrderMapper {
    6. Order queryOrderById(Integer OrderId);
    7. }

    2.配置mybatis关联映射文件------OrderMapper.xml

    1. <resultMap id="many2one" type="Order">
    2. <id column="order_id" property="orderId"/>
    3. <result column="order_no" property="orderNo"/>
    4. <result column="cid" property="cid"/>
    5. <association property="customer" javaType="Customer">
    6. <id column="customer_id" property="customerId"/>
    7. <result column="customer_name" property="customerName"/>
    8. association>
    9. resultMap>

    完整版代码如下:

    1. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    2. <mapper namespace="com.tangyuan.mapper.OrderMapper" >
    3. <resultMap id="BaseResultMap" type="com.tangyuan.model.Order" >
    4. <constructor >
    5. <idArg column="order_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
    6. <arg column="order_no" jdbcType="VARCHAR" javaType="java.lang.String" />
    7. <arg column="cid" jdbcType="INTEGER" javaType="java.lang.Integer" />
    8. constructor>
    9. resultMap>
    10. <resultMap id="ManytoOne" type="com.tangyuan.model.Order">
    11. <id property="orderId" javaType="java.lang.Integer" column="order_id"/>
    12. <result property="orderNo" javaType="java.lang.String" column="order_no"/>
    13. <result property="cid" javaType="java.lang.Integer" column="cid" />
    14. <association property="customer" javaType="com.tangyuan.model.Customer">
    15. <id property="customerId" javaType="java.lang.Integer" column="customer_id" />
    16. <result property="customerName" javaType="java.lang.String" column="customer_name" />
    17. association>
    18. resultMap>
    19. <sql id="Base_Column_List" >
    20. order_id, order_no, cid
    21. sql>
    22. <select id="queryOrderById" resultMap="ManytoOne">
    23. SELECT * FROM t_customer c INNER join
    24. t_order o on c.customer_id=o.cid
    25. where o.order_id=#{orderId}
    26. select>
    27. mapper>

             

    •  在元素中,包含了一个子元素,MyBatis通过该元素来处理一对多关联关系。

    • 元素中,包含了一个子元素,MyBatis就是通过该元素来处理一对一关联关系。

    3.servicej接口类与实现类:

    1. package com.tangyuan.service;
    2. import com.tangyuan.model.Order;
    3. import org.springframework.stereotype.Repository;
    4. @Repository
    5. public interface IOrderService {
    6. Order queryOrderById(Integer OrderId);
    7. }
    1. package com.tangyuan.service.impl;
    2. import com.tangyuan.mapper.OrderMapper;
    3. import com.tangyuan.model.Order;
    4. import com.tangyuan.service.IOrderService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. /**
    8. * @author 唐渊
    9. * @create  2022-07-27 11:56
    10. */
    11. //org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.tangyuan.service.impl.CustomerServiceImplTest': Unsatisfied dependency expressed through field 'orderService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.tangyuan.service.IOrderService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations:
    12. // {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    13. @Service
    14. public class OrderServiceImpl implements IOrderService {
    15. @Autowired
    16. private OrderMapper orderMapper;
    17. @Override
    18. public Order queryOrderById(Integer OrderId) {
    19. return orderMapper.queryOrderById(OrderId);
    20. }
    21. }

    4.junit4单元测试

    1. package com.tangyuan.service.impl;
    2. import com.tangyuan.model.Order;
    3. import com.tangyuan.service.IOrderService;
    4. import org.junit.Test;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import java.util.List;
    7. import static org.junit.Assert.*;
    8. /**
    9. * @author 唐渊
    10. * @create  2022-07-27 11:32
    11. */
    12. public class CustomerServiceImplTest extends BaseTest{
    13. @Autowired
    14. private IOrderService orderService;
    15. @Test
    16. public void queryOrderById(){
    17. Order orders = orderService.queryOrderById(1);
    18. System.out.println(orders);
    19. }
    20. }

    测试结果: 

     

    • 案例三:实现多对多关系

    1.将数据表导入数据库中

    1. -- 多对多
    2. -- 主表
    3. create table t_news
    4. (
    5. news_id int primary key auto_increment, -- 新闻ID:主鍵
    6. title varchar(50) not null -- 标题
    7. );
    8. -- 主表
    9. create table t_category
    10. (
    11. category_id int primary key auto_increment, -- 类别编号:主鍵
    12. category_name varchar(50) not null -- 类别名称
    13. );
    14. -- 桥接表,在关系型数据库中:多对多关系是无法直接映射的,
    15. -- 必须将一个多对多关系转换成二个一对多关系才能进行映射
    16. create table t_news_category
    17. (
    18. id int primary key not null auto_increment,
    19. nid int not null,
    20. cid int not null,
    21. foreign key(nid) references t_news(news_id),
    22. foreign key(cid) references t_category(category_id)
    23. );
    24. insert into t_news(news_id,title) values(1,'110');
    25. insert into t_news(news_id,title) values(2,'111');
    26. insert into t_news(news_id,title) values(3,'112');
    27. insert into t_news(news_id,title) values(4,'113');
    28. insert into t_news(news_id,title) values(5,'114');
    29. insert into t_news(news_id,title) values(6,'115');
    30. insert into t_news(news_id,title) values(7,'116');
    31. insert into t_news(news_id,title) values(8,'117');
    32. insert into t_news(news_id,title) values(9,'118');
    33. insert into t_category(category_id,category_name) values(1,'焦点');
    34. insert into t_category(category_id,category_name) values(2,'国际');
    35. insert into t_category(category_id,category_name) values(3,'社会');
    36. insert into t_category(category_id,category_name) values(4,'房产');
    37. insert into t_category(category_id,category_name) values(5,'财经');
    38. insert into t_category(category_id,category_name) values(6,'娱乐');
    39. insert into t_news_category(nid,cid) values(1,1);
    40. insert into t_news_category(nid,cid) values(1,2);
    41. insert into t_news_category(nid,cid) values(2,1);
    42. insert into t_news_category(nid,cid) values(2,2);
    43. insert into t_news_category(nid,cid) values(3,1);
    44. insert into t_news_category(nid,cid) values(3,2);
    45. insert into t_news_category(nid,cid) values(3,3);
    46. insert into t_news_category(nid,cid) values(4,1);
    47. insert into t_news_category(nid,cid) values(4,2);
    48. insert into t_news_category(nid,cid) values(4,3);
    49. insert into t_news_category(nid,cid) values(4,4);
    50. SELECT * FROM t_news;
    51. SELECT * FROM t_category;
    52. SELECT * FROM t_news_category;

          多对多:产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键。

                在A类中定义B类类型的集合,在B类中定义A类类型的集合

    2.通过mybatis-generator插件生成dao、mapper、model层

          为了简单便捷,只在中间表的Mapper类实现效果:


    NewsCategoryMapper:

    1. package com.tangyuan.mapper;
    2. import com.tangyuan.model.NewsCategory;
    3. import org.springframework.stereotype.Repository;
    4. import java.util.List;
    5. @Repository
    6. public interface NewsCategoryMapper {
    7. //根据新闻id查询
    8. List queryNewsToMany(Integer newsId);
    9. //根据类型id查询
    10. List queryCategoryToMany(Integer categoryId);
    11. }

    3.配置mybatis关联映射文件

    1. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    2. <mapper namespace="com.tangyuan.mapper.NewsCategoryMapper" >
    3. <resultMap id="BaseResultMap" type="com.tangyuan.model.NewsCategory" >
    4. <constructor >
    5. <idArg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />
    6. <arg column="nid" jdbcType="INTEGER" javaType="java.lang.Integer" />
    7. <arg column="cid" jdbcType="INTEGER" javaType="java.lang.Integer" />
    8. constructor>
    9. resultMap>
    10. <resultMap id="ManyToMany" type="com.tangyuan.model.NewsCategory">
    11. <id property="id" javaType="java.lang.Integer" column="id"/>
    12. <result property="nid" javaType="java.lang.Integer" column="nid"/>
    13. <result property="cid" javaType="java.lang.Integer" column="cid"/>
    14. <association property="news" javaType="com.tangyuan.model.News">
    15. <id property="newsId" javaType="java.lang.Integer" column="category_Id"/>
    16. <result property="title" javaType="java.lang.String" column="title"/>
    17. association>
    18. <association property="category" javaType="com.tangyuan.model.Category">
    19. <id property="categoryId" javaType="java.lang.Integer" column="category_Id"/>
    20. <result property="categoryName" javaType="java.lang.String" column="category_Name"/>
    21. association>
    22. resultMap>
    23. <sql id="Base_Column_List" >
    24. id, nid, cid
    25. sql>
    26. <select id="queryNewsToMany" resultMap="ManyToMany">
    27. select
    28. *
    29. from
    30. t_news_category nc left join t_news n on nc.nid=n.news_id
    31. left join t_category c on nc.cid =c.category_id where n.news_id=#{value}
    32. select>
    33. <select id="queryCategoryToMany" resultMap="ManyToMany">
    34. select
    35. *
    36. from
    37. t_news_category nc left join t_news n on nc.nid=n.news_id
    38. left join t_category c on nc.cid =c.category_id where c.category_id=#{value}
    39. select>
    40. mapper>

    4.servicej接口类与实现类:

    1. package com.tangyuan.service;
    2. import com.tangyuan.model.NewsCategory;
    3. import org.springframework.stereotype.Repository;
    4. import java.util.List;
    5. @Repository
    6. public interface INewsCategoryService {
    7. //根据新闻id查询
    8. List queryNewsToMany(Integer newsId);
    9. //根据类型id查询
    10. List queryCategoryToMany(Integer categoryId);
    11. }
    1. package com.tangyuan.service.impl;
    2. import com.tangyuan.mapper.NewsCategoryMapper;
    3. import com.tangyuan.model.NewsCategory;
    4. import com.tangyuan.service.INewsCategoryService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. import java.util.List;
    8. /**
    9. * @author 唐渊
    10. * @create  2022-07-27 13:54
    11. */
    12. @Service
    13. public class NewsCategoryServiceImpl implements INewsCategoryService {
    14. @Autowired
    15. private NewsCategoryMapper newsCategoryMapper;
    16. @Override
    17. public List queryNewsToMany(Integer newsId) {
    18. return newsCategoryMapper.queryNewsToMany(newsId);
    19. }
    20. @Override
    21. public List queryCategoryToMany(Integer categoryId) {
    22. return newsCategoryMapper.queryCategoryToMany(categoryId);
    23. }
    24. }

    5.junit4单元测试

    1. package com.tangyuan.service.impl;
    2. import com.tangyuan.model.NewsCategory;
    3. import com.tangyuan.service.INewsCategoryService;
    4. import com.tangyuan.service.impl.BaseTest;
    5. import org.junit.Test;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import java.util.List;
    8. import static org.junit.Assert.*;
    9. /**
    10. * @author 唐渊
    11. * @create  2022-07-27 13:53
    12. */
    13. public class NewsCategoryMapperTest extends BaseTest {
    14. @Autowired
    15. private INewsCategoryService newsCategoryService;
    16. @Test
    17. public void queryNewsToMany() {
    18. List news = newsCategoryService.queryNewsToMany(1);
    19. news.forEach(System.out::println);
    20. }
    21. @Test
    22. public void queryCategoryToMany() {
    23. List categorys = newsCategoryService.queryCategoryToMany(1);
    24. categorys.forEach(System.out::println);
    25. }
    26. }

    测试结果: 

  • 相关阅读:
    rabbitmq 使用SAC队列实现顺序消息
    【NAS】整机备份还原Windows/Linux系统,群晖最强套件ABB教程
    开源任务调度框架
    【分布式】BASE理论详解
    从零开始手写一个Transformer
    SQL获取正数第N个或倒数第N个数据
    MySQL 日志管理
    XTTS系列之五:警惕大文件表空间
    郑州市管城回族区政协副主席张惠云一行莅临中创算力调研指导工作
    保姆级安装 Linux 虚拟机教程 (CentOS 7)
  • 原文地址:https://blog.csdn.net/qq_61313896/article/details/126090116