1 实体类编写规则mysql
2 hibernate主键生成策略web
(1)nativeredis
(2)uuidsql
3 实体类操做数据库
(1)crud操做api
(2)实体类对象状态数组
4 hibernate的一级缓存缓存
5 hibernate的事务操做session
(1)事务代码规范写法框架
6 hibernate其余的api(查询)
(1)Query
(2)Criteria
(3)SQLQuery
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;
1 hibernate要求实体类里面有一个属性做为惟一值,对应表主键,主键能够不一样生成策略
2 hibernate主键生成策略有不少的值
3 在class属性里面有不少值
(1)native: 根据使用的数据库帮选择哪一个值
(2)uuid:以前web阶段写代码生成uuid值,hibernate帮咱们生成uuid值
4 演示生成策略值 uuid
(1)使用uuid生成策略,实体类id属性类型 必须 字符串类型
(2)配置部分写出uuid值
1 调用session里面的save方法实现
1 调用session里面的get方法实现
1 首先查询,修改值
(1)根据id查询,返回对象
1 调用session里面delete方法实现
1 实体类状态有三种
(1)瞬时态:对象里面没有id值,对象与session没有关联
(2)持久态:对象里面有id值,对象与session关联
(3)托管态:对象有id值,对象与session没有关联
2 演示操做实体类对象的方法
(1)saveOrUpdate方法:实现添加、实现修改
1 数据存到数据库里面,数据库自己是文件系统,使用流方式操做文件效率不是很高。
(1)把数据存到内存里面,不须要使用流方式,能够直接读取内存中数据
(2)把数据放到内存中,提供读取效率
1 hibernate框架中提供不少优化方式,hibernate的缓存就是一个优化方式
2 hibernate缓存特色:
第一类 hibernate的一级缓存
(1)hibernate的一级缓存默认打开的
(2)hibernate的一级缓存使用范围,是session范围,从session建立到session关闭范围
(3)hibernate的一级缓存中,存储数据必须 持久态数据
第二类 hibernate的二级缓存
(1)目前已经不使用了,替代技术 redis
(2)二级缓存默认不是打开的,须要配置
(3)二级缓存使用范围,是sessionFactory范围
1 验证方式
(1)首先根据uid=1查询,返回对象
(2)其次再根据uid=1查询,返回对象
第一步执行get方法以后,发送sql语句查询数据库
第二个执行get方法以后,没有发送sql语句,查询一级缓存内容
1 持久态自动更新数据库
2 执行过程(了解)
1 什么是事务
2 事务特性
3 不考虑隔离性产生问题
(1)脏读
(2)不可重复读
(3)虚读
4 设置事务隔离级别
(1)mysql默认隔离级别 repeatable read
1 代码结构
try {
开启事务
提交事务
}catch() {
回滚事务
}finally {
关闭
}
@Test public void testTx() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getSessionFactory(); session = sessionFactory.openSession(); //开启事务 tx = session.beginTransaction(); //添加 User user = new User(); user.setUsername("小马"); user.setPassword("250"); user.setAddress("美国"); session.save(user); int i = 10/0; //提交事务 tx.commit(); }catch(Exception e) { e.printStackTrace(); //回滚事务 tx.rollback(); }finally { //关闭操做 session.close(); sessionFactory.close(); } }
1 session相似于jdbc的connection,以前web阶段学过 ThreadLocal
2 帮实现与本地线程绑定session
3 获取与本地线程session
(1)在hibernate核心配置文件中配置
(2)调用sessionFactory里面的方法获得
4 获取与本地线程绑定session时候,关闭session报错,不须要手动关闭了
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对象里面的方法获得结果
1 使用这个对象查询操做,可是使用这个对象时候,不须要写语句,直接调用方法实现
2 实现过程
(1)建立criteria对象
(2)调用对象里面的方法获得结果
1 使用hibernate时候,调用底层sql实现
2 实现过程
(1)建立对象
(2)调用对象的方法获得结果
返回list集合每部分是数组
返回list中每部分是对象形式
1 查询表全部记录,把记录显示页面中
(1)servlet里面调用service,service调用dao
(2)在dao里面使用hibernate实现操做
(3)在页面中显示全部数据
- 在servlet里面把list集合放到域对象
- 在jsp中使用el表达式+foreach标签获取
2 复习知识
(1)一对多和建表
(2)多对多和建表