闭关修炼——three——Hibernate

day01

属性是字段的封装

java EE三层结构:
1.web层(表现层,MVC模型包含其中):struts2 2.service层(业务逻辑层):spring 3.dao层(持久层):Hibernate

MVC模型: m:模型 v:视图 c:控制器 ---- 其它领域也涉及MVC模型

什么是框架: 封装了一部功能的代码,使用框架可以少写很多代码

什么是Hiernate:是一种开源的轻量级的框架, 应用于java ee三层结构中的持久层,使用orm思想直接对数据库进行crud操作 Hibernate的底层代码就是jdbc,对jdbc进行了封装,使用
Hibernate不 需要写jdbc代码,也不需要写sql语句。 Hibernate 5 版本进行学习

在web阶段学习javabean,更正确的叫法 实体类

什么是orm思想: 对象关系映射,Hibernate使用orm思想对数据库进行crud操作
让实体类与数据库表进行一一对应:1.实体类与数据库表对应 2.实体类属性与表字段对应
不需要直接操作数据库表,而操作表对应实体类对象
具体步骤:1.使用配置文件完成对象关系映射 2.使用Hibernate封装的对象Session User user = new User(); session.save(user);


Hibernate环境部署:
1.导入jar包(会找必须的jar包,数据库jar包,日志jar包)
2.配置实体类与数据库表一一映射
(1)创建实体类 (2)生成.hbm.xml文件(文件名称,位置最好固定)
3.配置核心hibernate.cfg.xml文件(文件位置,名称必须一致)
(1)配置数据库(必须写)
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day1</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>

(2)配置Hibernate信息(可选)
<property name="hibernate.hbm2ddl.auto">update</property> --- update,是否存在数据库---创建
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

(3)加载.hbm.xml文件(必须) --- 文件路径,不是类的全路径
<mapping resource="com/my/hibernate/User.hbm.xml"/>

实现添加操作:

第一步 加载hibernate核心配置文件 ----加载hibernate核心配置文件,创建对象,把配置文件放到对象里面

第二步 创建SessionFactory对象 ---到数据库里面根据映射关系把表创建

第三步 使用SessionFactory创建session对象

第四步 开启事务

第五步 写具体逻辑 crud操作

第六步 提交事务

第七步 关闭资源


创建sessionFactory过程中,这个过程特别耗资源的
在hibernate操作中,建议一个项目一般创建一个sessionFactory对象 --- 使用工具类创建,静态代码块


什么是session:
1.类似于jdbc中的connection 2.单线程对象(不能共用,只能自己使用) 3.有不同的方法操作数据库

什么是事务: 一组操作,要么全成功,要么失败

事务的四个特性:
1.原子性: 一组操作,要么全成功,要么失败
2.一致性: 操作前后数据不变
3.隔离性: 多个事务同时操作同一条数据互不影响
4.持久性: 提交事务后,数据库能响应

不考虑隔离性产生问题 --- 解决设置事务隔离级别
(1)脏读
(2)不可重复读
(3)虚读

mysql默认隔离级别 repeatable read

day2

实体类编写规则
1.属性私有的
2 私有属性使用公开的set和get方法
3 要求实体类有属性作为唯一值(一般使用id值)
4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类

对实体类crud操作:
1.session.save() 2.User user = session.get(User.class,1) --- 查询
3.update() 4.delete()

实体类状态有三种:
1.瞬时态:对象里面没有id值,与session也没有关联
2.持久态:对象里面有id值,与session也有关联
3.托管态:对象有id值,对象与session没有关联

session.saveOrUpdate(); --- 瞬时态--save功能, 其它态为update

Hibernate的一级缓存:
什么是缓存:1.把数据存到内存里面,可以直接读取内存中数据 2.把数据放到内存中, 提供读取效率

hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式

hibernate一级缓存特点:1.默认打开 2.就是session的范围 3.存储数据必须持久态数据

Hibernate一级缓存特性:持久态自动更新数据库

Hibernate事务代码规范写法:
try {
开启事务
提交事务
}catch() {
回滚事务
}finally {
关闭


实现与本地线程绑定session(单线程)
1.在hibernate核心配置文件中配置 -- name="hibernate.current_session_context_class" ---- thread
2.调用sessionFactory的getCurrentSession()方法得到


Hibernate的api使用
1.Query对象 --- 不需要写sql语句,但是写hql语句
使用sql操作表和表字段
使用hql操作实体类和属性
Query对象使用:
(1)创建Query对象
(2)调用query对象里面的方法得到结果

2.Criteria对象 --- 需要写语句,直接调用方法实现
实现过程:
(1)创建criteria对象
(2)调用对象里面的方法得到结果


3.SQLQuery对象 --- 调用底层sql实现
实现过程
(1)创建对象
(2)调用对象的方法得到结果 --- 返回list集合每部分是数组,或是对象

posted @ 2017-03-03 23:46  随行者  阅读(116)  评论(0编辑  收藏  举报