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

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

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

前言

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

1、遇到的問題:

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

 // SysRoleMapper 
 // 通過菜單id連接查詢對應的權(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);

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

2、先上結(jié)論:

在使用@Results進行連接查詢的時候,應該使用實體類或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的基礎上封裝的,提供了方便強大的API,供用戶對數(shù)據(jù)庫操作;

MyBatis的主要成員

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

    Java selenium上傳文件的實現(xiàn)

    本文主要介紹了Java selenium上傳文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • 通過RedisTemplate連接多個Redis過程解析

    通過RedisTemplate連接多個Redis過程解析

    這篇文章主要介紹了通過RedisTemplate連接多個Redis過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • JVM調(diào)優(yōu)參數(shù)的設置

    JVM調(diào)優(yōu)參數(shù)的設置

    Java虛擬機的調(diào)優(yōu)是一個復雜而關(guān)鍵的任務,可以通過多種參數(shù)來實現(xiàn),本文就來介紹一下JVM調(diào)優(yōu)參數(shù)的設置,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 微信小程序錄音文件格式silk遇到的問題及解決方法

    微信小程序錄音文件格式silk遇到的問題及解決方法

    錄音文件為silk格式,說是silk其實是base64加密后的webm格式,只需將其轉(zhuǎn)為webm格式即可。但是在處理過程中遇到各種坑,下面小編給大家?guī)砹宋⑿判〕绦蜾浺粑募袷絪ilk遇到的問題及解決方法,感興趣的朋友一起看看吧
    2018-09-09
  • SpringBoot接收參數(shù)所有方式總結(jié)

    SpringBoot接收參數(shù)所有方式總結(jié)

    這篇文章主要介紹了SpringBoot接收參數(shù)所有方式總結(jié),文中通過代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • java實現(xiàn)折半排序算法

    java實現(xiàn)折半排序算法

    折半插入排序法,又稱二分插入排序法,是直接插入排序法的改良版,也需要執(zhí)行i-1趟插入,不同之處在于,第i趟插入,先找出第i+1個元素應該插入的的位置,假定前i個數(shù)據(jù)是已經(jīng)處于有序狀態(tài)。
    2015-04-04
  • 詳細易懂帶你了解Spring中的注解

    詳細易懂帶你了解Spring中的注解

    這篇文章主要介紹了詳細易懂帶你了解Spring中的注解,Spring的一個核心是IOC,是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用Spring注解方式或者Spring XML配置方式,需要的朋友可以參考下
    2023-08-08
  • Springboot 2.x集成kafka 2.2.0的示例代碼

    Springboot 2.x集成kafka 2.2.0的示例代碼

    kafka近幾年更新非???,也可以看出kafka在企業(yè)中是用的頻率越來越高。本文主要為大家介紹了Springboot 2.x集成kafka 2.2.0的示例代碼,需要的可以參考一下
    2022-04-04
  • IDEA2020配置Git的方法步驟

    IDEA2020配置Git的方法步驟

    這篇文章主要介紹了IDEA2020配置Git的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 排序算法的Java實現(xiàn)全攻略

    排序算法的Java實現(xiàn)全攻略

    這篇文章主要介紹了排序算法的Java實現(xiàn),包括Collections.sort()的使用以及各種經(jīng)典算法的Java代碼實現(xiàn)方法總結(jié),超級推薦!需要的朋友可以參考下
    2015-08-08

最新評論

黄龙县| 佛学| 利辛县| 松溪县| 黔南| 陵水| 泰和县| 兴文县| 英吉沙县| 宜城市| 论坛| 北川| 吴旗县| 那曲县| 张家港市| 三门峡市| 佛坪县| 子洲县| 昌邑市| 都匀市| 抚顺县| 伊通| 嘉义县| 桓仁| 曲阜市| 宜宾县| 永修县| 武夷山市| 南丰县| 贵南县| 定安县| 安徽省| 社会| 广元市| 富阳市| 开江县| 慈溪市| 治县。| 台南县| 观塘区| 阜南县|