日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Mybatis自關聯查詢一對多查詢的實現示例

瀏覽:172日期:2023-10-20 09:34:46

注:代碼已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,項目是mybatis-13-oneself-one2many,需要自取,需要配置maven環境以及mysql環境(sql語句在resource下的test.sql中),覺得有用可以點個小星星。

docsify文檔地址在:https://damaer.github.io/Mybatis-Learning/#/

所謂自關聯查詢,是指自己既然充當一方,又充當多方。比如新聞欄目的數據表,自己可以是父欄目,也可以是多方,子欄目。在數據表里面實現就是一張表,有一個外鍵pid,用來表示該欄目的父欄目,一級欄目沒有父欄目的,可以將其外鍵設置為0。

DB表如下:

Mybatis自關聯查詢一對多查詢的實現示例

查詢指定欄目的所有子孫欄目

查詢指定目錄的所有子孫目錄,我們需要使用遞歸的思想,查出當前欄目之后,需要將當前欄目的id作為下一級欄目的pid。

實體類NewsLabel.java,使用一對多的關系:

import java.util.Set;public class NewsLabel { private Integer id; private String name; private Set<NewsLabel>children; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<NewsLabel> getChildren() { return children; } public void setChildren(Set<NewsLabel> children) { this.children = children; } @Override public String toString() { return 'NewsLabel [id=' + id + ', name=' + name + ', children='+ children + ']'; } }

定義sql接口:

public interface INewsLabelDao { List<NewsLabel> selectChildByParentId(int pid);}

mapper.xml文件,在遞歸里面使用本身sql:

<?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='dao.INewsLabelDao'> <resultMap type='beans.NewsLabel' id='newsLabelMapper'> <id column='id' property='id'/> <result column='name' property='name'/> <collection property='children' ofType='NewsLabel'select='selectChildByParentId'column='id'/> </resultMap> <select resultMap='newsLabelMapper'> select id,name from newslabel where pid=#{xxx} </select></mapper>

測試類MyTest.java:

public class MyTest { private INewsLabelDao dao; private SqlSession sqlSession; @Before public void Before(){ sqlSession=MyBatisUtils.getSqlSession(); dao=sqlSession.getMapper(INewsLabelDao.class); } @Test public void TestselectMinisterById(){ List<NewsLabel>children=dao.selectChildByParentId(2); for(NewsLabel newsLabel:children){ System.out.println(newsLabel); } } @After public void after(){ if(sqlSession!=null){ sqlSession.close(); } }}

結果:

NewsLabel [id=3, name=NBA, children=[NewsLabel [id=5, name=火箭, children=[]], NewsLabel [id=6, name=湖人, children=[]]]]NewsLabel [id=4, name=CBA, children=[NewsLabel [id=7, name=北京金甌, children=[]], NewsLabel [id=8, name=浙江廣夏, children=[]], NewsLabel [id=9, name=青島雙星, children=[]]]]

這樣的寫法只能選出子孫欄目,不能將自己的信息輸出。

查詢指定目錄以及指定子孫目錄

添加一個sql的接口:

List<NewsLabel> selectSelfAndChildByParentId(int pid);

mapper文件里面實現,在resultMap里面遞歸調用另一個sql,最外層的sql只執行一次,這樣就可以實現查詢自身一次,遞歸查詢子孫欄目的功能:

<!-- 篩選出自己以及子孫欄目--> <select resultMap='newsLabelMapper2'> select id,name from newslabel where pid=#{ooo} </select> <resultMap type='beans.NewsLabel' id='newsLabelMapper2'> <id column='id' property='id'/> <result column='name' property='name'/> <collection property='children' ofType='NewsLabel' select='selectChildByParentId2' column='id'/> </resultMap> <select resultMap='newsLabelMapper2'> select id,name from newslabel where id=#{xxx} </select>

單元測試:

@Test public void TestselectSelfAndChildrenLabelById(){ List<NewsLabel> children = dao.selectSelfAndChildByParentId(2); for (NewsLabel newsLabel : children) { System.out.println(newsLabel); } }

結果:

[service] 2018-07-16 11:17:16,667 - org.apache.ibatis.transaction.jdbc.JdbcTransaction -450 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5bb21b69][service] 2018-07-16 11:17:16,669 - dao.INewsLabelDao.selectSelfAndChildByParentId -452 [main] DEBUG dao.INewsLabelDao.selectSelfAndChildByParentId - ==> Preparing: select id,name from newslabel where id=? [service] 2018-07-16 11:17:16,704 - dao.INewsLabelDao.selectSelfAndChildByParentId -487 [main] DEBUG dao.INewsLabelDao.selectSelfAndChildByParentId - ==> Parameters: 2(Integer)[service] 2018-07-16 11:17:16,722 - dao.INewsLabelDao.selectChildByParentId2 -505 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ====> Preparing: select id,name from newslabel where pid=? [service] 2018-07-16 11:17:16,723 - dao.INewsLabelDao.selectChildByParentId2 -506 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ====> Parameters: 2(Integer)[service] 2018-07-16 11:17:16,726 - dao.INewsLabelDao.selectChildByParentId2 -509 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ======> Preparing: select id,name from newslabel where pid=? [service] 2018-07-16 11:17:16,726 - dao.INewsLabelDao.selectChildByParentId2 -509 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ======> Parameters: 3(Integer)[service] 2018-07-16 11:17:16,727 - dao.INewsLabelDao.selectChildByParentId2 -510 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Preparing: select id,name from newslabel where pid=? [service] 2018-07-16 11:17:16,728 - dao.INewsLabelDao.selectChildByParentId2 -511 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Parameters: 5(Integer)[service] 2018-07-16 11:17:16,729 - dao.INewsLabelDao.selectChildByParentId2 -512 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - <======== Total: 0[service] 2018-07-16 11:17:16,732 - dao.INewsLabelDao.selectChildByParentId2 -515 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Preparing: select id,name from newslabel where pid=? [service] 2018-07-16 11:17:16,732 - dao.INewsLabelDao.selectChildByParentId2 -515 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Parameters: 6(Integer)[service] 2018-07-16 11:17:16,733 - dao.INewsLabelDao.selectChildByParentId2 -516 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - <======== Total: 0[service] 2018-07-16 11:17:16,734 - dao.INewsLabelDao.selectChildByParentId2 -517 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - <====== Total: 2[service] 2018-07-16 11:17:16,734 - dao.INewsLabelDao.selectChildByParentId2 -517 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ======> Preparing: select id,name from newslabel where pid=? [service] 2018-07-16 11:17:16,734 - dao.INewsLabelDao.selectChildByParentId2 -517 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ======> Parameters: 4(Integer)[service] 2018-07-16 11:17:16,736 - dao.INewsLabelDao.selectChildByParentId2 -519 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Preparing: select id,name from newslabel where pid=? [service] 2018-07-16 11:17:16,736 - dao.INewsLabelDao.selectChildByParentId2 -519 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Parameters: 7(Integer)[service] 2018-07-16 11:17:16,738 - dao.INewsLabelDao.selectChildByParentId2 -521 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - <======== Total: 0[service] 2018-07-16 11:17:16,738 - dao.INewsLabelDao.selectChildByParentId2 -521 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Preparing: select id,name from newslabel where pid=? [service] 2018-07-16 11:17:16,739 - dao.INewsLabelDao.selectChildByParentId2 -522 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Parameters: 8(Integer)[service] 2018-07-16 11:17:16,741 - dao.INewsLabelDao.selectChildByParentId2 -524 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - <======== Total: 0[service] 2018-07-16 11:17:16,742 - dao.INewsLabelDao.selectChildByParentId2 -525 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Preparing: select id,name from newslabel where pid=? [service] 2018-07-16 11:17:16,742 - dao.INewsLabelDao.selectChildByParentId2 -525 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - ========> Parameters: 9(Integer)[service] 2018-07-16 11:17:16,743 - dao.INewsLabelDao.selectChildByParentId2 -526 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - <======== Total: 0[service] 2018-07-16 11:17:16,744 - dao.INewsLabelDao.selectChildByParentId2 -527 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - <====== Total: 3[service] 2018-07-16 11:17:16,744 - dao.INewsLabelDao.selectChildByParentId2 -527 [main] DEBUG dao.INewsLabelDao.selectChildByParentId2 - <==== Total: 2[service] 2018-07-16 11:17:16,745 - dao.INewsLabelDao.selectSelfAndChildByParentId -528 [main] DEBUG dao.INewsLabelDao.selectSelfAndChildByParentId - <== Total: 1NewsLabel [id=2, name=體育新聞, children=[NewsLabel [id=3, name=NBA, children=[NewsLabel [id=6, name=湖人, children=[]], NewsLabel [id=5, name=火箭, children=[]]]], NewsLabel [id=4, name=CBA, children=[NewsLabel [id=7, name=北京金甌, children=[]], NewsLabel [id=8, name=浙江廣夏, children=[]], NewsLabel [id=9, name=青島雙星, children=[]]]]]]

到此這篇關于Mybatis自關聯查詢一對多查詢的實現示例的文章就介紹到這了,更多相關Mybatis 一對多查詢內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
999久久久精品国产| 高清一区二区| 久久精品二区三区| 美女网站视频一区| 精品国产乱码久久久久久1区2匹| 99热精品久久| 欧美一区二区三区久久精品| 四虎在线精品| 在线精品一区| 日韩精品三级| 欧美视频久久| 麻豆成人91精品二区三区| 国产精品第一国产精品| 精品国产鲁一鲁****| 国产精品第十页| 色综合狠狠操| 欧美亚洲国产一区| 亚洲视频国产精品| 911亚洲精品| 国精品产品一区| 久久久精品日韩| 99热免费精品| 欧美一级全黄| 国产videos久久| 国产精品一站二站| 91欧美国产| 激情综合亚洲| 在线精品视频一区| 欧美激情视频一区二区三区免费| 亚洲a一区二区三区| 国产999精品在线观看| 欧美sss在线视频| 亚洲欧美日韩精品一区二区| 午夜电影亚洲| 中文精品电影| 7m精品国产导航在线| 美女视频网站久久| 一本大道色婷婷在线| 91精品电影| 亚洲+小说+欧美+激情+另类| 久久精品国产999大香线蕉 | 日韩av黄色在线| 亚洲日本久久| 国产精品亚洲二区| 偷拍精品精品一区二区三区| 亚洲欧美日韩视频二区| 国产日韩精品视频一区二区三区| 国产二区精品| 亚洲精品一二| 精品亚洲免a| 亚洲激情婷婷| 国产精品mm| 樱桃成人精品视频在线播放| 国产欧美日韩精品一区二区免费| 制服诱惑一区二区| 亚洲精品美女91| 色黄视频在线观看| 综合激情婷婷| 首页国产精品| 青青草伊人久久| 天堂а√在线最新版中文在线| 欧美极品一区二区三区| www.com.cn成人| 日韩一区精品视频| 国产一区二区精品福利地址| 亚洲欧美日韩一区在线观看| 91综合网人人| 日韩国产欧美在线视频| 伊人久久高清| 国产伦理久久久久久妇女| 久久中文亚洲字幕| 日本午夜精品一区二区三区电影| 日本成人在线不卡视频| 国产精品原创| 91嫩草精品| 在线视频精品| 日韩久久精品网| 国产乱人伦丫前精品视频| 黄色国产精品| 久久男人天堂| 国产午夜一区| 美女精品在线| 色天使综合视频| 欧美日本不卡高清| 中文亚洲免费| 午夜精品成人av| 精品一区二区三区中文字幕| 免费成人性网站| 久久国产日本精品| 精品视频高潮| 91亚洲精品在看在线观看高清| 国产精品一区二区中文字幕| 国产综合精品| 日韩久久视频| 日韩综合一区| 久久av导航| 久久国产婷婷国产香蕉| 免费的成人av| 日韩在线播放一区二区| 欧美日韩激情| 91免费精品| 精品在线网站观看| 国产欧美一级| 亚洲精品视频一二三区| 玖玖精品视频| 午夜精品影院| 国产综合婷婷| 99久久视频| 91精品综合| 99久久精品国产亚洲精品| 日韩欧美午夜| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 久久久久久网| 久久av偷拍| 国产精品地址| 欧美精品中文字幕亚洲专区| 蜜桃传媒麻豆第一区在线观看| 欧美国产先锋| 91精品视频一区二区| 亚洲开心激情| 亚洲一区二区三区在线免费| 亚洲主播在线| 日韩午夜av| 国产亚洲亚洲| 男女精品网站| 日韩一区二区久久| 亚洲香蕉网站| 伊人久久婷婷| 亚洲一级大片| 91精品国产经典在线观看| 日韩av一级片| 久久国产日韩欧美精品| 国产精品久久| 最新中文字幕在线播放| 色婷婷综合网| 久久精品成人| 蜜桃tv一区二区三区| 91精品一区二区三区综合| 欧美精品一区二区三区精品| 亚洲在线网站| 日韩精品一区二区三区免费视频| 日韩欧美精品| 成人免费电影网址| 91九色精品国产一区二区| 国产免费成人| 日韩国产91| 久久国产日韩欧美精品| 久久久国产精品网站| 日韩国产一区| 黄色成人91| 日韩av二区在线播放| 国产精品1区在线| 国产精品99视频| 999久久久精品国产| 在线精品一区二区| 欧美精品不卡| 五月婷婷亚洲| 日韩精品国产欧美| 精品视频99| 好看不卡的中文字幕| 青草国产精品久久久久久| 精品亚洲二区| 亚洲小说欧美另类婷婷| 日本不卡高清| 国产成人1区| 亚洲一区二区三区四区五区午夜 | 国产精品115| 免费一级欧美在线观看视频 | av免费不卡国产观看| 日本在线高清| 丝袜国产日韩另类美女| 日韩国产在线一| 国模大尺度视频一区二区| 9国产精品视频| 国产精品黄色片| 在线日韩视频| 亚洲另类视频| 中文一区一区三区高中清不卡免费| 麻豆91精品视频| 99久久夜色精品国产亚洲1000部| 久久精品国产久精国产爱| 久久国产中文字幕| 久久福利精品| 精品久久影院| | 一级成人国产| 欧美激情五月| 另类激情亚洲| 国产精品久久久久久久免费观看| 国产精品网站在线看| 亚洲精品88| 欧美片网站免费| 午夜精品亚洲| 成人国产精品一区二区网站| 99亚洲视频| 精品一区二区三区中文字幕| 喷白浆一区二区| 欧美aa在线观看| 91亚洲无吗| 亚洲欧美日韩国产一区|