最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis中的關(guān)聯(lián)關(guān)系配置與多表查詢的操作代碼

 更新時(shí)間:2023年09月02日 14:19:35   作者:葉秋∵  
本文介紹了在MyBatis中配置和使用一對(duì)多和多對(duì)多關(guān)系的方法,通過(guò)合理的實(shí)體類設(shè)計(jì)、Mapper接口和XML文件的配置,我們可以方便地進(jìn)行多表查詢,并豐富了應(yīng)用程序的功能和靈活性,需要的朋友可以參考下

引言

在數(shù)據(jù)庫(kù)應(yīng)用開發(fā)中,經(jīng)常會(huì)遇到需要查詢多個(gè)表之間的關(guān)聯(lián)關(guān)系的情況。MyBatis是一個(gè)流行的Java持久層框架,它提供了靈活的配置方式來(lái)處理多表查詢中的一對(duì)多、一對(duì)一和多對(duì)多關(guān)系。本文將介紹如何在MyBatis中配置和使用這些關(guān)聯(lián)關(guān)系。

一、一對(duì)多關(guān)系配置

在數(shù)據(jù)庫(kù)中,一對(duì)多關(guān)系是指一個(gè)表的一條記錄對(duì)應(yīng)另一個(gè)表的多條記錄。在MyBatis中,我們可以通過(guò)以下步驟來(lái)配置和使用一對(duì)多關(guān)系:

1.創(chuàng)建實(shí)體類

首先,我們需要?jiǎng)?chuàng)建兩個(gè)實(shí)體類,分別表示一對(duì)多關(guān)系中的一方和多方。例如,我們創(chuàng)建一個(gè)Order類和一個(gè)OrderItem類,其中一個(gè)訂單可以對(duì)應(yīng)多個(gè)訂單項(xiàng)。

public class Order {
    private Long id;
    private String orderNo;
    private List<OrderItem> orderItems;
    // 省略getter和setter方法
}
public class OrderItem {
    private Long id;
    private String productName;
    // 省略getter和setter方法
}
package com.yuan.vo;
import com.yuan.model.Order;
import com.yuan.model.OrderItem;
import java.util.ArrayList;
import java.util.List;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 11:48
 */
public class OrderVO extends Order {
    private List<OrderItem> list = new ArrayList<>();
    public List<OrderItem> getList() {
        return list;
    }
    public void setList(List<OrderItem> list) {
        this.list = list;
    }
}

2.創(chuàng)建Mapper接口和XML文件

接下來(lái),我們需要?jiǎng)?chuàng)建Mapper接口和對(duì)應(yīng)的XML文件來(lái)定義查詢方法和SQL語(yǔ)句。在XML文件中,我們可以使用MyBatis的標(biāo)簽來(lái)配置一對(duì)多關(guān)系。

<!-- OrderMapper.xml -->
<mapper namespace="com.yuan.mapper.OrderMapper">
    <resultMap id="OrderVoMap" type="com.yuan.vo.OrderVO" >
    <result column="order_id" property="orderId"></result>
    <result column="order_no" property="orderNo"></result>
    <collection property="list" ofType="com.yuan.model.OrderItem">
      <result column="order_item_id" property="orderItemId"></result>
      <result column="product_id" property="productId"></result>
      <result column="quantity" property="quantity"></result>
      <result column="oid" property="oid"></result>
    </collection>
  </resultMap>
     <select id="demo1" resultMap="OrderVoMap" parameterType="java.lang.Integer" >
    select * from t_hibernate_order o ,t_hibernate_order_item oit where o.order_id = oit.oid and o.order_id = #{oid}
  </select>
</mapper>

3.編寫查詢方法

最后,我們?cè)贛apper接口中定義查詢方法,并在XML文件中配置對(duì)應(yīng)的SQL語(yǔ)句。

package com.yuan.Biz;
import com.yuan.vo.OrderVO;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 13:08
 */
public interface OrderBiz {
    OrderVO demo1(Integer oid);
}

4.使用一對(duì)多關(guān)系查詢

現(xiàn)在,我們可以在代碼中使用一對(duì)多關(guān)系查詢了。

package com.yuan.Biz.Impl;
import com.yuan.Biz.OrderBiz;
import com.yuan.vo.OrderVO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 13:13
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"})
public class OrderBizImplTest {
    @Autowired
    private  OrderBiz orderBiz;
    @Test
    public void demo1() {
        OrderVO orderVO = orderBiz.demo1(7);
        System.out.println(orderVO);
        orderVO.getList().forEach(System.out::println);
    }
}

二、一對(duì)一關(guān)系配置

1.創(chuàng)建實(shí)體類

首先,我們需要?jiǎng)?chuàng)建兩個(gè)實(shí)體類,分別表示一對(duì)多關(guān)系中的一方和一方。例如,我們創(chuàng)建一個(gè)Order類和一個(gè)OrderItem類,其中一個(gè)訂單可以對(duì)應(yīng)一個(gè)訂單項(xiàng)。

public class Order {
    private Long id;
    private String orderNo;
    private List<OrderItem> orderItems;
    // 省略getter和setter方法
}
public class OrderItem {
    private Long id;
    private String productName;
    // 省略getter和setter方法
}
package com.yuan.vo;
import com.yuan.model.Order;
import com.yuan.model.OrderItem;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 13:58
 */
public class OrderItemVo extends OrderItem {
   private Order order;
    public Order getOrder() {
        return order;
    }
    public void setOrder(Order order) {
        this.order = order;
    }
}

2.創(chuàng)建Mapper接口和XML文件

接下來(lái),我們需要?jiǎng)?chuàng)建Mapper接口和對(duì)應(yīng)的XML文件來(lái)定義查詢方法和SQL語(yǔ)句。在XML文件中,我們可以使用MyBatis的標(biāo)簽來(lái)配置一對(duì)一關(guān)系。

 <resultMap id="OrderItemVoMap" type="com.yuan.vo.OrderItemVo">
    <result column="order_item_id" property="orderItemId"></result>
    <result column="product_id" property="productId"></result>
    <result column="quantity" property="quantity"></result>
    <result column="oid" property="oid"></result>
    <association property="order" javaType="com.yuan.model.Order">
      <result column="order_id" property="orderId"></result>
      <result column="order_no" property="orderNo"></result>
    </association>
  </resultMap>
  <select id="demo2" resultMap="OrderItemVoMap" parameterType="java.lang.Integer" >
    select * from t_hibernate_order o ,t_hibernate_order_item oit where o.order_id = oit.oid and oit.order_item_id = #{oiid}
  </select>

3.編寫查詢方法

最后,我們?cè)贛apper接口中定義查詢方法,并在XML文件中配置對(duì)應(yīng)的SQL語(yǔ)句。

package com.yuan.Biz;
import com.yuan.model.OrderItem;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 14:03
 */
public interface OrderItemBiz {
    OrderItem demo2( Integer oiid);
}

4.使用一對(duì)一關(guān)系查詢

現(xiàn)在,我們可以在代碼中使用一對(duì)多關(guān)系查詢了。

package com.yuan.Biz.Impl;
import com.yuan.Biz.OrderItemBiz;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 14:06
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"})
public class OrderItemBizImplTest {
    @Autowired
    private OrderItemBiz orderItemBiz;
    @Test
    public void demo2() {
        System.out.println(orderItemBiz.demo2(27));
    }
}

三、多對(duì)多關(guān)系配置

在數(shù)據(jù)庫(kù)中,多對(duì)多關(guān)系是指兩個(gè)表之間存在多對(duì)多的關(guān)系。在MyBatis中,我們可以通過(guò)以下步驟來(lái)配置和使用多對(duì)多關(guān)系:

1.創(chuàng)建實(shí)體類

首先,我們需要?jiǎng)?chuàng)建兩個(gè)實(shí)體類,分別表示多對(duì)多關(guān)系中的兩個(gè)表。例如,我們創(chuàng)建一個(gè)User類和一個(gè)Role類,一個(gè)用戶可以擁有多個(gè)角色,一個(gè)角色也可以被多個(gè)用戶擁有。

package com.yuan.model;
import lombok.ToString;
@ToString
public class HBook {
    private Integer bookId;
    private String bookName;
    private Float price;
    public HBook(Integer bookId, String bookName, Float price) {
        this.bookId = bookId;
        this.bookName = bookName;
        this.price = price;
    }
    public HBook() {
        super();
    }
    public Integer getBookId() {
        return bookId;
    }
    public void setBookId(Integer bookId) {
        this.bookId = bookId;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public Float getPrice() {
        return price;
    }
    public void setPrice(Float price) {
        this.price = price;
    }
}
package com.yuan.model;
import lombok.ToString;
@ToString
public class HBookCategory {
    private Integer bcid;
    private Integer bid;
    private Integer cid;
    public HBookCategory(Integer bcid, Integer bid, Integer cid) {
        this.bcid = bcid;
        this.bid = bid;
        this.cid = cid;
    }
    public HBookCategory() {
        super();
    }
    public Integer getBcid() {
        return bcid;
    }
    public void setBcid(Integer bcid) {
        this.bcid = bcid;
    }
    public Integer getBid() {
        return bid;
    }
    public void setBid(Integer bid) {
        this.bid = bid;
    }
    public Integer getCid() {
        return cid;
    }
    public void setCid(Integer cid) {
        this.cid = cid;
    }
}
package com.yuan.model;
import lombok.ToString;
@ToString
public class HCategory {
    private Integer categoryId;
    private String categoryName;
    public HCategory(Integer categoryId, String categoryName) {
        this.categoryId = categoryId;
        this.categoryName = categoryName;
    }
    public HCategory() {
        super();
    }
    public Integer getCategoryId() {
        return categoryId;
    }
    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }
    public String getCategoryName() {
        return categoryName;
    }
    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }
}
package com.yuan.vo;
import com.yuan.model.HBook;
import com.yuan.model.HCategory;
import java.util.List;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 20:35
 */
public class HbookVo extends HBook {
    private List<HCategory> categories ;
    public List<HCategory> getCategories() {
        return categories;
    }
    public void setCategories(List<HCategory> categories) {
        this.categories = categories;
    }
}

2.創(chuàng)建Mapper接口和XML文件

接下來(lái),我們需要?jiǎng)?chuàng)建Mapper接口和對(duì)應(yīng)的XML文件來(lái)定義查詢方法和SQL語(yǔ)句。在XML文件中,我們可以使用MyBatis的標(biāo)簽來(lái)配置多對(duì)多關(guān)系。

 <resultMap id="HookVoMap" type="com.yuan.vo.HbookVo" >
    <result column="book_id" property="bookId"></result>
    <result column="book_name" property="bookName"></result>
    <result column="price" property="price"></result>
    <collection property="categories" ofType="com.yuan.model.HCategory">
      <result column="category_id" property="categoryId"></result>
      <result column="category_name" property="categoryName"></result>
    </collection>
  </resultMap>
  <select id="demo3" resultMap="HookVoMap" parameterType="java.lang.Integer">
    select * from t_hibernate_book b ,t_hibernate_book_category bc,t_hibernate_category c
    where b.book_id = bc.bid
    and bc.cid = c.category_id
    and b.book_id = #{bid}
  </select>

3.編寫查詢方法

最后,我們?cè)贛apper接口中定義查詢方法,并在XML文件中配置對(duì)應(yīng)的SQL語(yǔ)句。

package com.yuan.Biz.Impl;
import com.yuan.Biz.HBookBiz;
import com.yuan.mapper.HBookMapper;
import com.yuan.vo.HbookVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 21:23
 */
@Service
public class HBookBizImpl implements HBookBiz {
    @Autowired
    private HBookMapper hBookMapper;
    @Override
    public HbookVo demo3(Integer bid) {
        return hBookMapper.demo3(bid);
    }
}

4.使用多對(duì)多關(guān)系查詢

現(xiàn)在,我們可以在代碼中使用多對(duì)多關(guān)系查詢了。

package com.yuan.Biz.Impl;
import com.yuan.Biz.HBookBiz;
import com.yuan.vo.HbookVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
 * @author 葉秋
 * @site
 * @company 卓京公司
 * @create 2023-09-01 21:24
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"})
public class HBookBizImplTest {
    @Autowired
    private HBookBiz hBookBiz;
    @Test
    public void demo3() {
        HbookVo hbookVo = hBookBiz.demo3(8);
        System.out.println(hbookVo);
        hbookVo.getCategories().forEach(System.out::println);
    }
}

總結(jié)

本文介紹了在MyBatis中配置和使用一對(duì)多和多對(duì)多關(guān)系的方法。通過(guò)合理的實(shí)體類設(shè)計(jì)、Mapper接口和XML文件的配置,我們可以方便地進(jìn)行多表查詢,并豐富了應(yīng)用程序的功能和靈活性。補(bǔ)充內(nèi)容:在實(shí)際開發(fā)中,我們還可以使用MyBatis的動(dòng)態(tài)SQL和緩存等特性來(lái)進(jìn)一步優(yōu)化查詢性能和提高開發(fā)效率。希望本文對(duì)您在MyBatis中處理關(guān)聯(lián)關(guān)系有所幫助。

到此這篇關(guān)于MyBatis中的關(guān)聯(lián)關(guān)系配置與多表查詢的文章就介紹到這了,更多相關(guān)MyBatis關(guān)聯(lián)關(guān)系配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決mybatis 數(shù)據(jù)庫(kù)date 與 java中Date類型映射問題

    解決mybatis 數(shù)據(jù)庫(kù)date 與 java中Date類型映射問題

    這篇文章主要介紹了解決mybatis 數(shù)據(jù)庫(kù)date 與 java中Date類型映射問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)吧
    2020-11-11
  • 使用IDEA啟動(dòng)項(xiàng)目build時(shí)出現(xiàn)OOM相關(guān)異常的解決

    使用IDEA啟動(dòng)項(xiàng)目build時(shí)出現(xiàn)OOM相關(guān)異常的解決

    這篇文章主要介紹了使用IDEA啟動(dòng)項(xiàng)目build時(shí)出現(xiàn)OOM相關(guān)異常的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Springboot 全局日期格式化處理的實(shí)現(xiàn)

    Springboot 全局日期格式化處理的實(shí)現(xiàn)

    這篇文章主要介紹了Springboot 全局日期格式化處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java 實(shí)現(xiàn) ReAct Agent工具調(diào)用與推理循環(huán)的過(guò)程

    Java 實(shí)現(xiàn) ReAct Agent工具調(diào)用與推理循環(huán)的過(guò)程

    文章介紹了Agent的概念,與普通LLM的區(qū)別,并詳細(xì)講解了ReAct模式,包括定義工具、ReAct Prompt模板、構(gòu)建推理循環(huán)和工具執(zhí)行邏輯,還對(duì)比了j-langchain和LangChain Python的特點(diǎn),強(qiáng)調(diào)了j-langchain的透明度和可調(diào)試性
    2026-04-04
  • Java中初始化List集合的八種方式匯總

    Java中初始化List集合的八種方式匯總

    List?是?Java?開發(fā)中經(jīng)常會(huì)使用的集合,下面這篇文章主要給大家介紹了關(guān)于Java中初始化List集合的八種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決

    java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決

    這篇文章主要給大家介紹了關(guān)于java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-02-02
  • 基于Java編寫一個(gè)粽子大作戰(zhàn)小游戲

    基于Java編寫一個(gè)粽子大作戰(zhàn)小游戲

    端午節(jié),又稱龍舟節(jié)、重午節(jié),是中國(guó)的傳統(tǒng)節(jié)日之一,每年農(nóng)歷五月初五慶祝,雖然端午假期已經(jīng)過(guò)去了,小編還是用Java編寫了一個(gè)粽子大作戰(zhàn)小游戲,感興趣的可以了解一下
    2023-06-06
  • Spring使用@Async出現(xiàn)循環(huán)依賴原因及解決方案分析

    Spring使用@Async出現(xiàn)循環(huán)依賴原因及解決方案分析

    在Spring框架中,啟用異步功能需要在應(yīng)用主類上添加@EnableAsync注解,當(dāng)項(xiàng)目中存在循環(huán)引用時(shí),如一個(gè)異步類MessageService和一個(gè)常規(guī)類TaskService相互引用,并且這兩個(gè)類位于同一包內(nèi),這種情況下可能會(huì)觸發(fā)Spring的循環(huán)依賴異常
    2024-10-10
  • java按豎線分割的實(shí)現(xiàn)

    java按豎線分割的實(shí)現(xiàn)

    在Java中,我們可以使用split()方法按豎線分割字符串,本文將介紹如何使用Java中的字符串分割方法來(lái)按豎線進(jìn)行分割,同時(shí)提供代碼示例來(lái)幫助讀者理解,感興趣的可以了解一下
    2024-01-01
  • 詳解IDEA搭建springBoot方式一(推薦)

    詳解IDEA搭建springBoot方式一(推薦)

    這篇文章主要介紹了IDEA搭建springBoot方式一(推薦),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

健康| 贞丰县| 银川市| 襄城县| 乡宁县| 旬邑县| 甘洛县| 积石山| 郑州市| 永丰县| 荆州市| 旌德县| 甘孜县| 高雄县| 阳谷县| 宜宾市| 彭州市| 利辛县| 阜城县| 沭阳县| 无极县| 和政县| 永宁县| 长沙市| 江阴市| 萨迦县| 贵州省| 福州市| 绥江县| 闽侯县| 尼玛县| 青川县| 通化县| 扎鲁特旗| 玉山县| 宁海县| 连南| 南宫市| 商河县| 合川市| 当雄县|