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

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

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

什么是mybatis

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

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

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

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

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

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

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

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

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

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

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

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ù)庫(kù)表

用戶表

賬戶表

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ù)庫(kù)表

用戶表

賬戶表

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):

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

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

都通過(guò)column來(lái)傳遞參數(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ù)庫(kù)表

用戶表

角色表

中間表

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ù)庫(kù)表

用戶表

老師表

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運(yùn)行shell腳本方法示例

    java運(yùn)行shell腳本方法示例

    利用Runtime.execute方法,我們可以在Java程序中運(yùn)行Linux的Shell腳本,或者執(zhí)行其他程序
    2013-12-12
  • java int類型二維數(shù)組實(shí)現(xiàn)“楊輝三角”的完整實(shí)例

    java int類型二維數(shù)組實(shí)現(xiàn)“楊輝三角”的完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于java int類型二維數(shù)組實(shí)現(xiàn)“楊輝三角”的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java webSerivce的使用看完你就明白了

    Java webSerivce的使用看完你就明白了

    因?yàn)榍岸螘r(shí)間,需要使用到webService來(lái)調(diào)用公司的其他系統(tǒng)api接口,但是請(qǐng)求方式和我熟知的http請(qǐng)求不一樣,是基于soap協(xié)議來(lái)傳輸xml數(shù)據(jù)格式,請(qǐng)求的參數(shù)極其復(fù)雜,需要封裝多層xml數(shù)據(jù)格式,并且我不知道對(duì)方的api接口是什么語(yǔ)言,甚至不知道他們存在于什么平臺(tái)
    2022-03-03
  • SpringMvc請(qǐng)求處理參數(shù)?和?響應(yīng)數(shù)據(jù)處理的示例詳解

    SpringMvc請(qǐng)求處理參數(shù)?和?響應(yīng)數(shù)據(jù)處理的示例詳解

    這篇文章主要介紹了SpringMvc請(qǐng)求處理參數(shù)和響應(yīng)數(shù)據(jù)處理,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 秒懂Kotlin之Java工程師快速掌握Kotlin的技巧

    秒懂Kotlin之Java工程師快速掌握Kotlin的技巧

    Kotlin 是一種在 Java 虛擬機(jī)上運(yùn)行的靜態(tài)類型編程語(yǔ)言,被稱之為 Android 世界的Swift,由 JetBrains 設(shè)計(jì)開發(fā)并開源。這篇文章主要介紹了秒懂Kotlin之Java工程師快速掌握Kotlin的技巧,需要的朋友可以參考下
    2021-09-09
  • Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例

    Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例

    本篇文章主要介紹了Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • spring security獲取用戶信息為null或者串值的解決

    spring security獲取用戶信息為null或者串值的解決

    這篇文章主要介紹了spring security獲取用戶信息為null或者串值的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java中POST、GET、@RequestBody和@RequestParam區(qū)別詳析

    Java中POST、GET、@RequestBody和@RequestParam區(qū)別詳析

    在前后端傳json數(shù)據(jù)進(jìn)行交互的時(shí)候,同學(xué)們會(huì)經(jīng)常用到的兩個(gè)注解,@RequestBody和@RequestParam主要是用來(lái)接收前端傳給后端的json數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java中POST、GET、@RequestBody和@RequestParam區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 淺談Java枚舉的作用與好處

    淺談Java枚舉的作用與好處

    下面小編就為大家?guī)?lái)一篇淺談Java枚舉的作用與好處。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • SpringBoot管理RabbitMQ中的Channel詳解

    SpringBoot管理RabbitMQ中的Channel詳解

    這篇文章主要介紹了SpringBoot管理RabbitMQ中的Channel詳解,channel僅存在于connection的上下文中,而不會(huì)單獨(dú)存在,當(dāng)channel關(guān)閉時(shí),其上的所有channel也會(huì)關(guān)閉,需要的朋友可以參考下
    2023-08-08

最新評(píng)論