欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis一對(duì)多嵌套查詢(xún)的完整實(shí)例

 更新時(shí)間:2021年01月17日 12:40:51   作者:LiAo_01  
這篇文章主要給大家介紹了關(guān)于MyBatis一對(duì)多嵌套查詢(xún)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

嵌套查詢(xún)的實(shí)現(xiàn)原理為兩次查詢(xún),比如產(chǎn)品表為主表,圖片表為從表通過(guò)product_id字段與產(chǎn)品表id字段關(guān)聯(lián)實(shí)現(xiàn)一對(duì)多,嵌套查詢(xún) 首先查詢(xún) 主表的數(shù)據(jù) 然后將主表id字段賦值給從表實(shí)體類(lèi)中product_id 字段(productId)然后通過(guò)dao接口路徑映射找到對(duì)應(yīng)的MyBatis XMl文件SQL語(yǔ)句ID如:com.liao.dao.DImgMapper.selectDImgByProductId 進(jìn)行子查詢(xún)也就是第二次查詢(xún)。然后返回?cái)?shù)據(jù)

數(shù)據(jù)庫(kù)建表語(yǔ)句和測(cè)試數(shù)據(jù)如下:

數(shù)據(jù)庫(kù)版本為 MySQL 8.0

產(chǎn)品表

DROP TABLE IF EXISTS `d_product`;
CREATE TABLE `d_product` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '產(chǎn)品ID',
 `product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '產(chǎn)品名稱(chēng)',
 `product_introduction` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '產(chǎn)品介紹',
 `product_category` int(11) NULL DEFAULT NULL COMMENT '產(chǎn)品ID',
 `product_status` int(1) NULL DEFAULT NULL COMMENT '產(chǎn)品狀態(tài)',
 `create_time` datetime(0) NULL DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
 PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '產(chǎn)品表' ROW_FORMAT = Dynamic;

INSERT INTO `d_product` VALUES (1, '測(cè)試產(chǎn)品名稱(chēng)修改', '測(cè)試產(chǎn)品介紹修改', NULL, 1, '2020-02-02 12:40:06');
INSERT INTO `d_product` VALUES (2, '產(chǎn)品名稱(chēng)', '產(chǎn)品介紹', NULL, 1, '2020-03-02 18:15:07');
INSERT INTO `d_product` VALUES (3, 'bbb', 'bbb', NULL, 1, '2020-03-01 22:18:40');

圖片表

DROP TABLE IF EXISTS `d_img`;
CREATE TABLE `d_img` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `product_id` int(11) NULL DEFAULT NULL COMMENT '產(chǎn)品圖片ID',
 `img` varchar(500) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '圖片',
 `create_time` datetime(0) NULL DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
 PRIMARY KEY (`id`) USING BTREE,
 INDEX `product_id`(`product_id`) USING BTREE,
 CONSTRAINT `d_img_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `d_product` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 86 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '產(chǎn)品圖片' ROW_FORMAT = Dynamic;

INSERT INTO `d_img` VALUES (40, 1, '1491803633034_683819.jpg', '2020-03-03 17:21:20');
INSERT INTO `d_img` VALUES (40, 1, '1491803633034_683819.jpg', '2020-03-03 17:21:20');
INSERT INTO `d_img` VALUES (41, 1, '1568950881751_702421.jpg', '2020-03-03 17:21:20');

Java實(shí)體類(lèi):

// 將這個(gè)注解寫(xiě)在類(lèi)上之后,就會(huì)忽略類(lèi)中不存在的字段,否則可能會(huì)報(bào)錯(cuò)
@JsonIgnoreProperties(value = {"handler"})
/**
 * 
 * TODO: 產(chǎn)品類(lèi)
 * @author LiAo
 * @date 2020/5/20 17:04
 */
public class DProduct {
 private Integer id;

 private String productName;

 private Integer productCategory;

 private Integer productStatus;

 private Date createTime;

 private String productIntroduction;

 private List<DImg> dImgs;  // 用于存放圖片集合
 
 // .. get set toString
}
 
/**
 * 
 * TODO: 產(chǎn)品圖片類(lèi)
 * @author LiAo
 * @date 2020/5/20 17:05
 */
@JsonIgnoreProperties(value = {"handler"})
public class DImg {
 private Integer id;

 private Integer productId;

 private String img;

 private Date createTime;
 
 // .. get set toString
}

實(shí)體類(lèi)創(chuàng)建好后要編寫(xiě)Dao接口 和Mapper XML了

持久層接口DAO:

/**
 *
 * TODO: 產(chǎn)品 Dao接口
 * @author LiAo
 * @date 2020/5/20 17:08
 */
public interface DProductMapper {
 /**
  * 產(chǎn)品圖片一對(duì)多嵌套
  * @param record 查詢(xún)條件
  * @return 返回參數(shù)
  */
 List<DProduct> productSelect(DProduct record);
}

產(chǎn)品MyBatis xml:

<!--映射的Dao接口類(lèi) 可以通過(guò)這個(gè)路徑找到先關(guān)的SQL語(yǔ)句和resultMap 映射-->
<mapper namespace="com.liao.dao.DProductMapper">
 <resultMap id="BaseResultMap" type="com.liao.entity.DProduct">
  <id column="id" property="id" jdbcType="INTEGER"/>
  <result column="product_name" property="productName" jdbcType="VARCHAR"/>
  <result column="product_category" property="productCategory" jdbcType="INTEGER"/>
  <result column="product_status" property="productStatus" jdbcType="INTEGER"/>
  <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
  <result column="product_introduction" property="productIntroduction" jdbcType="LONGVARCHAR"/>
 </resultMap>
 <!--產(chǎn)品圖片一對(duì)多查詢(xún)映射-->
 <!--id:配置映射的名稱(chēng)-->
 <!--type:返回值類(lèi)型 -->
 <!--extends:繼承id為BaseResultMap的映射 -->
 <!--select:子查詢(xún)所在的XML綁定的DAO接口路徑.SQL語(yǔ)句id -->
 <!--column="{productId = id} productId:從表關(guān)聯(lián)主表的實(shí)體類(lèi)屬性,作為子查詢(xún)的條件 id:主表中被關(guān)聯(lián)的數(shù)據(jù)庫(kù)字段-->
 <resultMap id="dProductResultMap" type="com.liao.entity.DProduct" extends="BaseResultMap">
  <collection property="dImgs" fetchType="lazy"
     select="com.liao.dao.DImgMapper.selectDImgByProductId" column="{productId = id}"/>
 </resultMap>
 
 <!--查詢(xún)語(yǔ)句-->
 <select id="productSelect" parameterType="com.liao.entity.DProduct" resultMap="dProductListMapSelect">
 select
 d.id,
 d.product_name,
 d.product_category,
 d.product_status,
 d.create_time,
 d.product_introduction
 from d_product d
 where 1 = 1
 <!-- 使用if標(biāo)簽拼接條件語(yǔ)句 實(shí)現(xiàn)動(dòng)態(tài)SQL-->
 <if test="id != null and id != ''">
  and d.id = #{id}
 </if>
 <if test="productName != null and productName != ''">
  and d.product_name like concat(#{productName},'%')
 </if>
 <if test="productStatus != null and productStatus != ''">
  and d.product_status = #{productStatus}
 </if>
 <if test="createTime != null and createTime != ''">
  and d.create_time like concat(#{createTime},'%')
 </if>
 <if test="productIntroduction != null and productIntroduction != ''">
  and d.product_introduction like concat(#{productIntroduction},'%')
 </if>
</select>
</mapper>

圖片MyBatis xml:

<mapper namespace="com.liao.dao.DImgMapper">
 <resultMap id="BaseResultMap" type="com.liao.entity.DImg">
  <id column="did" property="id" jdbcType="INTEGER"/>
  <result column="product_id" property="productId" jdbcType="INTEGER"/>
  <result column="img" property="img" jdbcType="VARCHAR"/>
  <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
 </resultMap>
 <!--一對(duì)多嵌套查詢(xún) 子查詢(xún)語(yǔ)句-->
 <select id="selectDImgByProductId" resultMap="BaseResultMap">
  select i.id as did,
    i.product_id,
    i.img,
    i.create_time
  from d_img i
  where i.product_id = #{productId}
 </select>
</mapper>

測(cè)試查詢(xún)結(jié)果

查詢(xún)結(jié)果為一個(gè)產(chǎn)品對(duì)象里有若干個(gè)產(chǎn)品圖片對(duì)象。

 			{
 				"id": 18,
    "productName": "產(chǎn)品添加圖片上傳測(cè)試",
    "productCategory": null,
    "productStatus": 1,
    "createTime": "2020-04-14T13:40:40.000+0000",
    "productIntroduction": "產(chǎn)品添加圖片上傳測(cè)試",
    "dImgs": [
     {
      "id": 92,
      "productId": 18,
      "img": "01.jpg",
      "createTime": "2020-04-26T02:33:04.000+0000"
     },
     {
      "id": 93,
      "productId": 18,
      "img": "1554103835292_610234.jpg",
      "createTime": "2020-04-26T02:33:04.000+0000"
     },
     {
      "id": 94,
      "productId": 18,
      "img": "1555484699771_582172.jpg",
      "createTime": "2020-04-26T02:33:04.000+0000"
     },
     {
      "id": 95,
      "productId": 18,
      "img": "1554103835292_610234.jpg",
      "createTime": "2020-04-26T02:33:04.000+0000"
     }
    ]
   },

總結(jié)

到此這篇關(guān)于MyBatis一對(duì)多嵌套查詢(xún)的文章就介紹到這了,更多相關(guān)MyBatis一對(duì)多嵌套查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot實(shí)現(xiàn)在request里解密參數(shù)返回

    spring boot實(shí)現(xiàn)在request里解密參數(shù)返回

    這篇文章主要介紹了Spring Boot實(shí)現(xiàn)在request里解密參數(shù)返回操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中實(shí)現(xiàn)分布式定時(shí)任務(wù)的方法

    Java中實(shí)現(xiàn)分布式定時(shí)任務(wù)的方法

    這篇文章主要介紹了Java中實(shí)現(xiàn)分布式定時(shí)任務(wù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java Socket編程心跳包創(chuàng)建實(shí)例解析

    Java Socket編程心跳包創(chuàng)建實(shí)例解析

    這篇文章主要介紹了Java Socket編程心跳包創(chuàng)建實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • Spring配置shiro時(shí)自定義Realm中屬性無(wú)法使用注解注入的解決辦法

    Spring配置shiro時(shí)自定義Realm中屬性無(wú)法使用注解注入的解決辦法

    今天小編就為大家分享一篇關(guān)于Spring配置shiro時(shí)自定義Realm中屬性無(wú)法使用注解注入的解決辦法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • 基于Java protected的深入理解

    基于Java protected的深入理解

    本篇文章是對(duì)Java protected進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • JPA之EntityManager踩坑及解決:更改PersistenceContext

    JPA之EntityManager踩坑及解決:更改PersistenceContext

    這篇文章主要介紹了JPA之EntityManager踩坑及解決:更改PersistenceContext方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java字符串的壓縮與解壓縮的兩種方法

    Java字符串的壓縮與解壓縮的兩種方法

    這篇文章主要介紹了Java字符串的壓縮與解壓縮的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Jmeter命令行執(zhí)行腳本如何設(shè)置動(dòng)態(tài)參數(shù)

    Jmeter命令行執(zhí)行腳本如何設(shè)置動(dòng)態(tài)參數(shù)

    這篇文章主要介紹了Jmeter命令行執(zhí)行腳本如何設(shè)置動(dòng)態(tài)參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • idea創(chuàng)建maven項(xiàng)目速度慢的三種解決方案

    idea創(chuàng)建maven項(xiàng)目速度慢的三種解決方案

    這篇文章主要介紹了idea創(chuàng)建maven項(xiàng)目速度慢的三種解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Java實(shí)現(xiàn)SHA算法的方法詳解

    Java實(shí)現(xiàn)SHA算法的方法詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)SHA算法的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java實(shí)現(xiàn)sha算法的原理、實(shí)現(xiàn)與使用相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03

最新評(píng)論