当前位置:   article > 正文

【Mybatis】关系映射 表对象之间的关系_关联映射表

关联映射表

目录

​编辑

1.概述

( 1 )  介绍

2.一对一关联映射 

2.1数据库表连接:

 2.2配置文件:

2.3生成自动代码

 2.4 编写测试 

3. 一对多关联映射

4.多对多关联映射


1.概述

( 1 )  介绍

关联关系映射是指在数据库中,通过定义表之间的关联关系,将多个表的数据进行关联查询和映射的过程。通过关联关系映射,可以方便地获取相关联表的数据,并将其映射到对应的实体类中。

Mybatis是一种Java持久层框架,它提供了一种将数据库表和Java对象之间进行关联关系映射的方式。在Mybatis中,可以通过配置文件或注解的方式,定义表之间的关联关系,并将查询结果映射到对应的Java对象中。通过Mybatis的关联关系映射,可以方便地进行复杂的数据库查询操作。

在Mybatis中,可以通过配置映射文件来实现关联关系的映射。通过定义实体类和映射文件,可以将数据库中的多个表进行关联查询,并将查询结果映射到实体类的属性上。

在进行数据库查询操作时,通过关联查询获取到关联表中的相关数据,并将其映射到实体类中的关联属性上。
总结来说,关联关系映射是指通过配置映射文件,将数据库中的关联表进行关联查询,并将查询结果映射到实体类的关联属性上。通过扩展关联关系映射,可以方便地进行复杂的数据库查询操作,提高查询效率和简化数据操作的代码。

( 2 )  关联关系映射

关联关系映射在Mybatis中主要通过三种方式实现:一对一关联和一对多关联及多对多关联。

一对一关联:
一对一关联中,两个表之间存在一对一的关系,例如学生表和身份证表,一个学生只有一个身份证,而一个身份证也只属于一个学生。在Mybatis中,可以通过在实体类中定义关联属性,然后在映射文件中使用<association>标签来定义关联关系。通过配置映射关系,可以查询到学生表和身份证表的数据,并将其映射到对应的实体类中。

一对多关联:
一对多关联中,两个表之间存在一对多的关系,例如部门表和员工表,一个部门可以有多个员工,而一个员工只属于一个部门。在Mybatis中,可以通过在实体类中定义关联属性,然后在映射文件中使用<collection>标签来定义关联关系。通过配置映射关系,可以查询到部门表和员工表的数据,并将其映射到对应的实体类中。

多对多关联:

是指两个表之间存在多对多的关联关系,即一个表的一条记录可以对应另一个表的多条记录,反之亦然。在数据库中,多对多关系通常需要通过中间表来实现。

在Mybatis中,可以通过定义中间表来映射多对多关系。假设有两个表,学生表和课程表,一个学生可以选择多门课程,而一门课程也可以被多个学生选择。为了映射这种多对多关系,需要创建一个中间表,例如选课表,用来记录学生和课程的关联关系。
 

2.一对一关联映射 

2.1数据库表连接:

 2.2配置文件

修改名为 generatorConfig.xml 的 配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  3. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
  4. <generatorConfiguration>
  5. <!-- 引入配置文件 -->
  6. <properties resource="jdbc.properties"/>
  7. <!--指定数据库jdbc驱动jar包的位置-->
  8. <classPathEntry location="D:\\maven\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
  9. <!-- 一个数据库一个context -->
  10. <context id="infoGuardian">
  11. <!-- 注释 -->
  12. <commentGenerator>
  13. <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
  14. <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
  15. </commentGenerator>
  16. <!-- jdbc连接 -->
  17. <jdbcConnection driverClass="${jdbc.driver}"
  18. connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
  19. <!-- 类型转换 -->
  20. <javaTypeResolver>
  21. <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
  22. <property name="forceBigDecimals" value="false"/>
  23. </javaTypeResolver>
  24. <!-- 01 指定javaBean生成的位置 -->
  25. <!-- targetPackage:指定生成的model生成所在的包名 -->
  26. <!-- targetProject:指定在该项目下所在的路径 -->
  27. <javaModelGenerator targetPackage="com.sy.model"
  28. targetProject="src/main/java">
  29. <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
  30. <property name="enableSubPackages" value="false"/>
  31. <!-- 是否对model添加构造函数 -->
  32. <property name="constructorBased" value="true"/>
  33. <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
  34. <property name="trimStrings" value="false"/>
  35. <!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
  36. <property name="immutable" value="false"/>
  37. </javaModelGenerator>
  38. <!-- 02 指定sql映射文件生成的位置 -->
  39. <sqlMapGenerator targetPackage="com.sy.mapper"
  40. targetProject="src/main/java">
  41. <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
  42. <property name="enableSubPackages" value="false"/>
  43. </sqlMapGenerator>
  44. <!-- 03 生成XxxMapper接口 -->
  45. <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
  46. <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
  47. <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
  48. <javaClientGenerator targetPackage="com.sy.mapper"
  49. targetProject="src/main/java" type="XMLMAPPER">
  50. <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
  51. <property name="enableSubPackages" value="false"/>
  52. </javaClientGenerator>
  53. <!-- 配置表信息 -->
  54. <!-- schema即为数据库名 -->
  55. <!-- tableName为对应的数据库表 -->
  56. <!-- domainObjectName是要生成的实体类 -->
  57. <!-- enable*ByExample是否生成 example类 -->
  58. <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
  59. <!--enableCountByExample="false" enableDeleteByExample="false"-->
  60. <!--enableSelectByExample="false" enableUpdateByExample="false">-->
  61. <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
  62. <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
  63. <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
  64. <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
  65. <!--</table>-->
  66. <table schema="" tableName="t_hibernate_book" domainObjectName="HBook"
  67. enableCountByExample="false" enableDeleteByExample="false"
  68. enableSelectByExample="false" enableUpdateByExample="false">
  69. </table>
  70. <table schema="" tableName="t_hibernate_book_category" domainObjectName="HBookCategory"
  71. enableCountByExample="false" enableDeleteByExample="false"
  72. enableSelectByExample="false" enableUpdateByExample="false">
  73. </table>
  74. <table schema="" tableName="t_hibernate_category" domainObjectName="HCategory"
  75. enableCountByExample="false" enableDeleteByExample="false"
  76. enableSelectByExample="false" enableUpdateByExample="false">
  77. </table>
  78. <table schema="" tableName="t_hibernate_order" domainObjectName="Order"
  79. enableCountByExample="false" enableDeleteByExample="false"
  80. enableSelectByExample="false" enableUpdateByExample="false">
  81. </table>
  82. <table schema="" tableName="t_hibernate_order_item" domainObjectName="OrderItem"
  83. enableCountByExample="false" enableDeleteByExample="false"
  84. enableSelectByExample="false" enableUpdateByExample="false">
  85. </table>
  86. </context>
  87. </generatorConfiguration>

2.3生成自动代码

配置好 generatorConfig.xml 的配置文件后进行,自动生成代码

 代码生成后就会出现以下的实体类对象,配置文件,接口类

 然后将每个实体类对象里面重写一下toString()方法

 2.4 编写测试 

创建一个 名为 OrderItemVo 的类,继承OrderItem类,及属性有Order对象

  1. package com.sy.vo;
  2. import com.sy.model.Order;
  3. import com.sy.model.OrderItem;
  4. /**
  5. * @author 谌艳
  6. * @site www.shenyan.com
  7. * @create 2023-08-26 16:40
  8. */
  9. public class OrderItemVo extends OrderItem {
  10. private Order order;
  11. public Order getOrder() {
  12. return order;
  13. }
  14. public void setOrder(Order order) {
  15. this.order = order;
  16. }
  17. }

在自动生成的OrderItemMapper.xml配置文件中进行增加以下配置

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="com.sy.mapper.OrderItemMapper" >
  4. <resultMap id="BaseResultMap" type="com.sy.model.OrderItem" >
  5. <constructor >
  6. <idArg column="order_item_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
  7. <arg column="product_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
  8. <arg column="quantity" jdbcType="INTEGER" javaType="java.lang.Integer" />
  9. <arg column="oid" jdbcType="INTEGER" javaType="java.lang.Integer" />
  10. </constructor>
  11. </resultMap>
  12. <sql id="Base_Column_List" >
  13. order_item_id, product_id, quantity, oid
  14. </sql>
  15. <resultMap id="OrderItemVoMap" type="com.sy.vo.OrderItemVo">
  16. <result column="order_item_id" property="orderItemId"></result>
  17. <result column="product_id" property="productId"></result>
  18. <result column="quantity" property="quantity"></result>
  19. <result column="oid" property="oid"></result>
  20. <association property="order" javaType="com.sy.model.Order">
  21. <result column="order_id" property="orderId" ></result>
  22. <result column="order_no" property="orderNo" ></result>
  23. </association>
  24. </resultMap>
  25. <select id="selectByOrderItemId" resultMap="OrderItemVoMap" parameterType="java.lang.Integer">
  26. SELECT * FROM
  27. t_hibernate_order o,
  28. t_hibernate_order_item oi
  29. where o.order_id = oi.oid
  30. and oi.order_item_id =#{oiid}
  31. </select>
  32. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
  33. select
  34. <include refid="Base_Column_List" />
  35. from t_hibernate_order_item
  36. where order_item_id = #{orderItemId,jdbcType=INTEGER}
  37. </select>
  38. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
  39. delete from t_hibernate_order_item
  40. where order_item_id = #{orderItemId,jdbcType=INTEGER}
  41. </delete>
  42. <insert id="insert" parameterType="com.sy.model.OrderItem" >
  43. insert into t_hibernate_order_item (order_item_id, product_id, quantity,
  44. oid)
  45. values (#{orderItemId,jdbcType=INTEGER}, #{productId,jdbcType=INTEGER}, #{quantity,jdbcType=INTEGER},
  46. #{oid,jdbcType=INTEGER})
  47. </insert>
  48. <insert id="insertSelective" parameterType="com.sy.model.OrderItem" >
  49. insert into t_hibernate_order_item
  50. <trim prefix="(" suffix=")" suffixOverrides="," >
  51. <if test="orderItemId != null" >
  52. order_item_id,
  53. </if>
  54. <if test="productId != null" >
  55. product_id,
  56. </if>
  57. <if test="quantity != null" >
  58. quantity,
  59. </if>
  60. <if test="oid != null" >
  61. oid,
  62. </if>
  63. </trim>
  64. <trim prefix="values (" suffix=")" suffixOverrides="," >
  65. <if test="orderItemId != null" >
  66. #{orderItemId,jdbcType=INTEGER},
  67. </if>
  68. <if test="productId != null" >
  69. #{productId,jdbcType=INTEGER},
  70. </if>
  71. <if test="quantity != null" >
  72. #{quantity,jdbcType=INTEGER},
  73. </if>
  74. <if test="oid != null" >
  75. #{oid,jdbcType=INTEGER},
  76. </if>
  77. </trim>
  78. </insert>
  79. <update id="updateByPrimaryKeySelective" parameterType="com.sy.model.OrderItem" >
  80. update t_hibernate_order_item
  81. <set >
  82. <if test="productId != null" >
  83. product_id = #{productId,jdbcType=INTEGER},
  84. </if>
  85. <if test="quantity != null" >
  86. quantity = #{quantity,jdbcType=INTEGER},
  87. </if>
  88. <if test="oid != null" >
  89. oid = #{oid,jdbcType=INTEGER},
  90. </if>
  91. </set>
  92. where order_item_id = #{orderItemId,jdbcType=INTEGER}
  93. </update>
  94. <update id="updateByPrimaryKey" parameterType="com.sy.model.OrderItem" >
  95. update t_hibernate_order_item
  96. set product_id = #{productId,jdbcType=INTEGER},
  97. quantity = #{quantity,jdbcType=INTEGER},
  98. oid = #{oid,jdbcType=INTEGER}
  99. where order_item_id = #{orderItemId,jdbcType=INTEGER}
  100. </update>
  101. </mapper>

在自动生成的 OrderItemMapper 接口中进行增加以下代码

OrderItemVo selectByOrderItemId(@Param("oiid") Integer oiid);

创建一个接口名为 : OrderItemBiz 接口

  1. package com.sy.biz;
  2. import com.sy.vo.OrderItemVo;
  3. public interface OrderItemBiz {
  4. OrderItemVo selectByOrderItemId(Integer oiid);
  5. }

实现以上创建的接口,创建一个实现了名为 OrderItemBizImpl 类

  1. package com.sy.biz.impl;
  2. import com.sy.biz.OrderItemBiz;
  3. import com.sy.mapper.OrderItemMapper;
  4. import com.sy.vo.OrderItemVo;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. /**
  8. * @author 谌艳
  9. * @site www.shenyan.com
  10. * @create 2023-08-26 16:53
  11. */
  12. @Service
  13. public class OrderItemBizImpl implements OrderItemBiz {
  14. @Autowired
  15. private OrderItemMapper orderItemMapper;
  16. @Override
  17. public OrderItemVo selectByOrderItemId(Integer oiid) {
  18. return orderItemMapper.selectByOrderItemId(oiid);
  19. }
  20. }

创建一个测试类进行方法测试

  1. package com.sy.biz.impl;
  2. import com.sy.biz.OrderBiz;
  3. import com.sy.biz.OrderItemBiz;
  4. import com.sy.vo.OrderItemVo;
  5. import com.sy.vo.OrderVo;
  6. import org.junit.Test;
  7. import org.junit.runner.RunWith;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.test.context.ContextConfiguration;
  10. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  11. /**
  12. * @author 谌艳
  13. * @site www.shenyan.com
  14. * @create 2023-08-26 15:56
  15. */
  16. @RunWith(SpringJUnit4ClassRunner.class)
  17. @ContextConfiguration(locations={"classpath:spring-context.xml"})
  18. public class OrderBizImplTest {
  19. @Autowired
  20. private OrderBiz orderBiz;
  21. @Autowired
  22. private OrderItemBiz orderItemBiz;
  23. @Test
  24. public void selsctByOrderItemId() {
  25. OrderItemVo orderItemVo = orderItemBiz.selectByOrderItemId(27);
  26. System.out.println(orderItemVo);
  27. System.out.println(orderItemVo.getOrder());
  28. }
  29. @Test
  30. public void selsctByOid() {
  31. OrderVo orderVo = orderBiz.selsctByOid(7);
  32. System.out.println(orderVo);
  33. orderVo.getOrderItems().forEach(System.out::println);
  34. }
  35. }

结果展示: 

3. 一对多关联映射

创建一个 名为 OrdeVo 的类,继承Order类,及属性有List<OrderItem>集合

用来存储查询到的OrderItem对象,因为是一对多所有查询出有多个对象

  1. package com.sy.vo;
  2. import com.sy.model.Order;
  3. import com.sy.model.OrderItem;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. /**
  7. * @author 谌艳
  8. * @site www.shenyan.com
  9. * @create 2023-08-26 15:29
  10. */
  11. public class OrderVo extends Order {
  12. private List<OrderItem> orderItems=new ArrayList<OrderItem>();
  13. public List<OrderItem> getOrderItems() {
  14. return orderItems;
  15. }
  16. public void setOrderItems(List<OrderItem> orderItems) {
  17. this.orderItems = orderItems;
  18. }
  19. }

在自动生成的 OrderMapper.xml 配置文件中增加以下配置

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="com.sy.mapper.OrderMapper" >
  4. <resultMap id="BaseResultMap" type="com.sy.model.Order" >
  5. <constructor >
  6. <idArg column="order_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
  7. <arg column="order_no" jdbcType="VARCHAR" javaType="java.lang.String" />
  8. </constructor>
  9. </resultMap>
  10. <sql id="Base_Column_List" >
  11. order_id, order_no
  12. </sql>
  13. <resultMap id="OrderVoMap" type="com.sy.vo.OrderVo" >
  14. <result column="order_id" property="orderId" ></result>
  15. <result column="order_no" property="orderNo" ></result>
  16. <collection property="orderItems" ofType="com.sy.model.OrderItem">
  17. <result column="order_item_id" property="orderItemId"></result>
  18. <result column="product_id" property="productId"></result>
  19. <result column="quantity" property="quantity"></result>
  20. <result column="oid" property="oid"></result>
  21. </collection>
  22. </resultMap>
  23. <select id="selectByOid" resultMap="OrderVoMap" parameterType="java.lang.Integer">
  24. SELECT * FROM t_hibernate_order o,t_hibernate_order_item oi
  25. where o.order_id =oi.oid
  26. and o.order_id =#{oid}
  27. </select>
  28. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
  29. select
  30. <include refid="Base_Column_List" />
  31. from t_hibernate_order
  32. where order_id = #{orderId,jdbcType=INTEGER}
  33. </select>
  34. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
  35. delete from t_hibernate_order
  36. where order_id = #{orderId,jdbcType=INTEGER}
  37. </delete>
  38. <insert id="insert" parameterType="com.sy.model.Order" >
  39. insert into t_hibernate_order (order_id, order_no)
  40. values (#{orderId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR})
  41. </insert>
  42. <insert id="insertSelective" parameterType="com.sy.model.Order" >
  43. insert into t_hibernate_order
  44. <trim prefix="(" suffix=")" suffixOverrides="," >
  45. <if test="orderId != null" >
  46. order_id,
  47. </if>
  48. <if test="orderNo != null" >
  49. order_no,
  50. </if>
  51. </trim>
  52. <trim prefix="values (" suffix=")" suffixOverrides="," >
  53. <if test="orderId != null" >
  54. #{orderId,jdbcType=INTEGER},
  55. </if>
  56. <if test="orderNo != null" >
  57. #{orderNo,jdbcType=VARCHAR},
  58. </if>
  59. </trim>
  60. </insert>
  61. <update id="updateByPrimaryKeySelective" parameterType="com.sy.model.Order" >
  62. update t_hibernate_order
  63. <set >
  64. <if test="orderNo != null" >
  65. order_no = #{orderNo,jdbcType=VARCHAR},
  66. </if>
  67. </set>
  68. where order_id = #{orderId,jdbcType=INTEGER}
  69. </update>
  70. <update id="updateByPrimaryKey" parameterType="com.sy.model.Order" >
  71. update t_hibernate_order
  72. set order_no = #{orderNo,jdbcType=VARCHAR}
  73. where order_id = #{orderId,jdbcType=INTEGER}
  74. </update>
  75. </mapper>

在自动生成的 OrderMapper接口中进行增加以下代码

   OrderVo selectByOid(@Param("oid") Integer Oid);

创建一个接口名为 : OrderBiz 接口

  1. package com.sy.biz;
  2. import com.sy.vo.OrderVo;
  3. public interface OrderBiz {
  4. OrderVo selsctByOid(Integer Oid);
  5. }

在实现以上 OrderBiz 接口,创建一个实现类,名为 OrderBizImpl 

  1. package com.sy.biz.impl;
  2. import com.sy.biz.OrderBiz;
  3. import com.sy.mapper.OrderMapper;
  4. import com.sy.vo.OrderVo;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. /**
  8. * @author 谌艳
  9. * @site www.shenyan.com
  10. * @create 2023-08-26 15:53
  11. */
  12. @Service
  13. public class OrderBizImpl implements OrderBiz {
  14. @Autowired
  15. private OrderMapper orderMapper;
  16. @Override
  17. public OrderVo selsctByOid(Integer Oid) {
  18. return orderMapper.selectByOid(Oid);
  19. }
  20. }

在测试类中测试方法及接口

4.多对多关联映射

在自动生成的 HBookMapper.xml 配置文件中增加以下配置

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="com.sy.mapper.HBookMapper" >
  4. <resultMap id="BaseResultMap" type="com.sy.model.HBook" >
  5. <constructor >
  6. <idArg column="book_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
  7. <arg column="book_name" jdbcType="VARCHAR" javaType="java.lang.String" />
  8. <arg column="price" jdbcType="REAL" javaType="java.lang.Float" />
  9. </constructor>
  10. </resultMap>
  11. <sql id="Base_Column_List" >
  12. book_id, book_name, price
  13. </sql>
  14. <resultMap id="HbookVoMap" type="com.sy.vo.HbookVo" >
  15. <result column="book_id" property="bookId"></result>
  16. <result column="book_name" property="bookName"></result>
  17. <result column="price" property="price"></result>
  18. <collection property="categories" ofType="com.sy.model.HCategory">
  19. <result column="category_id" property="categoryId"></result>
  20. <result column="category_name" property="categoryName"></result>
  21. </collection>
  22. </resultMap>
  23. <!-- 根据书籍id查询出书籍信息及所属类别-->
  24. <select id="selectByBidMap" resultMap="HbookVoMap" parameterType="java.lang.Integer">
  25. SELECT *FROM
  26. t_hibernate_book b,
  27. t_hibernate_book_category bc,
  28. t_hibernate_category c
  29. where b.book_id=bc.bid
  30. and bc.cid =c.category_id
  31. and b.book_id =#{bid}
  32. </select>
  33. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
  34. select
  35. <include refid="Base_Column_List" />
  36. from t_hibernate_book
  37. where book_id = #{bookId,jdbcType=INTEGER}
  38. </select>
  39. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
  40. delete from t_hibernate_book
  41. where book_id = #{bookId,jdbcType=INTEGER}
  42. </delete>
  43. <insert id="insert" parameterType="com.sy.model.HBook" >
  44. insert into t_hibernate_book (book_id, book_name, price
  45. )
  46. values (#{bookId,jdbcType=INTEGER}, #{bookName,jdbcType=VARCHAR}, #{price,jdbcType=REAL}
  47. )
  48. </insert>
  49. <insert id="insertSelective" parameterType="com.sy.model.HBook" >
  50. insert into t_hibernate_book
  51. <trim prefix="(" suffix=")" suffixOverrides="," >
  52. <if test="bookId != null" >
  53. book_id,
  54. </if>
  55. <if test="bookName != null" >
  56. book_name,
  57. </if>
  58. <if test="price != null" >
  59. price,
  60. </if>
  61. </trim>
  62. <trim prefix="values (" suffix=")" suffixOverrides="," >
  63. <if test="bookId != null" >
  64. #{bookId,jdbcType=INTEGER},
  65. </if>
  66. <if test="bookName != null" >
  67. #{bookName,jdbcType=VARCHAR},
  68. </if>
  69. <if test="price != null" >
  70. #{price,jdbcType=REAL},
  71. </if>
  72. </trim>
  73. </insert>
  74. <update id="updateByPrimaryKeySelective" parameterType="com.sy.model.HBook" >
  75. update t_hibernate_book
  76. <set >
  77. <if test="bookName != null" >
  78. book_name = #{bookName,jdbcType=VARCHAR},
  79. </if>
  80. <if test="price != null" >
  81. price = #{price,jdbcType=REAL},
  82. </if>
  83. </set>
  84. where book_id = #{bookId,jdbcType=INTEGER}
  85. </update>
  86. <update id="updateByPrimaryKey" parameterType="com.sy.model.HBook" >
  87. update t_hibernate_book
  88. set book_name = #{bookName,jdbcType=VARCHAR},
  89. price = #{price,jdbcType=REAL}
  90. where book_id = #{bookId,jdbcType=INTEGER}
  91. </update>
  92. </mapper>

在自动生成的 HBookMapper 接口 中增加以下方法

 HbookVo selectByBidMap(@Param("bid") Integer bid);

创建一个接口名为 HBookBiz 

  1. package com.sy.biz;
  2. import com.sy.vo.HbookVo;
  3. import org.apache.ibatis.annotations.Param;
  4. public interface HBookBiz {
  5. HbookVo selectByBidMap(@Param("bid") Integer bid);
  6. }

在实现以上 HBookBiz 接口,创建一个实现类,名为 HBookBizImpl 

  1. package com.sy.biz.impl;
  2. import com.sy.biz.HBookBiz;
  3. import com.sy.mapper.HBookMapper;
  4. import com.sy.vo.HbookVo;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. /**
  8. * @author 谌艳
  9. * @site www.shenyan.com
  10. * @create 2023-08-26 22:09
  11. */
  12. @Service
  13. public class HBookBizImpl implements HBookBiz {
  14. @Autowired
  15. private HBookMapper hbookMapper;
  16. @Override
  17. public HbookVo selectByBidMap(Integer bid) {
  18. return hbookMapper.selectByBidMap(bid);
  19. }
  20. }

在测试类中下测试方法及接口

  1. package com.sy.biz.impl;
  2. import com.sy.biz.HBookBiz;
  3. import com.sy.biz.HCategoryBiz;
  4. import com.sy.vo.CategoryVo;
  5. import com.sy.vo.HbookVo;
  6. import org.junit.After;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9. import org.junit.runner.RunWith;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.test.context.ContextConfiguration;
  12. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  13. /**
  14. * @author 谌艳
  15. * @site www.shenyan.com
  16. * @create 2023-08-26 22:11
  17. */
  18. @RunWith(SpringJUnit4ClassRunner.class)
  19. @ContextConfiguration(locations={"classpath:spring-context.xml"})
  20. public class HBookBizImplTest {
  21. @Autowired
  22. private HBookBiz hbookBiz;
  23. @Autowired
  24. private HCategoryBiz hcategoryBiz;
  25. @Before
  26. public void setUp() throws Exception {
  27. }
  28. @After
  29. public void tearDown() throws Exception {
  30. }
  31. @Test
  32. public void selectByBidMap() {
  33. HbookVo hbookVo = hbookBiz.selectByBidMap(8);
  34. System.out.println(hbookVo);
  35. hbookVo.gethCategories().forEach(System.out::println);
  36. }
  37. @Test
  38. public void selectByCategorYId() {
  39. CategoryVo categoryVo = hcategoryBiz.selectByCategoryId(8);
  40. System.out.println(categoryVo);
  41. categoryVo.getBooks().forEach(System.out::println);
  42. }
  43. }

结果展示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/625642
推荐阅读
相关标签
  

闽ICP备14008679号