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

springboot整合mybatis實(shí)現(xiàn)多表查詢的實(shí)戰(zhàn)記錄

 更新時(shí)間:2021年08月12日 15:33:01   作者:BBZLOVEWJ  
SpringBoot對(duì)數(shù)據(jù)庫操作有多種方式,下面這篇文章主要給大家介紹了關(guān)于springboot整合mybatis實(shí)現(xiàn)多表查詢的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下

什么是mybatis

(1)Mybatis 是一個(gè)半 ORM(對(duì)象關(guān)系映射)框架,它內(nèi)部封裝了 JDBC,開發(fā)時(shí)只需要關(guān)注 SQL 語句本身,不需要花費(fèi)精力去處理加載驅(qū)動(dòng)、創(chuàng)建連接、創(chuàng)建statement 等繁雜的過程。程序員直接編寫原生態(tài) sql,可以嚴(yán)格控制 sql 執(zhí)行性能,靈活度高。

(2)MyBatis 可以使用 XML 或注解來配置和映射原生信息,將 POJO 映射成數(shù)據(jù)庫中的記錄,避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。 @Insert @Repository

(3)通過 xml 文件或注解的方式將要執(zhí)行的各種 statement 配置起來,并通過java 對(duì)象和 statement 中 sql 的動(dòng)態(tài)參數(shù)進(jìn)行映射生成最終執(zhí)行的 sql 語句,最后由 mybatis 框架執(zhí)行 sql 并將結(jié)果映射為 java 對(duì)象并返回。(從執(zhí)行 sql 到返回 result 的過程)。

Mybaits 的優(yōu)點(diǎn):

(1)基 于 SQL 語句編程,相當(dāng)靈活,不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫的現(xiàn)有設(shè)計(jì)造成任何影響,SQL 寫在 XML 里,解除 sql 與程序代碼的耦合,便于統(tǒng)一管理;提供 XML標(biāo)簽,支持編寫動(dòng)態(tài) SQL 語句,并可重用。

(2)與 JDBC 相比,減少了 50%以上的代碼量,消除了 JDBC 大量冗余的代碼,不需要手動(dòng)開關(guān)連接;

(3)很好的與各種數(shù)據(jù)庫兼容(因?yàn)?MyBatis 使用 JDBC 來連接數(shù)據(jù)庫,所以只要JDBC 支持的數(shù)據(jù)庫 MyBatis 都支持)。

(4)能夠與 Spring 很好的集成;

Mybatis是如何進(jìn)行分頁的?分頁插件的原理是什么?

Mybatis使用RowBounds對(duì)象進(jìn)行分頁,它是針對(duì)ResultSet結(jié)果集執(zhí)行的內(nèi)存分頁,而非物理分頁。可以在sql內(nèi)直接書寫帶有物理分頁的參數(shù)來完成物理分頁功能,也可以使用分頁插件來完成物理分頁。

下面將詳細(xì)springboot整合mybatis多表查詢的方法,一起來看看吧

1、一對(duì)一查詢(例一個(gè)用戶一個(gè)賬戶)

1.1、實(shí)體類

//用戶實(shí)體
@Data
public class UserInfo {

    private int u_id;
    private String name;
    private Account account;
}    


//賬戶實(shí)體
@Data
public class Account {

    private int a_id;
    private String  aname;
    private double money;
}


1.2、數(shù)據(jù)庫表

用戶表

賬戶表

1.3、持久層接口

  @Select("select * from userInfo where name=#{name} ")
    @Results({

            //@Result(property = "a_id",column = "a_id"),
            @Result(property ="account",column = "a_id",javaType = Account.class,
                    one = @One(select="com.bbz.dao.AccountDao.findById",fetchType = FetchType.LAZY))
    })
    public UserInfo findUserlnfo(String name);
   @Select("select * from account where a_id=#{a_id}")
    public Account findById (int a_id);

2、一對(duì)多查詢(例一個(gè)用戶對(duì)應(yīng)多個(gè)賬戶)

2.1、實(shí)體類

//用戶實(shí)體
@Data
public class UserInfo {

    private int u_id;
    private String name;
    private List<Account>accountList;
}

//賬戶實(shí)體
@Data
public class Account {

    private  int id;
    private int a_id;
    private String  aname;
    private double money;  
}

2.2、數(shù)據(jù)庫表

用戶表

賬戶表

2.3、持久層接口

    @Select("select * from userInfo where name=#{name}")
    @Results({
            @Result(property ="accountList",column ="a_id",javaType = List.class,
                    many = @Many(select = "com.bbz.dao.AccountDao.findById",fetchType = FetchType.LAZY)
            )
    })
    public UserInfo findUser(String name);
    
    //fetchType = FetchType.LAZY):提取方式為延遲加載,默認(rèn)是立即加載
 @Select("select * from account where a_id=#{a_id}")
    public   Account   findById (int a_id);
    

3、總結(jié)

共同點(diǎn):

無論是一對(duì)一還是一對(duì)多,都是通過附屬查詢來實(shí)現(xiàn)的,我們需要定義這個(gè)附屬查詢方法。

在主查詢方法中通過@One、@Many指定附屬查詢方法的全路徑。

都通過column來傳遞參數(shù)給附屬方法。

不同點(diǎn):

一對(duì)一,那么附屬方法返回的是一個(gè)單獨(dú)的對(duì)象

一對(duì)多,那么附屬方法返回的是一個(gè)對(duì)象集合

4、多對(duì)多的查詢(例一個(gè)用戶多個(gè)角色)

4.1、實(shí)體類

//用戶實(shí)體
@Data
public class UserInfo {

    private int u_id;
    private String name;
    private  List<Role>roleList;
}

//角色實(shí)體
@Data
public class Role {

    private int r_id;
    private String name;
}

4.2、數(shù)據(jù)庫表

用戶表

角色表

中間表

4.3、持久層接口

 @Select("select * from userInfo where u_id=#{u_id}")
    @Results({

            @Result(property = "u_id",column = "u_id"),
            @Result(property ="roleList",column ="u_id",javaType = List.class,
                    many = @Many(select = "com.bbz.dao.RoleDao.findById",fetchType = FetchType.LAZY)
            )

    })
    public UserInfo findUser(int u_id);
 @Select("select * from role r,user_role ur where r.r_id=ur.r_id and ur.u_id=#{u_id}")
    public List<Role> findById(int U_id);

5、多對(duì)一(一個(gè)用戶對(duì)應(yīng)多個(gè)老師)

5.1 實(shí)體類

//用戶實(shí)體
@Data
public class UserInfo {

    private int u_id;
    private String name;
    private Teacher teacher;
}

//老師實(shí)體
public class Teacher {

    public int t_id;
    public String name;
}

5.2、數(shù)據(jù)庫表

用戶表

老師表

5.3、持久層接口

@Select("select * from  userInfo where u_id=#{u_id}")
    @Results({
            @Result(property ="teacher",column ="t_id",javaType = Teacher.class,
                    one= @One(select = "com.bbz.dao.TeacherDao.findById",fetchType = FetchType.LAZY)
            )
    })
    @Select("select * from teacher where t_id=#{t_id}")
    public Teacher findById(int t_id);

總結(jié)

到此這篇關(guān)于springboot整和mybatis實(shí)現(xiàn)多表查詢的文章就介紹到這了,更多相關(guān)springboot整和mybatis多表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java安全fastjson1.2.24反序列化TemplatesImpl分析

    java安全fastjson1.2.24反序列化TemplatesImpl分析

    這篇文章主要介紹了java安全fastjson1.2.24反序列化TemplatesImpl分析,fastjson是alibaba開源的一個(gè)用于處理json數(shù)據(jù)格式的解析庫,它支持將java對(duì)象解析成json字符串格式的數(shù)據(jù),也可以將json字符串還原成java對(duì)象
    2022-07-07
  • Java實(shí)現(xiàn)int、long、Integer、Long之間的相互轉(zhuǎn)換

    Java實(shí)現(xiàn)int、long、Integer、Long之間的相互轉(zhuǎn)換

    本文主要介紹了Java實(shí)現(xiàn)int、long、Integer、Long之間的相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Java中的Semaphore信號(hào)量詳解

    Java中的Semaphore信號(hào)量詳解

    這篇文章主要介紹了Java中的Semaphore信號(hào)量詳解,Semaphore(信號(hào)量)是用來控制同時(shí)訪問特定資源的線程數(shù)量,通過協(xié)調(diào)各個(gè)線程以保證合理地使用公共資源,需要的朋友可以參考下
    2023-12-12
  • idea2023.3安裝及配置詳細(xì)圖文教程

    idea2023.3安裝及配置詳細(xì)圖文教程

    IDEA全稱IntelliJ?IDEA,是Java語言對(duì)的集成開發(fā)環(huán)境,IDEA在業(yè)界被認(rèn)為是公認(rèn)最好的Java開發(fā)工具,這篇文章主要給大家介紹了關(guān)于idea2023.3安裝及配置的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • java實(shí)現(xiàn)快速排序圖文詳解

    java實(shí)現(xiàn)快速排序圖文詳解

    網(wǎng)上關(guān)于快速排序的算法原理和算法實(shí)現(xiàn)都比較多,不過java是實(shí)現(xiàn)并不多,而且部分實(shí)現(xiàn)很難理解,和思路有點(diǎn)不搭調(diào)。所以整理了這篇文章。如果有不妥之處還請(qǐng)建議
    2021-08-08
  • spring+apollo動(dòng)態(tài)獲取yaml格式的配置方式

    spring+apollo動(dòng)態(tài)獲取yaml格式的配置方式

    這篇文章主要介紹了spring+apollo動(dòng)態(tài)獲取yaml格式的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Java通過百度地圖API獲取定位(普通IP定位)的方法教程

    Java通過百度地圖API獲取定位(普通IP定位)的方法教程

    這篇文章主要介紹了Java通過百度地圖API獲取定位的方法教程,首先說明了實(shí)現(xiàn)這個(gè)功能的需求和初衷,然后詳細(xì)描述了利用百度地圖API實(shí)現(xiàn)這個(gè)功能的步驟,包括在百度地圖開放平臺(tái)的準(zhǔn)備工作、學(xué)習(xí)官網(wǎng)API文檔、修改API的AK配置、Java代碼獲取定位等,需要的朋友可以參考下
    2024-11-11
  • SpringBoot如何訪問不同的數(shù)據(jù)庫的方法實(shí)現(xiàn)

    SpringBoot如何訪問不同的數(shù)據(jù)庫的方法實(shí)現(xiàn)

    本文主要介紹了在SpringBoot應(yīng)用中配置和管理多個(gè)數(shù)據(jù)源的方法,包括使用SpringBoot官方支持的配置方式和第三方庫實(shí)現(xiàn)多數(shù)據(jù)源配置,感興趣的可以了解一下
    2024-11-11
  • java開發(fā)Dubbo注解Adaptive實(shí)現(xiàn)原理

    java開發(fā)Dubbo注解Adaptive實(shí)現(xiàn)原理

    這篇文章主要為大家介紹了java開發(fā)Dubbo注解Adaptive實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Springboot項(xiàng)目javax.validation使用方法詳解

    Springboot項(xiàng)目javax.validation使用方法詳解

    這篇文章主要介紹了Springboot項(xiàng)目javax.validation使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

特克斯县| 天祝| 连江县| 红原县| 南丹县| 吉首市| 遂平县| 凌云县| 尤溪县| 景东| 白朗县| 二连浩特市| 罗定市| 肥东县| 榆社县| 贵州省| 松江区| 永靖县| 铜梁县| 黑河市| 甘洛县| 福建省| 衡东县| 延边| 通城县| 二手房| 禹州市| 岳普湖县| 周至县| 西乌珠穆沁旗| 通许县| 汉中市| 文水县| 横峰县| 广南县| 鸡泽县| 灌南县| 醴陵市| 清远市| 武安市| 湖州市|