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

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

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

什么是mybatis

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

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

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

Mybaits 的優(yōu)點:

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

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

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

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

Mybatis是如何進行分頁的?分頁插件的原理是什么?

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

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

1、一對一查詢(例一個用戶一個賬戶)

1.1、實體類

//用戶實體
@Data
public class UserInfo {

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


//賬戶實體
@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、一對多查詢(例一個用戶對應(yīng)多個賬戶)

2.1、實體類

//用戶實體
@Data
public class UserInfo {

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

//賬戶實體
@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):提取方式為延遲加載,默認是立即加載
 @Select("select * from account where a_id=#{a_id}")
    public   Account   findById (int a_id);
    

3、總結(jié)

共同點:

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

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

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

不同點:

一對一,那么附屬方法返回的是一個單獨的對象

一對多,那么附屬方法返回的是一個對象集合

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

4.1、實體類

//用戶實體
@Data
public class UserInfo {

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

//角色實體
@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、多對一(一個用戶對應(yīng)多個老師)

5.1 實體類

//用戶實體
@Data
public class UserInfo {

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

//老師實體
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實現(xiàn)多表查詢的文章就介紹到這了,更多相關(guān)springboot整和mybatis多表查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java運行shell腳本方法示例

    java運行shell腳本方法示例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    淺談Java枚舉的作用與好處

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

    SpringBoot管理RabbitMQ中的Channel詳解

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

最新評論