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

mybatis執(zhí)行錯誤但sql執(zhí)行正常問題

 更新時間:2024年01月27日 14:49:10   作者:Aoeding  
這篇文章主要介紹了mybatis執(zhí)行錯誤但sql執(zhí)行正常問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

mybatis執(zhí)行錯誤但sql執(zhí)行正常

大概率是存在特殊字符使mybatis解析異常

1.在mapper.java中的方法上添加@SqlParser(filter=true)注解


在這里插入圖片描述

2.如果sql中有注釋,刪掉注釋


在這里插入圖片描述

mybatis執(zhí)行sql語句的兩種方式

SqlSession.mapper和SqlSession.selectXxx對比

MyBatis中有兩種SQL語句的執(zhí)行方式,如下:

  • 通過SqlSession發(fā)送SQL語句
  • 例如:sqlSession.slectone()的形式。
  • 通過SqlSession獲取Mapper接口,通過Mapper接口發(fā)送SQL語句
  • 例如:sqlSession.getMapper()的形式。

封裝工具類

封裝一個類SqlSession工具類,用于生產(chǎn)SqlSession對象,下面的例子為了節(jié)省代碼將會使用我們封裝的SqlSessionUtil工具類。

public class SqlSessionUtil {

    public static SqlSession getSqlSession(){
        SqlSession sqlSession = null;
        try {
            // 獲取核心配置文件的輸入流
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            // 獲取SqlSessionFactoryBuilder
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            // 獲取SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
            // 獲取SqlSession對象
            sqlSession = sqlSessionFactory.openSession(true);

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return sqlSession;
    }
}

創(chuàng)建Mapper映射文件

<mapper namespace="com.jingchao.mybatis.mapper.UserMapper">
    <select id="selectUserById" resultType="User">
        select * from t_user where id = #{id}
    </select>
</mapper>

創(chuàng)建Mapper接口

public interface UserMapper{
    User selectUserById(@Param("id") Integer id);
}

SqlSession發(fā)送SQL語句

selectOne方法表示查詢一條語句,通過String類型的命名空間加上Sql語句標簽的id來精準定位一條SQL語句。

從而實現(xiàn)SQL語句的發(fā)送。

SqlSession sqlSession = SqlSessionUtil.getSqlSession();
User user = sqlSession.selectOne("com.jingchao.mybatis.mapper.UserMapper.selectUserById", 1);

Mapper接口發(fā)送SQL語句

通過Mapper接口發(fā)送SQL是通過動態(tài)代理的方式(sqlSession.getMapper(UserMapper.class))獲取mapper接口對象,通過調用mapper中的方法,實現(xiàn)發(fā)送SQL語句,這樣完全避免了通過實現(xiàn)Mapper接口的方式來直接執(zhí)行對應的SQL語句。

總結:通過Mapper接口發(fā)送SQL語句的方式就是MyBatis以代理的方式幫我們創(chuàng)建了接口的實現(xiàn)類

SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);

兩種方式的對比

通過SqlSession發(fā)送SQL語句

不需要定義mapper(dao)接口,可以直接通過“ 命名空間 + id ”的方式發(fā)送SQL語句

通過SqlSession獲取Mapper接口,再通過Mapper接口發(fā)送SQL語句

需要定義mapper接口,并在接口中定義抽象方法,通過獲取mapper接口對象,再調用方法的形式發(fā)送SQL語句。

說明:建議使用Mapper接口發(fā)送SQL語句的方式,理由如下:

  • 使用Mapper接口編程可以消除SqlSession帶來的功能性代碼,提高代碼可讀性
  • 使用Mapper接口,是完全體現(xiàn)面向對象的語言,更加體現(xiàn)業(yè)務的邏輯
  • 使用Mapper接口的方式,可以提前進行代碼的錯誤提示和檢驗,而直接使用SqlSession的方式,只有在代碼運行時才會知道是否產(chǎn)生錯誤

總結

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

相關文章

  • springboot 加載 META-INF/spring.factories方式

    springboot 加載 META-INF/spring.factories方式

    這篇文章主要介紹了springboot 加載 META-INF/spring.factories方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 如何通過Kaptcha在Web頁面生成驗證碼

    如何通過Kaptcha在Web頁面生成驗證碼

    這篇文章主要介紹了如何通過Kaptcha在Web頁面生成驗證碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java封裝數(shù)組實現(xiàn)在數(shù)組中查詢元素和修改元素操作示例

    Java封裝數(shù)組實現(xiàn)在數(shù)組中查詢元素和修改元素操作示例

    這篇文章主要介紹了Java封裝數(shù)組實現(xiàn)在數(shù)組中查詢元素和修改元素操作,結合實例形式分析了java針對數(shù)組元素查詢、修改的封裝操作實現(xiàn)技巧,需要的朋友可以參考下
    2020-03-03
  • 深入淺析springsecurity入門登錄授權

    深入淺析springsecurity入門登錄授權

    SpringSecurity為我們提供了基于注解的權限控制方案,這也是我們項目中主要采用的方式,我們可以使用注解去指定訪問對應的資源所需的權限,這篇文章主要介紹了springsecurity入門登錄授權,需要的朋友可以參考下
    2024-05-05
  • @RereshScope刷新的原理詳解

    @RereshScope刷新的原理詳解

    在配合配置中心修改配置讓應用自動刷新配置時,我們要在需要感知配置變化的bean上面加上@RereshScope。如果我們不加上這注解,那么有可能無法完成配置自動刷新。本文就來和大家講講@RereshScope刷新的原理,需要的可以參考一下
    2022-12-12
  • SpringCloud @RefreshScope注解源碼層面深入分析

    SpringCloud @RefreshScope注解源碼層面深入分析

    @RefreshScope注解能幫助我們做局部的參數(shù)刷新,但侵入性較強,需要開發(fā)階段提前預知可能的刷新點,并且該注解底層是依賴于cglib進行代理的,所以不要掉入cglib的坑,出現(xiàn)刷了也不更新情況
    2023-04-04
  • Json字符串轉Java對象和List代碼實例

    Json字符串轉Java對象和List代碼實例

    這篇文章主要介紹了Json字符串轉Java對象和List代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Spring Boot應用的極速部署腳本示例代碼

    Spring Boot應用的極速部署腳本示例代碼

    最近在工作中遇到了一個問題,需要極速的部署Spring Boot應用,發(fā)現(xiàn)網(wǎng)上這方面的資料較少,所以自己來總結下,這篇文章主要給大家介紹了關于Spring Boot應用的極速部署腳本的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • SpringBoot實現(xiàn)圖形驗證碼的示例代碼

    SpringBoot實現(xiàn)圖形驗證碼的示例代碼

    驗證碼的實現(xiàn)方式有很多,可以由前端實現(xiàn),也可以由后端進行實現(xiàn),也有很多的插件和工具包可以使用,在這里,我們使用 Hutool 提供的小工具實現(xiàn),本文介紹SpringBoot實現(xiàn)圖形驗證碼的實例,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • java常見log日志的使用方法解析

    java常見log日志的使用方法解析

    本文主要介紹了java常見log日志的使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07

最新評論

五寨县| 双鸭山市| 怀集县| 酉阳| 科尔| 凉山| 石林| 当涂县| 夏津县| 田东县| 河间市| 翁牛特旗| 会昌县| 垣曲县| 镇安县| 务川| 托克逊县| 黄浦区| 无极县| 茶陵县| 乌拉特前旗| 喀喇| 昭通市| 眉山市| 平泉县| 江门市| 赫章县| 故城县| 即墨市| 塔河县| 巴东县| 新昌县| 怀宁县| 乌苏市| 绥江县| 穆棱市| 辽宁省| 甘南县| 会理县| 临泽县| 莎车县|