Hibernate框架
Hibernate框架在分层中作用
Struts2: 基于MVC模式应用框架!
ORM映射
ORM是一种规则!
O Object 对象
R Relation 关系
M Mapping 映射
ORM就是对象关系映射!
1. 把对象映射到数据的表的记录行中!
2. 作用
通过操作对象,影响数据库记录!
3. Hibernate 是对ORM规则的实现!
* 不写sql,操作数据库中数据!
ORM是对象关系映射,是一个概念,或说是一种规则,这个规则的实现:
1. Hibernate框架
2. 自己写的ORM实现
3. 其他框架Mybatise 或其他!
2. Hibernate第一个案例
下载源码:
版本: hibernate3.6
如:hibernate-distribution-3.6.0.Final-dist.zip
使用步骤:
1. 建库、建表
T_user 表
2. 写User.java实体类
3. Hibernate环境搭建
* 引入jar包
* hibernate.cfg.xml
* 实体类的映射文件
User.hbm.xml 【表示是hibenrate的映射xml文件!】
-- 创建数据库
CREATE DATABASE day32 DEFAULT CHARACTER SET UTF8
-- 创建员工表
引入Jar文件:
Hibernate源码目录:
hibernate3.jar + required目录 + jpa 目录 + 数据库驱动包
(9个)
hibernate.cfg.xml 主配置文件
App 测试
3. Hibernate Api
|-- Configuration 配置管理器对象
config.configure(); 加载配置文件;
默认加载src/hibernate.cfg.xml文件!
如果hibernate放到其他目录,写路径即可:
如,cn/itcast/hibernate.cfg.xml
config.buildSessionFactory(); 创建Session的工厂
config.addClass(clazz) 加载指定类型对象,对应的映射文件
注意:
1. 对象一定要与映射文件在同一个包
2. 映射文件,一定是*.hbm.xml后缀!
且名称一定与类名称一样!
3. 测试使用用
作用相当于:
config.addResource(“根据映射文件路径加载”)
|-- SessionFactory session对象的工厂
一个项目只需要有一个session的工厂即可!单例!
这个对象相当于:hibernate.cfg.xml配置文件!
sf.openSession(); 创建一个session对象!
sf.getCurrentSession(); 线程方式创建session (注意:需要配置hibernate.cfg.xml)
创建session,再把创建的session绑定到当前线程上!
必须配置:thread
|-- Session (重点)与数据库连接的会话,维护了一个Connection
Session对象的各个方法,封装了对数据库的所有操作!
包: org.hibernate.Session
更新操作:
session.save(obj); 保存一个对象
session.update(obj); 修改对象(要确保修改对象的主键一定要存在!)
session.saveOrUpdate(obj); 保存或更新
当没有设置主键,执行保存!
有设置主键且在数据库存在,执行更新!
session.delete(obj); 删除对象(要确保删除对象的主键一定要存在!)
查询操作:
Query q = Session.crearteQuery(HQL语句); HQL查询!
(适合有SQL语法基础的开发人员使用!)
|--- Transaction 事务对象
sf.openSession(); 以这种方式创建的Session对象:
更新时候,需要有事务!否则数据不会反映到数据库!
查询时候,可以不开启事务!
4. Hibernate 实现CRUD
1. 写一个工具类
2. 写接口、实现!
5. hibernate.cfg.xml配置
Hibernate主配置,就是指:hibenrate.cfg.xml!
描述了:
1. 连接数据库的参数
2. 其他配置如:方言,,,,
3. 加载的映射
可以参考这个文件,写配置信息:
hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties
hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties
## MySQL
#hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password
自动建表,
方式1:在hibernate.cfg.xml中配置
## auto schema export
#hibernate.hbm2ddl.auto create-drop 在创建SessionFactory时候建表,
在执行sf.close()方法时候删除表!
(测试时候使用!)
#hibernate.hbm2ddl.auto create 每次始终创建表;先删除,再创建!
#hibernate.hbm2ddl.auto update 如果表不存在则创建,表存在则不创建!
#hibernate.hbm2ddl.auto validate 验证:检查映射配置与数据库表是否一致,
不一致就报错!(生产环境使用!)
在执行sf.close()方法时候删除表!
(测试时候使用!)
#hibernate.hbm2ddl.auto create 每次始终创建表;先删除,再创建!
#hibernate.hbm2ddl.auto update 如果表不存在则创建,表存在则不创建!
#hibernate.hbm2ddl.auto validate 验证:检查映射配置与数据库表是否一致,
不一致就报错!(生产环境使用!)
方式2:代码方式
public static void main(String[] args) {
// 加载主配置文件
Configuration config = new Configuration().configure();
// 使用工具类建表
SchemaExport export = new SchemaExport(config);
// 建立表
// 参数1:是否在控制台显示建表语句!
// 参数2:是否执行上面的建表sql
export.create(true, true);
}
6. 映射配置 : *.hbm.xml
映射文件作用:
1. 描述“对象”与“表”的映射关系
对象 表名
属性 字段
属性类型 字段类型
2. 映射文件,完全描述的就是一张表!
3. ORM的核心,就是映射的配置!
重点掌握:
1. 主键映射
* 主键映射 (主键生成策略)
* 联合主键映射
2. 普通字段映射
一个表是不是必须要有主键? 不是; 但99%的表都有主键!
在什么字段上建立主键? 字段唯一,改字段就可以作为主键,如:身份证标号!
如果找到不到这样的字段,
1. 给一个id列;作为主键
2. 多列联合在一起作为,一个主键!
步骤:
1. 需求
用户信息:用户名、生日、地址、性别、年龄等!
主键列:
用户名、地址!(联合主键)
2. javabean
3. 映射
4. 测试
联合主键映射:
/**
* 联合主键对象
* 注意:一定要实现可序列化接口!
* 原因:因为sesison.get()方法要求主键一定要实现可序列化标记!