1.Hibernate框架入门
目录
1.1什么是Hibernate框架?
框架:软件的半成品,已经实现部分功能。
Hibernate框架是一种持久层的ORM(object relational mapping)框架,实现了数据库中表、字段与持久层中的类、成员变量之间的映射关系,使得我们可以通过操作类对象来对数据库中的表进行CRUD(create 、retrieve、update、delete)操作。
J2EE经典三层结构:
ORM概述:
1.2为什么使用Hibernate框架?
1.3怎样使用Hibernate框架?
1.3.1 搭建Hibernate环境
Hibernate5.x是目前较新的版本,也是目前企业流行的版本,这里以Hibernate5.0.7为例进行Hibernate的学习.
下载Hibernate5.0.7:https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/
Hibernate文件目录说明:
1. Documentation:Hibernate开发文档
2. Lib:Hibernate 的Jar包Required:
- Hibernate核心也是必须的Jar包
- Optional: Hibernate可选择的Jar包
3. Project:Hibernate官方提供的实例
引入Jar包支持:
创建一个Java Object项目来进行Hibernate入门学习,并引入如下的jar包支持,Java Object中还用手工将jar包build path一下;引入jar包如下:
- Hibernate必须包
- C3p0支持包(可选jar包)
- log支持包
- 数据库驱动包
1.3.2 创建表与实体类
创建数据表cust_customer(MYSQL数据库):
CREATE TABLE `cst_customer` (
`cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
`cust_name` VARCHAR(32) NOT NULL COMMENT '客户名称(公司名称)',
`cust_source` VARCHAR(32) DEFAULT NULL COMMENT '客户信息来源',
`cust_industry` VARCHAR(32) DEFAULT NULL COMMENT '客户所属行业',
`cust_level` VARCHAR(32) DEFAULT NULL COMMENT '客户级别',
`cust_phone` VARCHAR(64) DEFAULT NULL COMMENT '固定电话',
`cust_mobile` VARCHAR(16) DEFAULT NULL COMMENT '移动电话',
PRIMARY KEY (`cust_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
创建实体类Customer (并添加setter/getter方法、重写toString方法) :
1.3.3 创建文件映射(关键)
创建文件映射Customer.hbm.xml文件:
标签及属性介绍:
1. Class标签:实体类与数据表之间的映射关系
- Name属性 :实体类路径
- Table属性 :对应的数据表名
- Catalog属性 :对应的数据库名(可省略)
2. Id标签:特定成员变量与主键之间的映射关系
- Name属性 :特定成员变量名
- Column属性 :表中的主键字段名(类中的属性名和表中的字段名如果一
column可以省略)
- Length属性 :长度
- type 属性 :类型
- Generator属性:标识符生成器
3. Property标签:普通成员变量与数据库普通字段之间的映射关系
- Name属性 :普通成员变量名
- Column属性 :表中的普通字段名
- Length属性 :长度
- type 属性 :类型
1.3.4 创建Hibernate核心映射(关键)
创建Hibernate映射文件hibernate.cfg.xml文件:
Hibernate的核心配置:
1. 必须的配置
连接数据库的基本的参数
- 驱动类
- url路径
- 用户名
- 密码
2. 方言
3.可选的配置
- 显示SQL :hibernate.show_sql
- 格式化SQL :hibernate.format_sql
- 自动建表 :hibernate.hbm2ddl.auto
- none :不使用hibernate的自动建表
- create :如果数据库中已经有表,删除原有表,重新创建,如果没有表,新建表。(测试)
- create-drop :如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表。(测试)
- update :如果数据库中有表,使用原有表,如果没有表,创建新表(更新表结构)
- validate :如果没有表,不会创建表。只会使用数据库中原有的表。(校验映射和表结构)。
映射文件的引入
1. 引入映射文件的位置
加入C3p0支持:
1.3.4 使用Hibernate API
Hibernate API使用步骤:
//1.加载hibernate核心配置
Configuration configuration=new Configuration().configure();
//2.创建一个SessionFactory对象:jdbc连接池
SessionFactory sessionFactory=configuration.buildSessionFactory();
//3.获得session对象:jdbc中的Connection
Session session=sessionFactory.openSession();
//4.手动开启事务
Transaction transaction=session.beginTransaction();
//5.编写代码
---------处理事情--------
//6.事务提交
transaction.commit();
//7.资源释放
session.close();
详细介绍:
(1)Configuration:用来加载hibernate的核心配置文件,配置文件可以是xml格式、属性文件格式。
1.Xml格式加载配置文件的方法:
Configuration configuration=new Configuration().configure();
2.属性文件格式加载配置文件的方法:
Configuration configuration=new Configuration();
由于属性文件中不能将文件映射到hibernate的核心文件中,故这种方法需要编程将文件映射进来:
configuration.addResource(“ com/sc/demo1/Customer.hbm.xml ”);
(2) SessionFactory: session工厂,内部维护了Hibernate线程池和二级缓存,是线程安全的,一个项目创建一次即可。
使用: SessionFactory sessionFactory = configuration.buildSessionFactory( );
Session session = sessionFactory.openSession( );
(3)Session: 代表的是Hibernate与数据库的链接对象,不是线程安全的。他是与数据库交互桥梁。
- session.save( ); 保存操作
- session.get( ); session.load( ); 都是查询操作,load是延时查询;get是立即查询
- session.update( ); 更新操作
- session.delete( ); 删除操作
(4)Transaction: Hibernate中管理事务的对象。
- transaction transaction=session.beginTransaction( ); 手动开启事务
- transaction.commit( ); 提交事务
- transaction.rollback( ); 事务回滚
session对数据库的CRUD操作:
//保存
Customer customer=new Customer();
customer.setCust_id(201622);
customer.setCust_name("xiao");
session.save(customer);
//id查询
//(1)get方法
Customer customer11=session.get(Customer.class, 7l);
System.out.println("get方法customer11:"+customer11);
//(2)load方法
Customer customer12=session.load(Customer.class, 7l);
System.out.println("load方法customer12:"+customer12);
//修改
//(1)直接修改
Customer customer21=new Customer();
customer21.setCust_id(7l);
customer21.setCust_name("汪雪飞");
session.update(customer21);
System.out.println("直接修改方法customer21:"+customer21);
//(2)间接修改
Customer customer22=session.get(Customer.class, 12l);
customer22.setCust_name("xiao飞飞");
session.update(customer22);
System.out.println("间接修改方法customer22:"+customer22);
//删除
//(1)直接删除
Customer customer31=new Customer();
customer31.setCust_id(7l);
session.delete(customer31);
//(2)间接删除(适合级联删除)
Customer customer32=session.get(Customer.class, 12l);
session.delete(customer32);
下接Hibernate持久化类详解:https://blog.youkuaiyun.com/biggerchong/article/details/84260707
---------谢谢您的阅读!加油! ----------知飞翀