hibernate:Cache

hibernate:Cache
package com.hc.entity;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;

public class Cache {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SessionFactory factory = new Configuration().configure().buildSessionFactory();
		Session session = factory.openSession();
		Transaction transaction = session.beginTransaction();

		// 一级
		// 一级 二级 不缓存集合 再次查找 不发送sql
		// User user=session.load(User.class, 1);//get 由session管理 生命周期与session相同
		// System.out.println(user.getUserId()+"---"+user.getUserName());
		// User user1=session.load(User.class, 1);
		// System.out.println(user1.getUserId()+"---"+user1.getUserName());

		// 二级需手动导入依赖、配置
		// 开启二级缓存
		// 指定工厂类
		// 指定实体类使用 SessionFactory

		// User user = session.load(User.class, 1);
		// System.out.println(user.getUserId() + "---" + user.getUserName());
		// session.close();
		// session = factory.openSession();
		 User进入二级缓存后 加载的数据被缓存 二级工厂不关闭 则数据一直存在
		 第二次加载一样的数据 则不会发送sql 而是提取内存中旧数据
		// User user1 = session.load(User.class, 1);
		// System.out.println(user1.getUserId() + "---" + user1.getUserName());

		// 查询缓存 缓存数据库表主键id 只缓存集合 不能缓存对象
		// 开启查询缓存

		// Query query = session.createQuery("from User");
		// query.setCacheable(true);// 不设置 则非查询缓存
		// List<User> users = query.list();
		// for (User user : users) {
		// System.out.println(user.getUserId() + "---" + user.getUserName());
		// }
		// session.close();
		// session = factory.openSession();
		// // 查询缓存集合 再次查询不会再发送请求
		// //关闭二级缓存后 再次加载 n+1问题 发送的sql条数是list.size 且是根据id查询
		// Query query1 = session.createQuery("from User");
		// query1.setCacheable(true);// 不设置 则会重新加载
		// List<User> users1 = query1.list();
		// for (User user : users1) {
		// System.out.println(user.getUserId() + "---" + user.getUserName());
		// }

		// Query query1 = session.createQuery("select a.userName from User a");
		// query1.setCacheable(true);
		// List<String> users1 = query1.list();
		// for (String user : users1) {
		// System.out.println(user);
		// }
		// session.close();
		// session = factory.openSession();
		// Query query = session.createQuery("select a.userName from User a");
		// query.setCacheable(true);
		// List<String> users = query.list();
		// for (String user : users) {
		// System.out.println(user);
		// }

		// transaction.commit();//多余 在调用session.close()的时候,该函数就已经将 trans.commit()执行
		session.close();
		factory.close();
	}

}