1、Configuration
图片.png
Configuration cfg = new Configuration();
cfg.configure();
2、sessionFactory
图片.png
public class HibernateUtils {
private static final Configuration cfg;
private static final SessionFactory sessionFactory;
static {
cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
3、session
图片.png
4、transaction
图片.png
5、再议实体类的编写规则
1、属性是私有的,并且都有相应的get和set方法。
2、(hibernate特有的)必须有一个属性是作为一个实体的唯一值。
3、实体类属性在hibernate里面建议不使用基本类型,而是建议使用基本类型的包装类。
int->Integer
char->Character
其他的都是首字母大写就OK了
之所以用包装类的原因是:比如有学生参加考试,缺考可以直接用null值表示。
6、主键选择策略
图片.png
7、实体类操作
添加操作:
User user = new User();
user.setUsername("winney");
user.setPassword("1256");
user.setAddress("GZ");
session.save(user);
查询操作:
图片.png
修改操作:
图片.png
删除操作:
图片.png
7、实体类状态
1、瞬时态
实体没有id值,与session没有关系
2、持久态
实体有id值,且通过session查询出来
3、托管态
有id值,但是和session没有关系
saveOrUpdate()方法会根据实体对象的状态来调用是添加还是更新。
实体类对象状态是瞬时态,方法做的是添加操作。
实体类对象状态是托管态,方法做的是更新操作。
实体类对象状态是持久态,方法做的是更新操作。
8、hibernate一级缓存
hibernate
图片.png
二级缓存已经被redis替代了:
二级缓存默认是不打开的,要配置,缓存范围是整个sessionFactory范围。
图片.png
图片.png
8、事务操作的规范写法
图片.png
9、绑定本地线程session
1、首先配置核心配置文件
<property name="hibernate.current_session_context_class">thread</property>
2、重写HibernateUtils类
添加getSession方法
public static Session getSession() {
return sessionFactory.getCurrentSession();
}