亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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為輸入參數查找-->
@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提供了一個匿名內部類

這里寫圖片描述

另一種寫法:

    public String getxxx(){

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

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

緩存

查了一次,結果保存在本地,下次查相同內容的時候就不用再去訪問數據庫了。

懶加載

Lazyloading:先加載主信息,在需要的時候再去加載關聯數據

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

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

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

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

在從配置文件中的association或者collection里邊添加fetchType字段(fetch翻譯是拿、?。?/p>

    <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>
  • 全局懶加載和局部懶加載同時出現時,以局部懶加載優(yōu)先

MyBatis緩存機制

這里寫圖片描述

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

這里寫圖片描述

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

這里寫圖片描述

現在在第一次查詢結束后關閉sqlSession,再重新new一個session出來,

這里寫圖片描述

執(zhí)行查詢

這里寫圖片描述

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

二級緩存

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

  • 開啟二級緩存

主配置文件里邊:

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

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

  • 測試二級緩存

這里寫圖片描述

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

這里寫圖片描述

說明二級緩存的確存在

  • 如果不關閉一級緩存,那么二級緩存就不生效。

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

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

相關文章

  • POI導出Excel報錯No such file or directory的解決方法

    POI導出Excel報錯No such file or directory的解決方法

    這篇文章主要為大家詳細介紹了POI導出Excel報錯No such file or directory的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java中的深拷貝和淺拷貝介紹

    Java中的深拷貝和淺拷貝介紹

    對象拷貝(Object Copy)就是將一個對象的屬性拷貝到另一個有著相同類類型的對象中去。在程序中拷貝對象是很常見的,主要是為了在新的上下文環(huán)境中復用對象的部分或全部 數據。Java中有三種類型的對象拷貝:淺拷貝(Shallow Copy)、深拷貝(Deep Copy)、延遲拷貝(Lazy Copy)
    2014-03-03
  • Java中String字符串常量池和intern方法源碼分析

    Java中String字符串常量池和intern方法源碼分析

    在之前的文章中,小編給大家介紹了String字符串的不可變性及其實現原理,其中給大家提到了字符串常量池的概念,那么什么是常量池,String字符串與常量池有什么關系,本文給大家嘮嘮字符串常量池及String#intern()方法的作用,需要的朋友可以參考下
    2023-05-05
  • Java多態(tài)(動力節(jié)點Java學院整理)

    Java多態(tài)(動力節(jié)點Java學院整理)

    多態(tài)是指允許不同類的對象對同一消息做出響應。即同一消息可以根據發(fā)送對象的不同而采用多種不同的行為方式。接下來通過本文給大家介紹java多態(tài)相關知識,感興趣的朋友一起學習吧
    2017-04-04
  • Java(JDK/Tomcat/Maven)運行環(huán)境配置及工具(idea/eclipse)安裝詳細教程

    Java(JDK/Tomcat/Maven)運行環(huán)境配置及工具(idea/eclipse)安裝詳細教程

    這篇文章主要介紹了Java(JDK/Tomcat/Maven)運行環(huán)境配置及工具(idea/eclipse)安裝,本文給大家介紹的非常想詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • java poi導出excel時如何設置手動換行

    java poi導出excel時如何設置手動換行

    這篇文章主要介紹了java poi導出excel時如何設置手動換行,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 使用spring框架實現數據庫事務處理方式

    使用spring框架實現數據庫事務處理方式

    這篇文章主要介紹了使用spring框架實現數據庫事務處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java獲取版本號及字節(jié)碼編譯版本方法示例

    java獲取版本號及字節(jié)碼編譯版本方法示例

    這篇文章主要給大家介紹了關于java獲得版本號及字節(jié)碼編譯版本的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或使用java具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • 詳解用java描述矩陣求逆的算法

    詳解用java描述矩陣求逆的算法

    這篇文章主要介紹了用java描述矩陣求逆的算法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 學會Java字節(jié)碼指令,成為技術大佬

    學會Java字節(jié)碼指令,成為技術大佬

    Java 字節(jié)碼指令是 JVM 體系中非常難啃的一塊硬骨頭,我估計有些讀者會有這樣的疑惑,“Java 字節(jié)碼難學嗎?我能不能學會?。俊北疚膸ьI大家一探究竟,幫助大家搞懂java底層代碼如何執(zhí)行
    2021-08-08

最新評論