• mybatis:关联关系映射


    目录

    一、一对多

    1.1 生成实体类,修改generatorConfig.xml的配置文件 1的这一方

     1.2 分析写SQL语句,然后修改OrderMapper.xml配置

    1.3在对应的实体类中添加新的属性,就和数据库中的数据不对应了,于是建一个vo的包,写一个Vo

    1.4 写OrderMapper

     2.1 多的一方 写SQL语句 配置OrderItemMapper.xml

    2.2 OrderItemMapper

    OrderItemBiz

     二、多对多

    2.1 修改配置文件generatorConfig.xml 逆向生成

    2.2配置映射关系

    2.3三层架构

    一、一对多

    解释:一个老师对应教多个学生班级

    1.1 生成实体类,修改generatorConfig.xml的配置文件 1的这一方

    1. "1.0" encoding="UTF-8" ?>
    2. 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. <properties resource="jdbc.properties"/>
    6. <classPathEntry location="E:\\cdl_mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
    7. <context id="infoGuardian">
    8. <commentGenerator>
    9. <property name="suppressAllComments" value="true"/>
    10. <property name="suppressDate" value="true"/>
    11. commentGenerator>
    12. <jdbcConnection driverClass="${jdbc.driver}"
    13. connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    14. <javaTypeResolver>
    15. <property name="forceBigDecimals" value="false"/>
    16. javaTypeResolver>
    17. <javaModelGenerator targetPackage="com.cdl.model"
    18. targetProject="src/main/java">
    19. <property name="enableSubPackages" value="false"/>
    20. <property name="constructorBased" value="true"/>
    21. <property name="trimStrings" value="false"/>
    22. <property name="immutable" value="false"/>
    23. javaModelGenerator>
    24. <sqlMapGenerator targetPackage="com.cdl.mapper"
    25. targetProject="src/main/java">
    26. <property name="enableSubPackages" value="false"/>
    27. sqlMapGenerator>
    28. <javaClientGenerator targetPackage="com.cdl.mapper"
    29. targetProject="src/main/java" type="XMLMAPPER">
    30. <property name="enableSubPackages" value="false"/>
    31. javaClientGenerator>
    32. <table schema="" tableName="t_hibernate_order" domainObjectName="Order"
    33. enableCountByExample="false" enableDeleteByExample="false"
    34. enableSelectByExample="false" enableUpdateByExample="false">
    35. table>
    36. <table schema="" tableName="t_hibernate_order_item" domainObjectName="OrderItem"
    37. enableCountByExample="false" enableDeleteByExample="false"
    38. enableSelectByExample="false" enableUpdateByExample="false">
    39. table>
    40. context>
    41. generatorConfiguration>

    逆向生成实体类和方法等

     

     可见图:已生成成功

     1.2 分析写SQL语句,然后修改OrderMapper.xml配置

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

    1.3在对应的实体类中添加新的属性,就和数据库中的数据不对应了,于是建一个vo的包,写一个Vo

    OrderVo

    1. package com.cdl.ssm.model.vo;
    2. import com.cdl.ssm.model.Order;
    3. import com.cdl.ssm.model.OrderItem;
    4. import java.util.List;
    5. /**
    6. * @author cdl
    7. * @site www.cdl.com
    8. * @create 2022-08-16 9:38
    9. *
    10. * vo不仅包含当前表的信息 还能够包含关联表的信息
    11. *
    12. * 当前订单会有一个或者多个订单项 多个订单项必须用集合进行接收
    13. */
    14. public class OrderVo extends Order {
    15. //通过订单号查询本次订单的详细信息及对应的所属订单项信息
    16. private List orderItems;
    17. public List getOrderItems() {
    18. return orderItems;
    19. }
    20. public void setOrderItems(List orderItems) {
    21. this.orderItems = orderItems;
    22. }
    23. }

     OrderVo  

    1. package com.cdl.ssm.model.vo;
    2. import com.cdl.ssm.model.Order;
    3. import com.cdl.ssm.model.OrderItem;
    4. import java.util.List;
    5. /**
    6. * @author cdl
    7. * @site www.cdl.com
    8. * @create 2022-08-16 9:38
    9. *
    10. * vo不仅包含当前表的信息 还能够包含关联表的信息
    11. *
    12. * 当前订单会有一个或者多个订单项 多个订单项必须用集合进行接收
    13. */
    14. public class OrderVo extends Order {
    15. //通过订单号查询本次订单的详细信息及对应的所属订单项信息
    16. private List orderItems;
    17. public List getOrderItems() {
    18. return orderItems;
    19. }
    20. public void setOrderItems(List orderItems) {
    21. this.orderItems = orderItems;
    22. }
    23. }

    1.4 写OrderMapper

    1. package com.cdl.ssm.mapper;
    2. import com.cdl.ssm.model.Order;
    3. import org.apache.ibatis.annotations.Param;
    4. public interface OrderMapper {
    5. int deleteByPrimaryKey(Integer orderId);
    6. int insert(Order record);
    7. int insertSelective(Order record);
    8. Order selectByPrimaryKey(Integer orderId);
    9. OrderVo queryOrderVoByOrderId(@Param("orderId") Integer orderId);
    10. int updateByPrimaryKeySelective(Order record);
    11. int updateByPrimaryKey(Order record);
    12. }
    写OrderBiz
    
    1. package com.cdl.biz;
    2. import com.cdl.ssm.model.Order;
    3. public interface OrderBiz {
    4. int deleteByPrimaryKey(Integer orderId);
    5. int insert(Order record);
    6. int insertSelective(Order record);
    7. Order selectByPrimaryKey(Integer orderId);
    8. OrderVo queryOrderVoByOrderId( Integer orderId);
    9. int updateByPrimaryKeySelective(Order record);
    10. int updateByPrimaryKey(Order record);
    11. }

    对应的实现类:

    1. package com.cdl.biz.impl;
    2. import com.cdl.biz.OrderBiz;
    3. import com.cdl.ssm.mapper.OrderMapper;
    4. import com.cdl.ssm.model.Order;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. /**
    8. * @author cdl
    9. * @site www.cdl.com
    10. * @create 2022-08-16 10:31
    11. */
    12. @Service
    13. public class OrderBizImpl implements OrderBiz {
    14. @Autowired
    15. private OrderMapper orderMapper;
    16. @Override
    17. public int deleteByPrimaryKey(Integer orderId) {
    18. return 0;
    19. }
    20. @Override
    21. public int insert(Order record) {
    22. return 0;
    23. }
    24. @Override
    25. public int insertSelective(Order record) {
    26. return 0;
    27. }
    28. @Override
    29. public Order selectByPrimaryKey(Integer orderId) {
    30. return null;
    31. }
    32. @Override
    33. public OrderVo queryOrderVoByOrderId(Integer orderId) {
    34. return orderMapper.queryOrderVoByOrderId(orderId);
    35. }
    36. @Override
    37. public int updateByPrimaryKeySelective(Order record) {
    38. return 0;
    39. }
    40. @Override
    41. public int updateByPrimaryKey(Order record) {
    42. return 0;
    43. }
    44. }

    测试方法:OrderBizImplTest 

    1. package com.cdl.biz.impl;
    2. import com.cdl.biz.OrderBiz;
    3. import com.cdl.ssm.model.Order;
    4. import org.junit.Test;
    5. import org.junit.runner.RunWith;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.test.context.ContextConfiguration;
    8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    9. import static org.junit.Assert.*;
    10. /**
    11. * @author cdl
    12. * @site www.cdl.com
    13. * @create 2022-08-16 10:37
    14. */
    15. @RunWith(SpringJUnit4ClassRunner.class)
    16. @ContextConfiguration(locations ={"classpath:applicationContext-mybatis.xml"})
    17. public class OrderBizImplTest {
    18. @Autowired
    19. private OrderBiz orderBiz ;
    20. @Test
    21. public void queryOrderVoByOrderId() {
    22. OrderVo orderVO = orderBiz.queryOrderVoByOrderId(9);
    23. System.out.println(orderVo);
    24. }
    25. }

     @Data:相当于生成了set/get/toString方法

    @NoArgsConstructor 无参构造器
    @AllArgsConstructor 有参构造器

    前提是加载了lombok依赖

     2.1 多的一方 写SQL语句 配置OrderItemMapper.xml

    1. "1.0" encoding="UTF-8" ?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    3. <mapper namespace="com.cdl.ssm.mapper.OrderItemMapper" >
    4. <resultMap id="BaseResultMap" type="com.cdl.ssm.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.cdl.ssm.model.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.cdl.ssm.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="queryOrderItemVoByOrderItemId" resultMap="OrderItemVoMap" parameterType="java.lang.Integer" >
    26. select * from t_hibernate_order o,t_hibernate_order_item oi where o.order_id = oi.oid and oi.order_item_id = #{orderItemId}
    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_item
    32. where order_item_id = #{orderItemId,jdbcType=INTEGER}
    33. select>
    34. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    35. delete from t_hibernate_order_item
    36. where order_item_id = #{orderItemId,jdbcType=INTEGER}
    37. delete>
    38. <insert id="insert" parameterType="com.cdl.ssm.model.OrderItem" >
    39. insert into t_hibernate_order_item (order_item_id, product_id, quantity,
    40. oid)
    41. values (#{orderItemId,jdbcType=INTEGER}, #{productId,jdbcType=INTEGER}, #{quantity,jdbcType=INTEGER},
    42. #{oid,jdbcType=INTEGER})
    43. insert>
    44. <insert id="insertSelective" parameterType="com.cdl.ssm.model.OrderItem" >
    45. insert into t_hibernate_order_item
    46. <trim prefix="(" suffix=")" suffixOverrides="," >
    47. <if test="orderItemId != null" >
    48. order_item_id,
    49. if>
    50. <if test="productId != null" >
    51. product_id,
    52. if>
    53. <if test="quantity != null" >
    54. quantity,
    55. if>
    56. <if test="oid != null" >
    57. oid,
    58. if>
    59. trim>
    60. <trim prefix="values (" suffix=")" suffixOverrides="," >
    61. <if test="orderItemId != null" >
    62. #{orderItemId,jdbcType=INTEGER},
    63. if>
    64. <if test="productId != null" >
    65. #{productId,jdbcType=INTEGER},
    66. if>
    67. <if test="quantity != null" >
    68. #{quantity,jdbcType=INTEGER},
    69. if>
    70. <if test="oid != null" >
    71. #{oid,jdbcType=INTEGER},
    72. if>
    73. trim>
    74. insert>
    75. <update id="updateByPrimaryKeySelective" parameterType="com.cdl.ssm.model.OrderItem" >
    76. update t_hibernate_order_item
    77. <set >
    78. <if test="productId != null" >
    79. product_id = #{productId,jdbcType=INTEGER},
    80. if>
    81. <if test="quantity != null" >
    82. quantity = #{quantity,jdbcType=INTEGER},
    83. if>
    84. <if test="oid != null" >
    85. oid = #{oid,jdbcType=INTEGER},
    86. if>
    87. set>
    88. where order_item_id = #{orderItemId,jdbcType=INTEGER}
    89. update>
    90. <update id="updateByPrimaryKey" parameterType="com.cdl.ssm.model.OrderItem" >
    91. update t_hibernate_order_item
    92. set product_id = #{productId,jdbcType=INTEGER},
    93. quantity = #{quantity,jdbcType=INTEGER},
    94. oid = #{oid,jdbcType=INTEGER}
    95. where order_item_id = #{orderItemId,jdbcType=INTEGER}
    96. update>
    97. mapper>

    2.2 OrderItemMapper

    1. package com.cdl.ssm.mapper;
    2. import com.cdl.ssm.model.OrderItem;
    3. import com.cdl.ssm.model.vo.OrderItemVo;
    4. import org.apache.ibatis.annotations.Param;
    5. public interface OrderItemMapper {
    6. int deleteByPrimaryKey(Integer orderItemId);
    7. int insert(OrderItem record);
    8. int insertSelective(OrderItem record);
    9. OrderItem selectByPrimaryKey(Integer orderItemId);
    10. OrderItemVo queryOrderItemVoByOrderItemId(@Param("orderItemId") Integer orderItemId);
    11. int updateByPrimaryKeySelective(OrderItem record);
    12. int updateByPrimaryKey(OrderItem record);
    13. }

    OrderItemBiz

    1. package com.cdl.biz;
    2. import com.cdl.ssm.model.OrderItem;
    3. import com.cdl.ssm.model.vo.OrderItemVo;
    4. public interface OrderItemBiz {
    5. int deleteByPrimaryKey(Integer orderItemId);
    6. int insert(OrderItem record);
    7. int insertSelective(OrderItem record);
    8. OrderItem selectByPrimaryKey(Integer orderItemId);
    9. OrderItemVo queryOrderItemVoByOrderItemId(Integer orderItemId);
    10. int updateByPrimaryKeySelective(OrderItem record);
    11. int updateByPrimaryKey(OrderItem record);
    12. }

     OrderItemBizImpl 

    1. package com.cdl.biz.impl;
    2. import com.cdl.biz.OrderItemBiz;
    3. import com.cdl.ssm.mapper.OrderItemMapper;
    4. import com.cdl.ssm.model.OrderItem;
    5. import com.cdl.ssm.model.vo.OrderItemVo;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. /**
    9. * @author cdl
    10. * @site www.cdl.com
    11. * @create 2022-08-16 11:37
    12. */
    13. @Service
    14. public class OrderItemBizImpl implements OrderItemBiz {
    15. @Autowired
    16. private OrderItemMapper orderItemMapper;
    17. @Override
    18. public int deleteByPrimaryKey(Integer orderItemId) {
    19. return 0;
    20. }
    21. @Override
    22. public int insert(OrderItem record) {
    23. return 0;
    24. }
    25. @Override
    26. public int insertSelective(OrderItem record) {
    27. return 0;
    28. }
    29. @Override
    30. public OrderItem selectByPrimaryKey(Integer orderItemId) {
    31. return null;
    32. }
    33. @Override
    34. public OrderItemVo queryOrderItemVoByOrderItemId(Integer orderItemId) {
    35. return orderItemMapper.queryOrderItemVoByOrderItemId(orderItemId);
    36. }
    37. @Override
    38. public int updateByPrimaryKeySelective(OrderItem record) {
    39. return 0;
    40. }
    41. @Override
    42. public int updateByPrimaryKey(OrderItem record) {
    43. return 0;
    44. }
    45. }

     OrderItemBizImplTest 

    1. package com.cdl.biz.impl;
    2. import com.cdl.biz.OrderItemBiz;
    3. import com.cdl.ssm.model.vo.OrderItemVo;
    4. import org.junit.Test;
    5. import org.junit.runner.RunWith;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.test.context.ContextConfiguration;
    8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    9. /**
    10. * @author cdl
    11. * @site www.cdl.com
    12. * @create 2022-08-16 11:45
    13. */
    14. @RunWith(SpringJUnit4ClassRunner.class)
    15. @ContextConfiguration(locations ={"classpath:applicationContext-mybatis.xml"})
    16. public class OrderItemBizImplTest {
    17. @Autowired
    18. private OrderItemBiz orderItemBiz;
    19. @Test
    20. public void queryOrderItemVoByOrderItemId() {
    21. OrderItemVo orderItemVo = orderItemBiz.queryOrderItemVoByOrderItemId(33);
    22. System.out.println(orderItemVo);
    23. }
    24. }

     二、多对多

    2.1 修改配置文件generatorConfig.xml 逆向生成

    1. "1.0" encoding="UTF-8" ?>
    2. 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. <properties resource="jdbc.properties"/>
    6. <classPathEntry location="E:\\cdl_mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
    7. <context id="infoGuardian">
    8. <commentGenerator>
    9. <property name="suppressAllComments" value="true"/>
    10. <property name="suppressDate" value="true"/>
    11. commentGenerator>
    12. <jdbcConnection driverClass="${jdbc.driver}"
    13. connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    14. <javaTypeResolver>
    15. <property name="forceBigDecimals" value="false"/>
    16. javaTypeResolver>
    17. <javaModelGenerator targetPackage="com.cdl.ssm.model"
    18. targetProject="src/main/java">
    19. <property name="enableSubPackages" value="false"/>
    20. <property name="constructorBased" value="true"/>
    21. <property name="trimStrings" value="false"/>
    22. <property name="immutable" value="false"/>
    23. javaModelGenerator>
    24. <sqlMapGenerator targetPackage="com.cdl.ssm.mapper"
    25. targetProject="src/main/java">
    26. <property name="enableSubPackages" value="false"/>
    27. sqlMapGenerator>
    28. <javaClientGenerator targetPackage="com.cdl.ssm.mapper"
    29. targetProject="src/main/java" type="XMLMAPPER">
    30. <property name="enableSubPackages" value="false"/>
    31. javaClientGenerator>
    32. <table schema="" tableName="t_hibernate_Book" domainObjectName="Hbook"
    33. enableCountByExample="false" enableDeleteByExample="false"
    34. enableSelectByExample="false" enableUpdateByExample="false">
    35. table>
    36. <table schema="" tableName="t_hibernate_category" domainObjectName="Category"
    37. enableCountByExample="false" enableDeleteByExample="false"
    38. enableSelectByExample="false" enableUpdateByExample="false">
    39. table>
    40. <table schema="" tableName="t_hibernate_book_category" domainObjectName="HbookCategory"
    41. enableCountByExample="false" enableDeleteByExample="false"
    42. enableSelectByExample="false" enableUpdateByExample="false">
    43. table>
    44. context>
    45. generatorConfiguration>

    写vo类 HbookVo  

    1. package com.cdl.ssm.model.vo;
    2. import com.cdl.ssm.model.Category;
    3. import com.cdl.ssm.model.Hbook;
    4. import java.util.List;
    5. /**
    6. * @author cdl
    7. * @site www.cdl.com
    8. * @create 2022-08-16 12:42
    9. */
    10. public class HbookVo extends Hbook {
    11. private List categories;
    12. public List getCategories() {
    13. return categories;
    14. }
    15. public void setCategories(List categories) {
    16. this.categories = categories;
    17. }
    18. }

     CategoryVo  

    1. package com.cdl.ssm.model.vo;
    2. import com.cdl.ssm.model.Category;
    3. import com.cdl.ssm.model.Hbook;
    4. import java.util.List;
    5. /**
    6. * @author cdl
    7. * @site www.cdl.com
    8. * @create 2022-08-16 12:43
    9. */
    10. public class CategoryVo extends Category {
    11. private List hbooks;
    12. public List getHbooks() {
    13. return hbooks;
    14. }
    15. public void setHbooks(List hbooks) {
    16. this.hbooks = hbooks;
    17. }
    18. }

    2.2配置映射关系

    HbookCategoryMapper.xml

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

    2.3三层架构

    HbookCategoryMapper

    1. package com.cdl.ssm.mapper;
    2. import com.cdl.ssm.model.HbookCategory;
    3. import com.cdl.ssm.model.vo.CategoryVo;
    4. import com.cdl.ssm.model.vo.HbookVo;
    5. import org.apache.ibatis.annotations.Param;
    6. public interface HbookCategoryMapper {
    7. int deleteByPrimaryKey(Integer bcid);
    8. int insert(HbookCategory record);
    9. int insertSelective(HbookCategory record);
    10. HbookCategory selectByPrimaryKey(Integer bcid);
    11. int updateByPrimaryKeySelective(HbookCategory record);
    12. int updateByPrimaryKey(HbookCategory record);
    13. HbookVo queryByBookId(@Param("bookId") Integer bookId);
    14. CategoryVo queryByCid(@Param("cid") Integer cid);
    15. }

     HbookCategoryBiz 

    1. package com.cdl.biz;
    2. import com.cdl.ssm.model.HbookCategory;
    3. import com.cdl.ssm.model.vo.CategoryVo;
    4. import com.cdl.ssm.model.vo.HbookVo;
    5. public interface HbookCategoryBiz {
    6. int deleteByPrimaryKey(Integer bcid);
    7. int insert(HbookCategory record);
    8. int insertSelective(HbookCategory record);
    9. HbookCategory selectByPrimaryKey(Integer bcid);
    10. int updateByPrimaryKeySelective(HbookCategory record);
    11. int updateByPrimaryKey(HbookCategory record);
    12. HbookVo queryByBookId(Integer bookId);
    13. CategoryVo queryByCid(Integer cid);
    14. }

     HbookCategoryBizImpl 

    1. package com.cdl.biz.impl;
    2. import com.cdl.biz.HbookCategoryBiz;
    3. import com.cdl.ssm.mapper.HbookCategoryMapper;
    4. import com.cdl.ssm.model.HbookCategory;
    5. import com.cdl.ssm.model.vo.CategoryVo;
    6. import com.cdl.ssm.model.vo.HbookVo;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Service;
    9. /**
    10. * @author cdl
    11. * @site www.cdl.com
    12. * @create 2022-08-16 12:55
    13. */
    14. @Service
    15. public class HbookCategoryBizImpl implements HbookCategoryBiz {
    16. @Autowired
    17. private HbookCategoryMapper hbookCategoryMapper;
    18. @Override
    19. public int deleteByPrimaryKey(Integer bcid) {
    20. return 0;
    21. }
    22. @Override
    23. public int insert(HbookCategory record) {
    24. return 0;
    25. }
    26. @Override
    27. public int insertSelective(HbookCategory record) {
    28. return 0;
    29. }
    30. @Override
    31. public HbookCategory selectByPrimaryKey(Integer bcid) {
    32. return null;
    33. }
    34. @Override
    35. public int updateByPrimaryKeySelective(HbookCategory record) {
    36. return 0;
    37. }
    38. @Override
    39. public int updateByPrimaryKey(HbookCategory record) {
    40. return 0;
    41. }
    42. @Override
    43. public HbookVo queryByBookId(Integer bookId) {
    44. return hbookCategoryMapper.queryByBookId(bookId);
    45. }
    46. @Override
    47. public CategoryVo queryByCid(Integer cid) {
    48. return hbookCategoryMapper.queryByCid(cid);
    49. }
    50. }

     HbookCategoryBizImplTest 

    1. package com.cdl.biz.impl;
    2. import com.cdl.biz.HbookCategoryBiz;
    3. import com.cdl.ssm.model.vo.CategoryVo;
    4. import com.cdl.ssm.model.vo.HbookVo;
    5. import org.junit.Test;
    6. import org.junit.runner.RunWith;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.test.context.ContextConfiguration;
    9. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    10. /**
    11. * @author cdl
    12. * @site www.cdl.com
    13. * @create 2022-08-16 12:57
    14. */
    15. @RunWith(SpringJUnit4ClassRunner.class)
    16. @ContextConfiguration(locations ={"classpath:applicationContext-mybatis.xml"})
    17. public class HbookCategoryBizImplTest {
    18. @Autowired
    19. private HbookCategoryBiz hbookCategoryBiz;
    20. @Test
    21. public void queryByBookId() {
    22. HbookVo hbookVo = hbookCategoryBiz.queryByBookId(8);
    23. System.out.println(hbookVo);
    24. hbookVo.getCategories().forEach(System.out::println);
    25. }
    26. @Test
    27. public void queryByCid() {
    28. CategoryVo categoryVo = hbookCategoryBiz.queryByCid(8);
    29. System.out.println(categoryVo);
    30. categoryVo.getHbooks().forEach(System.out::println);
    31. }
    32. }

     

     

  • 相关阅读:
    Windows环境下安装MongoDB数据库
    MySQL查询优化之order by 与 group by优化
    【store商城项目03】修改密码的开发
    react-redux使用
    2、kubeadm安装单master集群
    基本数据类型----Python入门之玩转列表
    win11右键改回win10风格方法
    北美干旱监测 (NADM)数据集
    内部类_Java
    jQuery
  • 原文地址:https://blog.csdn.net/weixin_62735525/article/details/126353977