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

MyBatis中多對多關(guān)系的映射和查詢

 更新時間:2017年02月04日 09:37:49   作者:hnlictmso  
本文主要介紹了MyBatis中多對多關(guān)系的映射和查詢的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧

先說一下需求:

 在頁面上顯示數(shù)據(jù)庫中的所有圖書,顯示圖書的同時,顯示出該圖書所屬的類別(這里一本書可能同時屬于多個類別)

創(chuàng)建表:

 筆者這里使用中間表連接圖書表和圖書類別表,圖書表中沒有使用外鍵關(guān)聯(lián)圖書類別表

 而是在中間表中引用了圖書主鍵和類別主鍵

 通過中間表來 表示 圖書 和 圖書類別 的關(guān)系

建立圖書表(圖書編號,圖書名字)

create table book
(
 bid int primary key auto_increment,
 bname varchar(20)   
);

建立類別表(類別編號,類別名字)

create table category
(
 cid int primary key auto_increment,
 cname varchar(20)
);

建立中間表(圖書編號,類別編號)

create table middle
(
 m_bid int,
 m_cid int,
 constraint fk_bid foreign key(m_bid) references book(bid),
 constraint fk_cid foreign key(m_cid) references category(cid)
);

插入測試數(shù)據(jù)

insert into category values (default,'java');
insert into category values (default,'c++');
insert into category values (default,'mysql');
insert into book values (default,'SQL技術(shù)');
insert into book values (default,'SSM+MySQL詳解');
insert into book values (default,'C++和java對比');
insert into middle values (1,3);
insert into middle values (2,1);
insert into middle values (2,3);
insert into middle values (3,2);
insert into middle values (3,1);

插入的數(shù)據(jù)中,第一本書 有一個類別,第二本書和第三本書都有兩個類別

到現(xiàn)在為止,數(shù)據(jù)庫的事情就完事了。下面,通過MyBatis-Generator生成實體類、DAO接口、XML映射文件  不會點擊這里

為了方便省事,筆者這里通過Java項目演示,將自動生成的文件 放入新建的Java項目中,導(dǎo)入相關(guān)的Jar包,項目結(jié)構(gòu) 如下圖

現(xiàn)在我們打開生成的 圖書實體類 看一下

public class Book {
 private Integer bid;
 private String bname;
 public Integer getBid() {
 return bid;
 }
 public void setBid(Integer bid) {
 this.bid = bid;
 }
 public String getBname() {
 return bname;
 }
 public void setBname(String bname) {
 this.bname = bname == null ? null : bname.trim();
 }
}

只有圖書編號、圖書名字 這兩個屬性,而我們的需求是 得到圖書的同時,得到該圖書所屬的 所有類別, 所以 我們可以考慮 給圖書實體類 添加 一個 圖書類別的集合

修改后的圖書實體類 如下

public class Book {
 private Integer bid;
 private String bname;
 private List<Category> categories;
 public Integer getBid() {
 return bid;
 }
 public void setBid(Integer bid) {
 this.bid = bid;
 }
 public String getBname() {
 return bname;
 }
 public void setBname(String bname) {
 this.bname = bname == null ? null : bname.trim();
 }
 public List<Category> getCategories() {
 return categories;
 }
 public void setCategories(List<Category> categories) {
 this.categories = categories;
 }
}

下面 我們開始寫SQL語句,使用連接查詢 查出所有的圖書和圖書類別

select 
 * 
from 
 book b
  inner join 
    middle m
  on
    b.bid=m.m_bid
  inner join
    category c
  on
   m.m_cid=c.cid

執(zhí)行結(jié)果如下 完美的顯示了所有圖書 和 該圖書的類別

下面 我們就在XML映射文件中動手腳,使得 這些數(shù)據(jù) 能按我們所期望的 自動填充到 圖書實體類中

這里為突出重點 所以將圖書的映射文件和DAO接口 清空,清空后 如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mybatis.dao.BookMapper" >
 <select id="queryAll"> 
 </select>
</mapper>
public interface BookMapper {
 List<Book> queryAll();
}

清空后 我們開始編寫,編寫結(jié)果如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mybatis.dao.BookMapper" > 
 <resultMap type="com.mybatis.entity.Book" id="bookMap">
 <id property="bid" column="bid" />
 <result property="bname" column="bname" /> 
 <collection property="categories" ofType="com.mybatis.entity.Category">
 <id property="cid" column="cid" />
 <result property="cname" column="cname" /> 
 </collection>
 </resultMap>
 <select id="queryAll" resultMap="bookMap">
 select 
 * 
 from 
 book b
 inner join 
 middle m
 on
 b.bid=m.m_bid
 inner join
 category c
 on
 m.m_cid=c.cid
 </select>
</mapper>

最后我們 編寫main方法測試

public class MyMain {
 public static void main(String[] args) throws IOException {
 String resource = "mybatis-config.xml";
 Reader reader = Resources.getResourceAsReader(resource);
 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
 SqlSession session = factory.openSession();
 BookMapper bookMapper = session.getMapper(BookMapper.class);
 for (Book book : bookMapper.queryAll()) {
 System.out.print("["+book.getBname()+"]");
 for(Category category :book.getCategories()){
 System.out.print(category.getCname()+"\t");
 }
 System.out.println("\n");
 }
 }
}

測試結(jié)果如下圖

成功輸出了 所有圖書 和 對應(yīng)的圖書類別

完整項目下載:點擊下載

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • Spring實戰(zhàn)之讓Bean獲取Spring容器操作示例

    Spring實戰(zhàn)之讓Bean獲取Spring容器操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之讓Bean獲取Spring容器操作,結(jié)合實例形式分析了Bean獲取Spring容器的相關(guān)原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下
    2019-11-11
  • 基于StringBuilder類中的重要方法(介紹)

    基于StringBuilder類中的重要方法(介紹)

    下面小編就為大家?guī)硪黄赟tringBuilder類中的重要方法(介紹)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • java解析xml匯總_動力節(jié)點Java學(xué)院整理

    java解析xml匯總_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了java解析xml匯總_動力節(jié)點Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)與算法之循環(huán)隊列的實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)與算法之循環(huán)隊列的實現(xiàn)

    循環(huán)隊列 (Circular Queue) 是一種特殊的隊列。循環(huán)隊列解決了隊列出隊時需要將所有數(shù)據(jù)前移一位的問題。本文將帶大家詳細了解循環(huán)隊列如何實現(xiàn),需要的朋友可以參考一下
    2021-12-12
  • 老生常談Java異常處理和設(shè)計(推薦)

    老生常談Java異常處理和設(shè)計(推薦)

    下面小編就為大家?guī)硪黄仙U凧ava異常處理和設(shè)計(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot中的ApplicationListener事件監(jiān)聽器使用詳解

    SpringBoot中的ApplicationListener事件監(jiān)聽器使用詳解

    這篇文章主要介紹了SpringBoot中的ApplicationListener事件監(jiān)聽器使用詳解,ApplicationListener是應(yīng)用程序的事件監(jiān)聽器,繼承自java.util.EventListener標(biāo)準(zhǔn)接口,采用觀察者設(shè)計模式,需要的朋友可以參考下
    2023-11-11
  • Spring Security登錄添加驗證碼的實現(xiàn)過程

    Spring Security登錄添加驗證碼的實現(xiàn)過程

    這篇文章主要介紹了Spring Security登錄添加驗證碼的實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 利用Java自寫一個生成ID的工具類

    利用Java自寫一個生成ID的工具類

    平時項目中只要涉及表,那么一定能接觸到眾多各式各樣的ID編號。本文將通過Java語言實現(xiàn)手寫一個ID生成工具類,需要的小伙伴可以參考一下
    2022-11-11
  • 詳解Spring極速集成注解redis實錄

    詳解Spring極速集成注解redis實錄

    這篇文章主要介紹了詳解Spring極速集成注解redis實錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • java圖片格式轉(zhuǎn)換的三段代碼

    java圖片格式轉(zhuǎn)換的三段代碼

    這篇文章主要分享了java圖片格式轉(zhuǎn)換的三段代碼,小編查找資料整理了java圖片格式轉(zhuǎn)換的三段不同代碼,推薦給大家。
    2015-11-11

最新評論

凤山市| 富蕴县| 翁牛特旗| 五莲县| 蒙山县| 西吉县| 射阳县| 巴塘县| 彭州市| 伊吾县| 正镶白旗| 石阡县| 乐昌市| 新巴尔虎右旗| 墨竹工卡县| 安乡县| 广饶县| 佛冈县| 高清| 锦屏县| 汕头市| 庆城县| 虞城县| 彩票| 柞水县| 永康市| 喀什市| 新乐市| 新安县| 罗平县| 获嘉县| 囊谦县| 江都市| 温宿县| 沙河市| 嘉定区| 当雄县| 安国市| 公安县| 保定市| 慈利县|