Session session = SQLHelper.openSession();
//一级缓存-》session
users user1 = (users)session.get(users.class, 2);
users user2 = (users)session.get(users.class, 2);
users user3 = (users)session.get(users.class, 2);
//清除缓存中的对象
session.evict(user1);
//清除整个缓存
session.clear();
System.out.println(user1.getUname());
System.out.println(user2.getUname());
System.out.println(user3.getUname());
SQLHelper.closeSession(session);
为什么还能打印出来user1对象的信息啊
//一级缓存-》session
users user1 = (users)session.get(users.class, 2);
users user2 = (users)session.get(users.class, 2);
users user3 = (users)session.get(users.class, 2);
//清除缓存中的对象
session.evict(user1);
//清除整个缓存
session.clear();
System.out.println(user1.getUname());
System.out.println(user2.getUname());
System.out.println(user3.getUname());
SQLHelper.closeSession(session);
为什么还能打印出来user1对象的信息啊
user1是users的对象,和session没关系了
//因为上面一条语句命使session里面存在id号为2 的Users对象,所以以下两个都是返回代理对象,没有从数据库中查询
users user2 = (users)session.get(users.class, 2);
users user3 = (users)session.get(users.class, 2); session.evict(user1); //只是 表示清空session里面id号为2 的Users对象,缓存里面不存在这个对象
这个时候如果使用如下语句又会又数据库中查询,因为session里面已经不存在Users对象
users user4 = (users)session.get(users.class, 2); session.evict(user1); //这句虽然是清空session里面user1对象,但user1的引用的对象并没有销毁