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

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

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

什么是mybatis

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

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

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

Mybaits 的優(yōu)點:

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

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

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

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

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

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

下面將詳細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、數據庫表

用戶表

賬戶表

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、一對多查詢(例一個用戶對應多個賬戶)

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、數據庫表

用戶表

賬戶表

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、總結

共同點:

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

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

都通過column來傳遞參數給附屬方法。

不同點:

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

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

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、數據庫表

用戶表

角色表

中間表

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、多對一(一個用戶對應多個老師)

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、數據庫表

用戶表

老師表

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

總結

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

相關文章

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

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

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

    Java實現int、long、Integer、Long之間的相互轉換

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

    Java中的Semaphore信號量詳解

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

    idea2023.3安裝及配置詳細圖文教程

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

    java實現快速排序圖文詳解

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

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

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

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

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

    SpringBoot如何訪問不同的數據庫的方法實現

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

    java開發(fā)Dubbo注解Adaptive實現原理

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

    Springboot項目javax.validation使用方法詳解

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

最新評論

阿瓦提县| 林甸县| 洪泽县| 新余市| 诏安县| 宁津县| 汉阴县| 济宁市| 北票市| 漯河市| 库伦旗| 垫江县| 拜泉县| 瑞安市| 高雄县| 河东区| 江北区| 米泉市| 杨浦区| 嵊泗县| 福清市| 长兴县| 城市| 黄平县| 罗定市| 揭东县| 永新县| 青阳县| 香格里拉县| 青冈县| 陆川县| 石景山区| 儋州市| 黄骅市| 淄博市| 拉萨市| 社会| 建水县| 临桂县| 宜君县| 鄯善县|