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

MyBatis的注解使用、ORM層優(yōu)化方式(懶加載和緩存)

 更新時間:2021年10月09日 10:28:17   作者:bamzhy13  
這篇文章主要介紹了MyBatis的注解使用、ORM層優(yōu)化方式(懶加載和緩存),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Mybatis注解

  • 查找
@Select( "SELECT * FROM tt_user WHERE username Like #{id};")
User findUserByName(String name);

<!--以map為輸入?yún)?shù)查找-->
@Select("select * from tt_user where username= #{name} and  password=#{pass}")
User findUserByUsernameAndPassword(HashMap map);
  • 插入
@Insert("insert into tt_user values (#{id},#{username},#{password},#{email},#{age})")
int AddUser(User user) throws IOException;
  • 更改
@Update("update tt_user set username = #{username} where id = #{id}")
void updateUserById(User user);
  • 刪除
@Delete("delete from tt_user where id =#{id}")
void deleteUserById(String id);

動態(tài)SQL語句

@SelectProvider(type = UserDaoSqlProvider.class,method = "findUserByName")
List<User> findUserByName(String username) throws IOException;
    public String findUserByName(String username){
        //return  "select * from tt_user where username like '" +username+"'";
        String sql = new SQL() {{
            SELECT("*");
            FROM("tt_user");
            if (username!=null&&!username.isEmpty()){
                WHERE("username like "+username );
            }
        }}.toString();
        System.out.println("sql="+sql);
        return sql;
}

Mybatis提供了一個匿名內(nèi)部類

這里寫圖片描述

另一種寫法:

    public String getxxx(){

       return new SQL().UPDATE("PERSON")
                 .SET("FULL_NAME = #{fullName}", "DATE_OF_BIRTH = #{dateOfBirth}")
                 .WHERE("ID = #{id}")
                 .toString();
    }
}

Mybatis對ORM層的優(yōu)化

緩存

查了一次,結(jié)果保存在本地,下次查相同內(nèi)容的時候就不用再去訪問數(shù)據(jù)庫了。

懶加載

Lazyloading:先加載主信息,在需要的時候再去加載關(guān)聯(lián)數(shù)據(jù)

Mybatis中ResultMap中的association和Collection標簽具有懶加載的功能

  • 默認情況沒有懶加載
  • 如何開啟懶加載呢?

在主配置文件中的configuration標簽下配置

    <!--全局懶加載-->
    <settings>
        <!--開關(guān)-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
  • 局部懶加載配置

在從配置文件中的association或者collection里邊添加fetchType字段(fetch翻譯是拿、取)

    <resultMap id="studentAndCourses" type="com.bamzhy.bean.Student">
        <id column="id" property="id"></id>
        <collection property="courses"
                    javaType="list"
                    select="com.bamzhy.dao.UserDao.findcourseBySid"
                    column="id"
                    fetchType="eager">
            <id column="cid" property="cid"></id>
        </collection>
    </resultMap>
  • 全局懶加載和局部懶加載同時出現(xiàn)時,以局部懶加載優(yōu)先

MyBatis緩存機制

這里寫圖片描述

  • 一級緩存指的就是sqlsession,在sqlsession中有一個數(shù)據(jù)區(qū)域,是map結(jié)構(gòu),這個區(qū)域就是一級緩存區(qū)域。
  • 查詢同一個對象(使用同一個session)時,第二次查詢并不會調(diào)用sql語句,而是從sqlsession中取數(shù)據(jù)。
  • 開啟一級緩存:默認開啟
  • 驗證一級緩存存在

這里寫圖片描述

我查了兩次,但是只執(zhí)行了一次sql語句

這里寫圖片描述

現(xiàn)在在第一次查詢結(jié)束后關(guān)閉sqlSession,再重新new一個session出來,

這里寫圖片描述

執(zhí)行查詢

這里寫圖片描述

果然,sql語句被執(zhí)行了兩次,可以證明一級緩存的確存在

二級緩存

二級緩存指的就是同一個namespace下的mapper,二級緩存中,也有一個map結(jié)構(gòu),這個區(qū)域就是二級緩存區(qū)域。

  • 開啟二級緩存

主配置文件里邊:

這里寫圖片描述 從配置文件: 這里寫圖片描述

注意點 cache對象需要實現(xiàn)序列化接口,否則會報Error serializing object

  • 測試二級緩存

這里寫圖片描述

雖然我關(guān)閉了sqlsession,但仍然沒有執(zhí)行兩次sql。

這里寫圖片描述

說明二級緩存的確存在

  • 如果不關(guān)閉一級緩存,那么二級緩存就不生效。

比如我創(chuàng)建了一個sqlsession,不關(guān)閉,再創(chuàng)建一個sqlsession,那么二級緩存看見第一個sqlsession沒有關(guān)閉(一級緩存生效了),二級緩存他就不生效了。事實上這倆session不是同一個session,二級緩存也沒生效,這樣要執(zhí)行兩次sql語句。

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

相關(guān)文章

  • SpringBoot使用Interceptor攔截器的實例

    SpringBoot使用Interceptor攔截器的實例

    這篇文章主要介紹了SpringBoot使用Interceptor攔截器的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 分享Spring Boot 3.x微服務(wù)升級歷程

    分享Spring Boot 3.x微服務(wù)升級歷程

    Spring Boot 3.0.0 GA版已經(jīng)發(fā)布,好多人也開始嘗試升級,有人測試升級后,啟動速度確實快了不少,這篇文章主要介紹了Spring Boot 3.x微服務(wù)升級經(jīng)歷,需要的朋友可以參考下
    2022-12-12
  • 淺析java 歸并排序算法

    淺析java 歸并排序算法

    這篇文章主要簡單介紹了java 歸并排序算法的工作原理及代碼,需要的朋友可以參考下
    2015-02-02
  • java定時任務(wù)cron表達式每周執(zhí)行一次的坑及解決

    java定時任務(wù)cron表達式每周執(zhí)行一次的坑及解決

    這篇文章主要介紹了java定時任務(wù)cron表達式每周執(zhí)行一次的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot?Application核心注解詳解

    SpringBoot?Application核心注解詳解

    進入到@SpringBootApplication的源碼,可以看到里面組合了三個我們感興趣的注解@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration,我們一一分析這三個注解
    2022-10-10
  • 深入分析Spring Cloud 負載均衡器架構(gòu)選型

    深入分析Spring Cloud 負載均衡器架構(gòu)選型

    文章詳細介紹了OpenFeign的初始化和執(zhí)行流程,包括FeignClient注解、FeignClientsRegistrar類、FeignClientFactoryBean工廠類、Targeter接口及其實現(xiàn)等,感興趣的朋友一起看看吧
    2024-12-12
  • Java 刪除文件及文件夾刪除不了的解決

    Java 刪除文件及文件夾刪除不了的解決

    這篇文章主要介紹了Java 刪除文件及文件夾刪除不了的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • mysql+spring+mybatis實現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置

    mysql+spring+mybatis實現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置

    今天小編就為大家分享一篇關(guān)于mysql+spring+mybatis實現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • SpringBoot中Tomcat配置的示例代碼

    SpringBoot中Tomcat配置的示例代碼

    本文分享了在SpringBoot項目中配置Tomcat的一些心得和經(jīng)驗,包括Tomcat版本選擇、調(diào)整配置參數(shù)、自定義連接器、監(jiān)控和日志管理等方面,通過這些配置,可以有效提升應(yīng)用的性能、響應(yīng)速度和并發(fā)處理能力
    2024-11-11
  • SpringBoot Mybatis Plus公共字段自動填充功能

    SpringBoot Mybatis Plus公共字段自動填充功能

    這篇文章主要介紹了SpringBoot Mybatis Plus公共字段自動填充功能的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論

稻城县| 衡山县| 建平县| 霍邱县| 阿鲁科尔沁旗| 宕昌县| 出国| 孝感市| 华蓥市| 罗江县| 德惠市| 深州市| 城口县| 玉溪市| 乡城县| 奉节县| 盘山县| 孙吴县| 余江县| 洪泽县| 岢岚县| 康马县| 凤凰县| 本溪市| 甘泉县| 浙江省| 博罗县| 沙坪坝区| 彰武县| 汨罗市| 浙江省| 隆安县| 贡山| 固始县| 云浮市| 威远县| 建瓯市| 太白县| 准格尔旗| 铜鼓县| 双流县|