Hibernate [冬眠]
作用:JDBC在访问数据库的时候会产生很多的冗余代码,影响程序员的开发效率。为了简 化访问数据库的操作
对于程序而言最重要的是? 数据
数据有怎么样的表现形式?
1.内存[临时数据 transient]
Java 中的Object 是一种临时数据
2.数据库
表【table】的形式 持久化数据
在java开发|web开发 就是 由 Object<---->table
有Object 到 table 或者由 table 到 Object
ORMapping Object Relationship(关系,泛指数据库) Mapping
1. java类 表
User t_user 一个类对应一张表
Object row 表当中的每一行数据代表一个对象
Property column 表当中的每一个列对应对象中的属性
id 主键 判断对象和数据库中的关系是唯一的,id不是对象的固有属性
仅仅只是一个对应关系
配置文件:映射文件【方便维护】
ORMapping框架
Hibernate 通用的CRUD(增删改查)方法
toplink
Hibernate : www.hibernate.org
1.hibernate目录结构
eg 一个hibernate的拍卖行的案例
etc hibernate的配置文件
grammar HQL的语法
Hibernater的开发
1.搭建hibernate的环境建立一个java工程
1.导入jar包
hibernate3.jar
lib *
ojdbc4.jar [数据库驱动jar包]
2.导入配置文件
1.导入与运行环境相关的配置文件
hibernate.cfg.xml--->etc目录中
位置在src目录下
1.配置与数据库连接相关的配置参数
2.与自身属性相关的配置
3.对于映射文件的注册
3.提供映射关系的配置文件
1.配置文件的名称 xxx.hbm.xml
2.配置文件的位置 任意
导入DTD 约束
在hibernate3.jar-->org.hibernate-->hibernate-mapping-3.0.dtd
Hibernate 核心API
1.Configuration 配置 作用读取配置文件 获得SessionFactory
2.SessionFactory -->创建Session,重量级资源
3.Session-->负责java程序与数据库的交互,提供一套CRUD的方法[轻量级]
Session如何与数据库进行连接:Session内部封转了Connection对象
|-Transaction 专门处理事务 所有的hibernate的程序必须控制事务
|-Query 复杂的查询(非主键的查询)
Hibernate的开发 ORMapping的开发 O R M
1 O Object 提供对象
注意:对象的主键类使用封转类 id integer
2 R 数据库 建表
3 M 映射文件的配置
4 在hibernage.cfg.xml中为映射文件进行注册
5 采用Hibernate的核心API进行编程处理
org.hibernate.MappingException: Unknown entity: zx.hb.day1.pojo.User
说明映射文件没有注册
Session.save(Obect);//插入数据
increment主键生成器的原理
select max(t_id) from g_user
从操作的表当中查询出最大的主键值,然后将该值+1作为新的主键值
Session.get(class,pk);//通过session查询数据依赖于主键
删除
先查询在删除:
1.确保该对象的存在
2.获得该对象的主键值
Object ojb=session.get(Object.class,pk);
Session.delete(Object);
修改
先查询再修改
1.确保对象的存在
2.获得该对象的主键值
Object obj=(Object)session.get(Object.class,pk);
obj.setXXX(xxxx);//在内存中对数据进行修改
session.update(obj);
创建工具类,封装Session
1.SessionFactory 工厂类
1).创建Session
2).进行二级缓存
SessionFactory是重量级资源特点:功能非常强大,占用的内存就多
由于重量级资源占用内存,不能频繁的创建,只创建一个,就会引发线程安全问题,
重量级资源一般来讲是线程安全.运行多线程访问。
2.Session 代表了用户的操作
1.提供了一套CRUD的方法 save(Object); update(Object); delete(Object);
get(calss,pk);
2.内部封了Connection
Session:轻量级资源(每一个用户独享,消耗内存很少)
模拟一个注册
ReigstAction-->UserBiz -->UserDao
register(User u ) save(User u);
应该在同一个Session当中,在同一个线程中完成注册
对于事务的控制在Biz层进行处理
应为biz可能会处理多个Dao层的数据,事务的原子特性【要么成功要么失败】,事务的处理必须在Biz层处理
事务的特性:原子性,持久性,一致性,隔离性
Object ----> Thread对象
ThreadLocal 工具类:将一个对象存入到线程的Map当中
key: 当前ThreadLocal对象
value:存入的值/对象
Hibernateday01学习笔记
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.