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

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

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

前言

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

1、遇到的問(wèn)題:

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

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

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

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

2、先上結(jié)論:

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

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

代碼改為如下,問(wè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<Map<String,String>> getPermissionByUserRole(Integer roleId);

打印的sql語(yǔ)句:

3、mybatis的基本原理:

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

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

MyBatis的主要成員

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

MappedStatement對(duì)象

我們?cè)赬ML或mapper文件中定義的sql語(yǔ)句等,會(huì)在初始化的時(shí)候加載到內(nèi)存中,以Map對(duì)象的形式存儲(chǔ),后續(xù)需要使用的時(shí)候,根據(jù)key來(lái)獲取

 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    通過(guò)RedisTemplate連接多個(gè)Redis過(guò)程解析

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

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

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

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

    錄音文件為silk格式,說(shuō)是silk其實(shí)是base64加密后的webm格式,只需將其轉(zhuǎn)為webm格式即可。但是在處理過(guò)程中遇到各種坑,下面小編給大家?guī)?lái)了微信小程序錄音文件格式silk遇到的問(wèn)題及解決方法,感興趣的朋友一起看看吧
    2018-09-09
  • SpringBoot接收參數(shù)所有方式總結(jié)

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

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

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

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

    詳細(xì)易懂帶你了解Spring中的注解

    這篇文章主要介紹了詳細(xì)易懂帶你了解Spring中的注解,Spring的一個(gè)核心是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è)中是用的頻率越來(lái)越高。本文主要為大家介紹了Springboot 2.x集成kafka 2.2.0的示例代碼,需要的可以參考一下
    2022-04-04
  • IDEA2020配置Git的方法步驟

    IDEA2020配置Git的方法步驟

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

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

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

最新評(píng)論

五大连池市| 庆元县| 潍坊市| 尤溪县| 孙吴县| 广东省| 巩留县| 晋江市| 嘉鱼县| 斗六市| 通化县| 许昌县| 雷山县| 绿春县| 香格里拉县| 常山县| 祁门县| 枞阳县| 柳河县| 馆陶县| 边坝县| 阿拉尔市| 巨鹿县| 白山市| 民丰县| 平定县| 德清县| 华安县| 化德县| 楚雄市| 鹤岗市| 堆龙德庆县| 金塔县| 奉节县| 亳州市| 和田县| 莒南县| 甘谷县| 鄄城县| 雷山县| 凉山|