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

mybatis執(zhí)行任意SQL問題

 更新時間:2026年05月18日 08:39:29   作者:continentlu  
文章主要介紹了使用MyBatis執(zhí)行任意SQL的方法,包括聲明接口、使用注解調(diào)用等步驟,并提到嘗試使用泛型進行結(jié)果集處理時遇到的問題,最后給出一種改進后的解決方案

mybatis執(zhí)行任意SQL

一、用一個方法可靈活方便執(zhí)任意自定義SQL

不需要在XML或接口中聲明,以下是實現(xiàn),采用注解,XML沒測試,應該類似。

1、聲明一個接口,里面包括一個超級SQL方法

public interface SqlDao{
	@Select("${sql}")
    List<LinkedHashMap<String,Object>> 	sql(String sql,@Param("param") Map<String,Object> param);
}

2、調(diào)用

Map<String,Object>  params = new HashMap<>();
//這里可加任意多參數(shù),與SQL中對應
params.put("id","xxx");
List<LinkedHashMap<String,Object>> result = medicineboxDao.sql("select * from DevLog where id =#{param.id}",params);

二、進一步改進時發(fā)現(xiàn)怪異的現(xiàn)象

因嘗試采用泛型作為結(jié)果轉(zhuǎn)型 ,這樣在查詢后通過泛型定義可獲得具體的類型 ,可是結(jié)果卻出人意料,但又不報錯,希望有高手能指點下。代碼如下

1、先改造上面的接口方法為泛型。

public interface SqlDao{
 @Select("${sql}")
 	<S> List<S> sql2(String sql,@Param("param") Map<String,Object> param);
 }
   
//調(diào)用
List<DevLog> o2 = medicineboxDao.sql2("select * from DevLog where id =#{param.id}",params); 

執(zhí)行不報錯,但獲得的結(jié)果卻是結(jié)果集有多個時只有一條數(shù)據(jù),并且只有第一個字段的值。

當嘗試獲得集合里面的類時,報類轉(zhuǎn)換異常。

//System.out.println(o2.get(0).getClass());當獲得結(jié)果的CLASS對象時,報錯了

沒有跟進MYBATIS相關的源碼,猜測是數(shù)據(jù)轉(zhuǎn)換方面沒有識別好。

三、繼續(xù)改進,實現(xiàn)泛型轉(zhuǎn)換

改造接口為如下:

 @Select({"${sql}"})
    default <S> List<S> sqlFromObject(String sql,@Param("param") Map<String,Object> param,Class<S> sc){
        final List<S> lis = new ArrayList<>();
        this.generalSql(sql, param, (ResultHandler<S>) resultContext -> {
            try {
                S s = sc.newInstance();
                //采用cglib BeanCopier,性能強勁
               //bean map拷貝
                BeanMap beanMap = BeanMap.create(s);
                beanMap.putAll((Map)resultContext.getResultObject());
                lis.add(s);
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return lis;
    };

    @Select({"${sql}"})
    @ResultType(LinkedHashMap.class)
    <S> void generalSql(String sql, @Param("param") Map<String,Object> param, ResultHandler<S> handler) ;

然后調(diào)用:

 List<DevLog> o2 = medicineboxDao.sqlFromObject("select * from DevLog where id <>#{param.id}",params,DevLog.class);

還算完美吧??!

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • List調(diào)用toString()方法后,去除兩頭的中括號實例

    List調(diào)用toString()方法后,去除兩頭的中括號實例

    下面小編就為大家?guī)硪黄狶ist調(diào)用toString()方法后,去除兩頭的中括號實例。希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-03-03
  • 詳解Spring中使用@within與@target的區(qū)別

    詳解Spring中使用@within與@target的區(qū)別

    這篇文章主要介紹了Spring中使用@within與@target的一些區(qū)別,本文通過項目案例給大家詳細分析,給大家介紹的非常詳細,代碼簡單易懂,需要的朋友可以參考下
    2021-09-09
  • java打成jar后,獲取resources下的文件資源問題及解決

    java打成jar后,獲取resources下的文件資源問題及解決

    作者在寫代碼時遇到一個問題:在將項目打包成jar包后,無法通過常規(guī)方式獲取resources文件夾下的資源,通過分析原因,作者找到了一種新的解決方案,即通過類加載器獲取jar包內(nèi)的資源,此方式返回后的資源以文件流的形式返回,作者將其轉(zhuǎn)換為了byte[]的形式使用
    2026-05-05
  • 在CentOS系統(tǒng)中檢測Java安裝及運行jar應用的方法

    在CentOS系統(tǒng)中檢測Java安裝及運行jar應用的方法

    這篇文章主要介紹了在CentOS系統(tǒng)中檢測Java安裝及運行jar應用的方法,同樣適用于Fedora等其他RedHat系的Linux系統(tǒng),需要的朋友可以參考下
    2015-06-06
  • Java實現(xiàn)汽車租賃系統(tǒng)

    Java實現(xiàn)汽車租賃系統(tǒng)

    這篇文章介紹了Java實現(xiàn)汽車租賃系統(tǒng)的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Java動態(tài)代理簡單介紹

    Java動態(tài)代理簡單介紹

    動態(tài)代理指的是,代理類和目標類的關系在程序運行的時候確定的,客戶通過代理類來調(diào)用目標對象的方法,是在程序運行時根據(jù)需要動態(tài)的創(chuàng)建目標類的代理對象。本文將通過案例詳細講解一下Java動態(tài)代理的原理及實現(xiàn),需要的可以參考一下
    2022-08-08
  • 學會CompletableFuture輕松駕馭異步編程

    學會CompletableFuture輕松駕馭異步編程

    這篇文章主要為大家介紹了CompletableFuture輕松駕馭異步編程教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • java常見的序列化方式

    java常見的序列化方式

    這篇文章主要為大家詳細介紹了java中兩種常見的序列化方式,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java中File文件操作類的超詳細使用教程

    Java中File文件操作類的超詳細使用教程

    File類在包java.io.File下、代表操作系統(tǒng)的文件對象(文件、文件夾),File類提供了諸如:定位文件,獲取文件本身的信息、刪除文件、創(chuàng)建文件(文件夾)等功能,下面這篇文章主要給大家介紹了關于Java中File文件操作類的超詳細使用教程,需要的朋友可以參考下
    2023-01-01
  • Java對象轉(zhuǎn)換的實現(xiàn)方式匯總

    Java對象轉(zhuǎn)換的實現(xiàn)方式匯總

    這篇文章主要介紹了Java對象轉(zhuǎn)換的多種實現(xiàn)方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04

最新評論

林口县| 五莲县| 榆社县| 大兴区| 六盘水市| 耿马| 石景山区| 湖南省| 屯留县| 全椒县| 汕头市| 彭泽县| 双江| 高青县| 湖南省| 娱乐| 东兴市| 洮南市| 东阿县| 元朗区| 天气| 静安区| 九台市| 修水县| 龙岩市| 田林县| 登封市| 淮南市| 通辽市| 鄂伦春自治旗| 南宁市| 香河县| 伽师县| 新密市| 巴林左旗| 开鲁县| 河东区| 宁南县| 中牟县| 杭锦旗| 武定县|