一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - MyBatis的注解使用、ORM層優化方式(懶加載和緩存)

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

2022-02-12 15:46bamzhy13 Java教程

這篇文章主要介紹了MyBatis的注解使用、ORM層優化方式(懶加載和緩存),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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);

動態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提供了一個匿名內部類

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

另一種寫法:

  public String getxxx(){

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

 

Mybatis對ORM層的優化

緩存

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

懶加載

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

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

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

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

  <!--全局懶加載-->
  <settings>
      <!--開關-->
      <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>
  • 全局懶加載和局部懶加載同時出現時,以局部懶加載優先

MyBatis緩存機制

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

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

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

我查了兩次,但是只執行了一次sql語句

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

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

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

執行查詢

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

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

二級緩存

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

  • 開啟二級緩存

主配置文件里邊:

MyBatis的注解使用、ORM層優化方式(懶加載和緩存) 從配置文件: MyBatis的注解使用、ORM層優化方式(懶加載和緩存)

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

  • 測試二級緩存

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

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

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

說明二級緩存的確存在

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

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

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

原文鏈接:https://blog.csdn.net/qq_37366958/article/details/79946193

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产未成女年一区二区 | 操动漫美女视频 | 亚洲免费小视频 | gay 男同志被捆绑茎 | 皇上撞着太子妃的秘密小说 | 男人摸女人下面 | 白丝超短裙被输出娇喘不停小说 | 日本无卡视频 | 97国产蝌蚪视频在线观看 | 欧美视频在线一区二区三区 | 亚洲+国产+图片 | 丁香六月色婷婷综合网 | 国产精品免费精品自在线观看 | 亚洲免费视频播放 | 香蕉久久久久久狠狠色 | 国产成人毛片 | 男人操女人视频 | naruto tube18动漫| 亚洲AV无码乱码国产麻豆穿越 | 秋葵丝瓜茄子草莓榴莲樱桃 | 国产日韩欧美 | 久久性生大片免费观看性 | 色琪琪久久se色 | 欧美一级艳片视频免费观看 | 40分钟在线观看免费 | 日韩免费高清专区 | 性刺激欧美三级在线现看中文 | 91噜噜噜在线观看 | 日韩中文字幕网站 | 国产精品永久免费自在线观看 | 美女被扒开屁股进去网 | 九九九九九九精品免费 | 欧美午夜视频一区二区三区 | 四虎成人永久地址 | 色涩导航| 精品一久久香蕉国产线看观 | 91韩国女主播 | 俄罗斯美女破苞 | 女人是男人的未来1分49分 | 袖珍人与大黑人性视频 | 麻豆性视频 |