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

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

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

mybatis執(zhí)行錯(cuò)誤但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()的形式。

封裝工具類

封裝一個(gè)類SqlSession工具類,用于生產(chǎn)SqlSession對象,下面的例子為了節(jié)省代碼將會(huì)使用我們封裝的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語句標(biāo)簽的id來精準(zhǔn)定位一條SQL語句。

從而實(shí)現(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是通過動(dòng)態(tài)代理的方式(sqlSession.getMapper(UserMapper.class))獲取mapper接口對象,通過調(diào)用mapper中的方法,實(shí)現(xiàn)發(fā)送SQL語句,這樣完全避免了通過實(shí)現(xiàn)Mapper接口的方式來直接執(zhí)行對應(yīng)的SQL語句。

總結(jié):通過Mapper接口發(fā)送SQL語句的方式就是MyBatis以代理的方式幫我們創(chuàng)建了接口的實(shí)現(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接口對象,再調(diào)用方法的形式發(fā)送SQL語句。

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

  • 使用Mapper接口編程可以消除SqlSession帶來的功能性代碼,提高代碼可讀性
  • 使用Mapper接口,是完全體現(xiàn)面向?qū)ο蟮恼Z言,更加體現(xiàn)業(yè)務(wù)的邏輯
  • 使用Mapper接口的方式,可以提前進(jìn)行代碼的錯(cuò)誤提示和檢驗(yàn),而直接使用SqlSession的方式,只有在代碼運(yùn)行時(shí)才會(huì)知道是否產(chǎn)生錯(cuò)誤

總結(jié)

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

相關(guān)文章

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

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

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

    如何通過Kaptcha在Web頁面生成驗(yàn)證碼

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

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

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

    深入淺析springsecurity入門登錄授權(quán)

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

    @RereshScope刷新的原理詳解

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

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

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

    Json字符串轉(zhuǎn)Java對象和List代碼實(shí)例

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

    Spring Boot應(yīng)用的極速部署腳本示例代碼

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

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

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

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

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

最新評論

兴文县| 彰化县| 雷波县| 开阳县| 泰宁县| 渝北区| 镇赉县| 郯城县| 长葛市| 虹口区| 惠来县| 温泉县| 隆化县| 柳河县| 岱山县| 武冈市| 永福县| 红河县| 汽车| 张家口市| 苏尼特左旗| 博野县| 巴林右旗| 东乌珠穆沁旗| 台东市| 六枝特区| 邯郸县| 娄烦县| 涿鹿县| 汉阴县| 琼中| 临潭县| 长白| 峨边| 峨眉山市| 当阳市| 佳木斯市| 成安县| 资中县| 白山市| 南岸区|