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

一次mybatis連接查詢遇到的坑實戰(zhàn)記錄

 更新時間:2020年12月09日 14:35:31   作者:Nicander  
這篇文章主要給大家介紹了關(guān)于一次mybatis連接查詢遇到的坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。本文主要介紹的是mybatis連接查詢遇到的一個坑以及解決方法,下面話不多說了,來一起看看詳細(xì)的介紹吧

1、遇到的問題:

通過角色I(xiàn)D獲取role_menu表中對應(yīng)的菜單id,再通過菜單id獲取菜單項的權(quán)限編碼 , 使用mybatis連接查詢,代碼如下

 // SysRoleMapper 
 // 通過菜單id連接查詢對應(yīng)的權(quán)限編碼
 @Select("select menu_id from sys_role_menu where role_id = #{roleId}")
 @Results({
 @Result(column = "menu_id",property = "permissionCode",
  one = @One(select = "com.project.system.mapper.SysMenuMapper.getPermissionCodeByMenuID"))
 })
 List<String> getPermissionByUserRole(Integer roleId);

	//連接查詢對象SysMenuMapper
	@Select("select permission_code from sys_menu where id = #{menuID}")
 String getPermissionCodeByMenuID(@Param("menuID") Integer menuID);

預(yù)想查詢出List,但返回的卻是**List ,而且打印出的sql語句里,也沒有執(zhí)行g(shù)etPermissionCodeByMenuID()**這個方法對應(yīng)的sql語句。

2、先上結(jié)論:

在使用@Results進(jìn)行連接查詢的時候,應(yīng)該使用實體類或Map對象來接受返回值。

由于自己水平有限,在調(diào)試源碼的過程中,沒有找到mybatis具體是如何處理連接查詢的,
個人猜想是mybatis有一個地方可以判斷返回的類型與sql語句的關(guān)系,如果不匹配直接不執(zhí)行這條sql語句,畫了太多時間,先mark下,后續(xù)再繼續(xù)研究。

代碼改為如下,問題解決;

 @Select("select menu_id from sys_role_menu where role_id = #{roleId}")
 @Results({
 @Result(column = "menu_id",property = "permissionCode",
  one = @One(select = "com.project.system.mapper.SysMenuMapper.getPermissionCodeByMenuID"))
 })
 List<Map<String,String>> getPermissionByUserRole(Integer roleId);

打印的sql語句:

3、mybatis的基本原理:

在過程中,通過調(diào)試源碼,看網(wǎng)上的一些資料,了解了一些mybatis框架和基本原理,這里做一個小的總結(jié):

Mybatis 是在JDBC的基礎(chǔ)上封裝的,提供了方便強大的API,供用戶對數(shù)據(jù)庫操作;

MyBatis的主要成員

  • Configuration            MyBatis所有的配置信息都保存在Configuration對象之中,配置文件中的大部分配置都會存儲到該類中
  • SqlSession               作為MyBatis工作的主要頂層API,表示和數(shù)據(jù)庫交互時的會話,完成必要數(shù)據(jù)庫增刪改查功能
  • Executor                    MyBatis執(zhí)行器,是MyBatis 調(diào)度的核心,負(fù)責(zé)SQL語句的生成和查詢緩存的維護(hù)
  • StatementHandler     封裝了JDBC Statement操作,負(fù)責(zé)對JDBC statement 的操作,如設(shè)置參數(shù)等
  • ParameterHandler     負(fù)責(zé)對用戶傳遞的參數(shù)轉(zhuǎn)換成JDBC Statement 所對應(yīng)的數(shù)據(jù)類型
  • ResultSetHandler      負(fù)責(zé)將JDBC返回的ResultSet結(jié)果集對象轉(zhuǎn)換成List類型的集合
  • TypeHandler             負(fù)責(zé)java數(shù)據(jù)類型和jdbc數(shù)據(jù)類型(也可以說是數(shù)據(jù)表列類型)之間的映射和轉(zhuǎn)換
  • MappedStatement     MappedStatement維護(hù)一條<select|update|delete|insert>節(jié)點的封裝
  • SqlSource                 負(fù)責(zé)根據(jù)用戶傳遞的parameterObject,動態(tài)地生成SQL語句,將信息封裝到BoundSql對象中,并返回
  • BoundSql                  表示動態(tài)生成的SQL語句以及相應(yīng)的參數(shù)信息

MappedStatement對象

我們在XML或mapper文件中定義的sql語句等,會在初始化的時候加載到內(nèi)存中,以Map對象的形式存儲,后續(xù)需要使用的時候,根據(jù)key來獲取

 key = "com.project.mapper.SysRoleMapper.getRole"
 value = {MappedStatement@11731} 
.....

參考:https://blog.csdn.net/luanlouis/article/details/40422941

總結(jié)

到此這篇關(guān)于mybatis連接查詢遇到的坑的文章就介紹到這了,更多相關(guān)mybatis連接查詢的坑內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java SpringBoot開發(fā)小技巧詳解

    Java SpringBoot開發(fā)小技巧詳解

    這篇文章主要介紹了淺談SpringBoot項目如何讓前端開發(fā)提高效率(小技巧),主要介紹了Swagger和Nginx提高效率的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 淺談spring注解之@profile

    淺談spring注解之@profile

    這篇文章主要介紹了淺談spring注解之@profile,@profile通過配置來改變參數(shù),這里整理的詳細(xì)的用法,有興趣的可以了解一下
    2017-10-10
  • SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應(yīng)用詳解

    SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應(yīng)用詳解

    這篇文章主要介紹了SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java封裝的概念和實現(xiàn)方法示例

    java封裝的概念和實現(xiàn)方法示例

    這篇文章主要介紹了java封裝的概念和實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了java封裝的概念、原理及相關(guān)使用技巧,需要的朋友可以參考下
    2019-11-11
  • IntelliJ IDEA安裝目錄和設(shè)置目錄的說明(IntelliJ IDEA快速入門)

    IntelliJ IDEA安裝目錄和設(shè)置目錄的說明(IntelliJ IDEA快速入門)

    這篇文章主要介紹了IntelliJ IDEA安裝目錄和設(shè)置目錄的說明(IntelliJ IDEA快速入門),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • InteliJ IDEA 設(shè)置eclipse快捷鍵 的圖文教程

    InteliJ IDEA 設(shè)置eclipse快捷鍵 的圖文教程

    本文通過圖文并茂的形式給大家介紹了InteliJ IDEA 設(shè)置eclipse快捷鍵 ,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下
    2018-06-06
  • Java編程實現(xiàn)的二維數(shù)組轉(zhuǎn)置功能示例

    Java編程實現(xiàn)的二維數(shù)組轉(zhuǎn)置功能示例

    這篇文章主要介紹了Java編程實現(xiàn)的二維數(shù)組轉(zhuǎn)置功能,結(jié)合實例形式分析了Java二維數(shù)組的遍歷、運算、賦值等實現(xiàn)轉(zhuǎn)置的相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • SpringMVC的注解@RequestMapping屬性及使用

    SpringMVC的注解@RequestMapping屬性及使用

    這篇文章主要為大家介紹了SpringMVC注解@RequestMapping屬性及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 淺談解決Hibernate懶加載的4種方式

    淺談解決Hibernate懶加載的4種方式

    這篇文章主要介紹了淺談解決Hibernate懶加載的4種方式,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 解決springboot集成rocketmq關(guān)于tag的坑

    解決springboot集成rocketmq關(guān)于tag的坑

    這篇文章主要介紹了解決springboot集成rocketmq關(guān)于tag的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論