Hibernate_day02
来源:互联网 发布:大庆龙江网络新村电话 编辑:程序博客网 时间:2024/06/06 13:19
上节内容
1web内容回顾
2hibernate概述
(1)orm思想
3hibernate入门案例
4hibernate的配置文件
5hibernate的核心api
今天内容
1实体类编写规则
2hibernate主键生成策略
(1)native
(2)uuid
3实体类操作
(1)crud操作
(2)实体类对象状态
4hibernate的一级缓存
5hibernate的事务操作
(1)事务代码规范写法
6hibernate其他的api(查询)
(1)Query
(2)Criteria
(3)SQLQuery
实体类编写规则
1实体类里面属性私有的
2私有属性使用公开的set和get方法操作
3要求实体类有属性作为唯一值(一般使用id值)
4实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类
(1)八个基本数据类型对应的包装类
-int – Integer
-char—Character、
-其他的都是首字母大写比如double– Double
(2)比如表示学生的分数,假如intscore;
-比如学生得了0分,intscore = 0;
-如果表示学生没有参加考试,intscore = 0;不能准确表示学生是否参加考试
解决:使用包装类可以了,Integerscore = 0,表示学生得了0分,
表示学生没有参加考试,Integerscore = null;
Hibernate主键生成策略
1hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以不同生成策略
2hibernate主键生成策略有很多的值
3在class属性里面有很多值
(1)native:根据使用的数据库帮选择哪个值
(2)uuid:之前web阶段写代码生成uuid值,hibernate帮我们生成uuid值
4演示生成策略值uuid
(1)使用uuid生成策略,实体类id属性类型必须字符串类型
(2)配置部分写出uuid值
实体类操作
对实体类crud操作
添加操作
1调用session里面的save方法实现
根据id查询
1调用session里面的get方法实现
修改操作
1首先查询,修改值
(1)根据id查询,返回对象
删除操作
1调用session里面delete方法实现
实体类对象状态(概念)
1实体类状态有三种
(1)瞬时态:对象里面没有id值,对象与session没有关联
(2)持久态:对象里面有id值,对象与session关联
(3)托管态:对象有id值,对象与session没有关联
2演示操作实体类对象的方法
(1)saveOrUpdate方法:实现添加、实现修改
Hibernate的一级缓存
什么是缓存
1数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。
(1)把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据
(2)把数据放到内存中,提供读取效率
Hibernate缓存
1hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式
2hibernate缓存特点:
第一类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语句,查询一级缓存内容
Hibernate一级缓存执行过程
Hibernate一级缓存特性
1持久态自动更新数据库
2执行过程(了解)
Hibernate事务操作
事务相关概念
1什么是事务
2事务特性
3不考虑隔离性产生问题
(1)脏读
(2)不可重复读
(3)虚读
4设置事务隔离级别
(1)mysql默认隔离级别repeatableread
Hibernate事务代码规范写法
1代码结构
try{
开启事务
提交事务
}catch(){
回滚事务
}finally{
关闭
}
@Test
publicvoidtestTx(){
SessionFactorysessionFactory=null;
Sessionsession=null;
Transactiontx=null;
try{
sessionFactory= HibernateUtils.getSessionFactory();
session=sessionFactory.openSession();
//开启事务
tx=session.beginTransaction();
//添加
Useruser=newUser();
user.setUsername("小马");
user.setPassword("250");
user.setAddress("美国");
session.save(user);
inti= 10/0;
//提交事务
tx.commit();
}catch(Exceptione){
e.printStackTrace();
//回滚事务
tx.rollback();
}finally{
//关闭操作
session.close();
sessionFactory.close();
}
}
Hibernate绑定session
1session类似于jdbc的connection,之前web阶段学过ThreadLocal
2帮实现与本地线程绑定session
3获取与本地线程session
(1)在hibernate核心配置文件中配置
(2)调用sessionFactory里面的方法得到
4获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了
Hibernate的api使用
Query对象
1使用query对象,不需要写sql语句,但是写hql语句
(1)hql:hibernatequery language,hibernate提供查询语言,这个hql语句和普通sql语句很相似
(2)hql和sql语句区别:
-使用sql操作表和表字段
-使用hql操作实体类和属性
2查询所有hql语句:
(1)from实体类名称
3Query对象使用
(1)创建Query对象
(2)调用query对象里面的方法得到结果
Criteria对象
1使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现
2实现过程
(1)创建criteria对象
(2)调用对象里面的方法得到结果
SQLQuery对象
1使用hibernate时候,调用底层sql实现
2实现过程
(1)创建对象
(2)调用对象的方法得到结果
返回list集合每部分是数组
返回list中每部分是对象形式
页面中
(1)servlet里面调用service,service调用dao
(2)在dao里面使用hibernate实现操作
(3)在页面中显示所有数据
-在servlet里面把list集合放到域对象
-在jsp中使用el表达式+foreach标签获取
2复习知识
(1)一对多和建表
(2)多对多和建表
记录显示页面中
(1)servlet里面调用service,service调用dao
(2)在dao里面使用hibernate实现操作
(3)在页面中显示所有数据
-在servlet里面把list集合放到域对象
-在jsp中使用el表达式+foreach标签获取
2复习知识
(1)一对多和建表
(2)多对多和建表
完成任务
1查询表所有记录,把记录显示页面中
(1)servlet里面调用service,service调用dao
(2)在dao里面使用hibernate实现操作
(3)在页面中显示所有数据
-在servlet里面把list集合放到域对象
-在jsp中使用el表达式+foreach标签获取
2复习知识
(1)一对多和建表
(2)多对多和建表
- Hibernate_day02
- Hibernate_day02
- Hibernate_day02
- hibernate_day02
- Hibernate_day02(2)
- eclipse中集成tomcat8
- zlog日志函数库
- 【go语言发送电子邮件】go语言版发送电子邮件
- linux SD启动卡分区详解
- u3d抗锯齿配置
- Hibernate_day02
- Eclipse修改皮肤主题、编辑区、Log区背景
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.1基本概念(4.1.2)
- MyBatis(四) sql执行流程
- 打开mac自身支持ntfs的读写
- mongodb
- img图片标签
- Spring框架注解扫描开启之配置细节
- 设计模式(Design Patterns)-可复用面向对象软件的基础 04:建造者模式(Builder)