一、实体类编写规则
1 实体类里面属性私有的
2 私有属性使用公开的set和get方法操作
3 要求实体类有属性作为唯一值(一般使用id值)
4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类
(1)八个基本数据类型对应的包装类
- int – Integer
- char—Character、
- 其他的都是首字母大写 比如 double – Double
(2)比如 表示学生的分数,假如 int score;
- 比如学生得了0分 ,int score = 0;
- 如果表示学生没有参加考试,int score = 0;不能准确表示学生是否参加考试
l 解决:使用包装类可以了, Integer score = 0,表示学生得了0分,
表示学生没有参加考试,Integer score = null;
二、Hibernate主键生成策略
流行使用将主键设置成自动增长的,如下 <!--
native:生成表的id值就是主键自动增长
-->
<generator class="native"></generator>
三、对实体类的crud操作
1.调用session的save方法实现添加操作
Student stu = new Student();
stu.setAge(36);
stu.setStuName("王强");
stu.setStuNo("20142480244");
session.save(stu);
2.调用session的get方法实现根据id查询操作
Student stu = session.get(Student.class, 4);
System.out.println(stu);
3.修改操作 ,先查询出来,再用session的update方法修改,下面方法将查询出来的学生名字改为小明
Student stu = session.get(Student.class, 1);
stu.setStuName("小明");
session.update(stu);
4.删除操作,调用session的delete操作,也是先查询再删除
Student stu = session.get(Student.class, 1);
session.delete(stu);
四、实体类对象的状态
1.瞬时态:对象里面没有id值,对象与session没有关联
2.持久态:对象里面有id值,对象与session关联
3.对象有id值,对象与session没有关联
五、Hibernate的缓存
hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式
1.第一类 hibernate的一级缓存
(1)hibernate的一级缓存默认打开的
(2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围
(3)hibernate的一级缓存中,存储数据必须 持久态数据
2. hibernate的二级缓存
(1)目前已经不使用了,替代技术 redis
(2)二级缓存默认不是打开的,需要配置
(3)二级缓存使用范围,是sessionFactory范围
Hibernate的一级缓存执行过程
一级缓存特性:持久态实体类自动更新数据库
六、Hibernate事务操作
1.不考虑隔离性产生问题
(1)脏读
(2)不可重复读
(3)虚读
2.设置事务隔离级别
(1)mysql默认隔离级别 repeatable read
3.Hibernate代码规范
try {
开启事务
具体操作
提交事务
}catch() {
回滚事务
}finally {
关闭
}
七、Hibernte的session绑定本地线程操作<!-- session绑定本地线程 -->
<property name="hibernate.current_session_context_class">thread</property>
2.通过方法获取本地线程session
public static Session getSession(){
return factory.getCurrentSession();
}
3.获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了
八、Hibernate的API使用
1.Query
1> 使用query对象,不需要写sql语句,但是写hql语句
(1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似
(2)hql和sql语句区别:
- 使用sql操作表和表字段
- 使用hql操作实体类和属性
2 >查询所有hql语句:
(1)from 实体类名称
3> Query对象使用
(1)创建Query对象
(2)调用query对象里面的方法得到结果
使用Query对象查询所有的例子如下
Query query = session.createQuery("from Student");
List<Student> stuList = query.list();
2.Criteria对象
使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现
实现过程
(1)创建criteria对象
(2)调用对象里面的方法得到结果
Criteria criteria = session.createCriteria(Student.class);
List<Student> stuList = criteria.list();
3.SQLQuery对象(用的不多)
1 使用hibernate时候,调用底层sql实现
2 实现过程
(1)创建对象
(2)调用对象的方法得到结果