Hibernate笔记
Hibernate:冬眠
Struts框架:是MVC框架
Hibernate是一个操作数据库的框架
操作数据库的发展:
1. 直面数据库
功能没有问题,但操作非常原始,需要专业知识
2. JDBC
JavaDataBase Connection
java专门针对数据库操作封装的类和接口,简化操作数据库
Connection,Statement,DriverManager,ResultSet
拼凑SQL语句,安装规范建立和数据库的链接,基于连接操作,数据库返回对应的结果
缺点:每次操作数据库都需要上述的过程,拼凑---连接---执行---结果;没有可复用性
3. DAO
DataAccess Object
工具类,里面封装操作数据库的具体的功能和方法,然后调用即可
标准的DAO的结构:
一组实体Bean
一个数据库公共类
一组DAO接口,规定操作数据库的方法
n组DAO接口的实现类,实现不同数据库产品操作数据库的具体的代码
一个工厂类动态决定产生那一组DAO接口的实现类的对象
4. 为了解决数据库操作建立连接,维护连接,关闭连接的资源消耗,实际场合使用了一个“数据库连接池”技术
操作数据库的过程进一步简化和封装
不同数据库的选择在配置文件里面体现
数据库连接需要在配置文件里面提供连接数据库的信息
以前SQL需要自己拼凑,掌握数据库和java两种技术
Stringsql = " ";
实体Bean 和数据库表一一对应的关系
利用java的反射机制根据传递进来的数据分析其对应的表名,分析其属性对应的列名,利用java代码自动拼凑以前我们需要手工拼凑的SQL代码
使用Hibernate框架的流程:
1. 创建项目(无论桌面项目还是Web项目)
2. 添加数据库驱动
3. 添加Hibernate的支持
1. 自动创建一个配置文件
2. 暂时不创建SessionFactory类
4. 完善配置文件
数据库表包含所以的信息《===》实体类+映射文件
Hibernate目的:用面向对象的方式操作关系型数据库
途径(核心):ORM
PO:以前叫实体Bean,Persistence Object(还有Transient Object)
Hibernate:把数据在瞬时态和持久态之间转换
回顾:
Hibernate框架,操作数据库,OO方式操作关系型数据库,ORM
类似的框架还有很多
利用数据库表和po对象及映射文件间的一一对应的关系,可以双向自动产生
推荐正向
Hibernate对于表里面主键的要求,理解
配置文件---数据库连接
提供了get/load,save,delete,update
对于我们,需要手工编写DAO方法,实现方法(基于上面提供的基础操作的方法)
l Hibernate提供的HibernateSessionFactory的功能:
l show_sql属性的添加
l hbm2ddl.auto属性的添加
值:create
l Log4j
l 主键的生成策略
序列,标识列(一种常用的主键的使用方式,但是,不是唯一的方式)
<generator class="native"></generator>
Oracle里面的序列:class="sequence"
SQLServer里面的标识列:class="identity"
其他的生成策略:
用户自己输入:assigned
系统自动生成字符串:uuid
l 配置文件hibernate.cfg.xml
数据库连接的细节信息
Configurationconf = new Configuration().configure();
来读取
第二种形式:
src下的hibernate.properties文件
Configuration conf = new Configuration();来读取
特殊:映射文件的添加需要通过addResource()方法来添加
第三种形式:
不写任何形式的配置文件
Configuration conf = new Configuration();
conf.setProperty(key,value);
…
conf.addResource();
…
练习:
1. 抽象类,接口---匿名的实现
2. 另外的2种配置文件的实现
关系映射:
如何在PO里面体现数据库里面的关系,如何在映射文件里面配置关系
单向1:N
实例:学生和成绩(1:N)
学生里面有成绩,成绩里面没有学生
从PO对象的角度来讲,学生PO里面有成绩信息(多个)è把成绩作为学生的属性就可以
回顾:
1. 配置文件和配置信息的变化:XML,属性文件,通过代码提供
2. 属性的可选的配置:show_sql hbm2ddl.auto
3. 主键生成策略:native(sequence,identity),uuid,assigned
4. 数据库里面的数字和java里面的对应关系
5. 关系的映射:如何把数据库里面主外键关系反映在java里面,数据的使用对象属性的引用;映射文件里面需要把这样的数据引用和主外键关系关联起来
自动生成的外键对于我们使用Hibernate来讲,是手段不是目的
多对1:多方里面有1方的数据,PO里面有1方的属性的引用,映射文件里面需要在多方映射;数据库表里面的外键依然在多方所对应的表
<many-to-one/>
hibernate的查询
1. HQL语言:
SQL:Structed Query Language 结构化查询语言 针对关系型数据库的操作的语言
HQL:Hibernate Query Language Hibernate查询语言,利用Hibernate框架间接查询数据库表的语言
使用SQL,直面数据库,眼前:表,列
使用HQL,不面对数据库,眼前没有:表,列,有:PO,property
HQL语法:
[select] from PO as user 名称 [where user.username=?]
一般意义上,使用除主键之外的条件,查询的结果类型?
通过session创建Query对象,执行list方法,完成查询
2. 传统的SQL代码查询
通过session创建SQLQuery对象,调用list方法完成查询
3. Criteria方式查询
通过session创建Criteria对象
相当于select * from 对象所对应的表;
4. 数据过滤
Session和SessionFactory