目录导航
实体类对象状态
- 瞬时态
例如:不涉及id,不用session关联(添加) - 托管态
例如:涉及id,没有session关联
User user = new User();
user.setid(2); - 持久态
例如:涉及id,与session关联(id查询,删除)
Name | 涉及 id | session 关联 |
---|---|---|
瞬时态 | × | × |
托管态 | √ | × |
持久态 | √ | √ |
实体类操作方法saveOrUpdate
可以对瞬时态、托管态、持久态操作
User user = new user();
user.setUsername("奇巴比");
user.setPassword("123000");
//对瞬时态作、添加操作
session.saveOrUpdate(user);
User user = new user();
user.setid(1);
user.setUsername("root");
user.setPassword("admin");
//对托管态、修改操作
session.saveOrUpdate(user);
User user = session.get(User.class,2);
user.setUsername("程序猿");
//对持久态、修改操作
session.saveOrUpdate(user);
hibernate一级缓存
什么是缓存?
数据存储于数据库中,数据库相当于一份文件,需要利用流操作,效率低
- 将数据存内存中,不需要用流方式,可以直接从内存读取操作
- 将数据存于内存中,提高效率
hibernate缓存
hibernate框架提供了优化方式,hibernate缓存就是一种优化方式
hibernate缓存(一级缓存、二级缓存)
- 一级缓存
默认打开,使用范围为session,存储数据必须是 持久态数据 - 二级缓存
得手动设置,现在一般不用由redis替代,使用范围session factory
hibernate的api使用
Query
//创建query对象,写hql语句
Query query = session.createQuery("from User");
//调用query对象方法得到结果
List<User> list = query.list();
//遍历
for(User user : list){
system.out.println(user);
}
Criteria
//创建criteria对象,参数实体类
Criteria criteria = session.createCriteria(User.class);
//调用criteria对象方法得到结果
List<User> list = criteria.list();
SQLQuery
以数组方式返回
//创建SQLQuery对象,写sql语句
SQLQuery sqlQuery = session.createSQLQuery("selete * from t_user");
//调用sqlQuery对象,list返回数组
List<Object[]> list = sqlQuery.list();
//遍历,输出数组
for(Object[] object : list){
system.out.println(Array.toString(object));
}
以对象形式返回
SQLQuery sqlQuery = session.createSQLQuery("selete * from t_user");
sqlQuery.addEntity(User);
List<User> list = sqlQuery.list();
for(User user : list){
system.out.println(user);
}