MyBatis的注解使用、ORM层优化方式(懒加载和缓存)
目录
- Mybatis注解
- Mybatis对ORM层的优化
- 缓存
- 懒加载
- MyBatis缓存机制
- 二级缓存
Mybatis注解
- 查找
@Select( "SELECT * FROM tt_user WHERE username Like #{id}; ")User findUserByName(String name); @Select("select * from tt_user where username= #{name} andpassword=#{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")ListfindUserByName(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层的优化
缓存
查了一次,结果保存在本地,下次查相同内容的时候就不用再去访问数据库了。
懒加载
Lazyloading:先加载主信息,在需要的时候再去加载关联数据
Mybatis中ResultMap中的association和Collection标签具有懒加载的功能
- 默认情况没有懒加载
- 如何开启懒加载呢?
- 局部懒加载配置
- 全局懒加载和局部懒加载同时出现时,以局部懒加载优先
MyBatis缓存机制
文章图片
- 一级缓存指的就是sqlsession,在sqlsession中有一个数据区域,是map结构,这个区域就是一级缓存区域。
- 查询同一个对象(使用同一个session)时,第二次查询并不会调用sql语句,而是从sqlsession中取数据。
- 开启一级缓存:默认开启
- 验证一级缓存存在
文章图片
我查了两次,但是只执行了一次sql语句
文章图片
现在在第一次查询结束后关闭sqlSession,再重新new一个session出来,
文章图片
执行查询
文章图片
果然,sql语句被执行了两次,可以证明一级缓存的确存在
二级缓存
二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是二级缓存区域。
- 开启二级缓存
文章图片
从配置文件:
文章图片
注意点 cache对象需要实现序列化接口,否则会报Error serializing object
- 测试二级缓存
文章图片
虽然我关闭了sqlsession,但仍然没有执行两次sql。
文章图片
说明二级缓存的确存在
- 如果不关闭一级缓存,那么二级缓存就不生效。
【MyBatis的注解使用、ORM层优化方式(懒加载和缓存)】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量