mybatis的懒加载和缓存

1.懒加载:需要多表查询的时候一般使用分步的单表查询,因为会比关联查询效率高,而分步单表查询的时候有时候不需要某些表的关联信息时,为了优化就可以配置懒加载,(通常将懒加载设置为false,也就是不懒加载,立即抓取)。

2.一级缓存:sqlsession级缓存(默认开启的缓存)

特点:在同一个sqlSession连接下,对同一个sql语句进行查询时,第一次需要执行查询语句,而以后再需要进行相同的查询时,不需要再次进行sql语句查询的操作。在两个相同sql查询语句期间,如果对该表进行增删改的操作(java语句操作),那么该表缓存会清空。(需要注意是同一个连接对同一条sql语句进行查询,比如查询id为10的用户信息,在不关闭连接且用相同SqlSession连接再次进行查询id为10的用户信息的时候,不需要从数据库中查询,可以直接从连接中得到结果,此时称为一级缓存)。

3.二级缓存:数据缓存在代理类mapper中,多个sqlSession共享。默认关闭的。需要配置。

使用的缓存框架 ehcache. 步骤:
1. 引入jar包
2. 把ehcache.xml 缓存的配置文件加载到类路径的根目录下 src/

缓存搜索顺序:
每次查询先看是否开启了二级缓存,如果开启了二级缓存则直接从二级缓存的数据结构中取缓存数据,如果二级缓存中没有数据,再从一级缓存中找,如果一级缓存也没有,则在数据库中查询,并保存到相应级别的缓存中。

二级缓存:配置好二级缓存的文件后,一级缓存先进行连接,使用sqlSession1进行连接,查询id为10的用户信息后,使用sqlSession1.close();关闭连接后,将在配置好的文件位置生成缓存文件,即二级缓存,此时再使用sqlSession2连接,再次查询id为10的用户信息时,直接从二级缓存的数据中取出数据,不需要再次从数据库中查询,此时称为二级缓存。

@Test
	public void testUserOrder()throws IOException{
		SqlSession sqlSession1 = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		
		UserDao5 proxy = sqlSession1.getMapper(UserDao5.class);
		
		System.out.println("一一一");
		User user = proxy.getUserById(1);
		
		System.out.println(user);
		System.out.println("二二二");
		User user2 = proxy.getUserById(1);
		System.out.println(user2);
		//直接从一级缓存中获取数据,不需要从数据库中查询
		sqlSession1.close();
		//关闭连接后,变为二级缓存,存到相应的src路径下
		SqlSession sqlSession2 = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		UserDao5 proxy2 = sqlSession2.getMapper(UserDao5.class);
		System.out.println("三三三");
		User user3 = proxy2.getUserById(1);
		System.out.println(user3);
        //再次进行查询的时候从二级缓存中获取数据,不需要从数据库中查询
		sqlSession2.close();
		
	}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值