1.Hibernate:底层依然是通过JDBC实现的,它是对JDBC进行了轻量级的封装。
Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的形式转换到一系列的对象中去。
Hibernate是java中一款开源的ORM框架。
2.持久化:将程序数据在持久状态和瞬时状态间的转换的一种机制
持久化应用:将内存中的对象存储在关系型数据库中/磁盘文件/XML数据文件中
瞬时状态:保存在内存中的数据,在程序退出后数据消失。
3.ORM(Object relational mapping)对象关系数据库映射技术
把对象模型表示的对象映射到基于SQL的关系型数据库结构中的技术。
是一种面向对象的编程方法,使用ORM方法可以避免写底层的sql语句,保证了java的跨平台、扩展、可维护。
4.其他主流的持久化层框架:
MyBatis Toplink EJB(重量级的,本身是JavaEE规范)等等
5.Hibernate优缺点:
①面向对象的思想来操作数据库
②可移植性:Hibernate做了持久化封装,所写代码具有可复用性。
③轻量级框架:不需要继承任何类,不需要实现任何接口。
缺点
①使用数据库特定的优化语句时候,不适合使用Hibernate
②Hibernate在批量数据处理时有弱势,不适合批量修改删除等操作,也是ORM框架的弱点
③效率比JDBC略差
二、Hibernate开发框架搭建
1.去官网下载相应的文档:
http://sourceforge.net/projects/hibernate/files/
下载相应的jdbc driver
mySql:http://dev.mysql.com/downloads/connector/j/3.0.html
oracle:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
导入下载的jar包到工程中
2.在src目录下创建hibernate.cfg.xml文件,完成基本配置
先对其中几个重要属性进行说明:
属性名称 | 值 | 作用 |
hibernate.connection.driver_class | com.mysql.jdbc.Driver等 | 数据库驱动名 |
hibernate.connection.url | * | 连接数据库名称 |
hibernate.connection.username | * | 数据库登陆用户名 |
hibernate.connection.password | * | 数据库登陆密码 |
hibernate.show_sql | true/false | 打印出sql语句 |
hibernate.format_sql | true/false | 格式化sql语句 |
hbm2ddl.auto | create/update/create-drop/validate | 生成表结构策略 |
hibernate.default_schema | * | 生成表结构时默认添加前缀 |
hibernate.dialect | org.hibernate.dialect.MySQLDialect等 | 方言 |
注:以上的属性名称均可以去掉hibernate.
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- oracle数据库驱动 --> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <!-- oracle想要连接的数据库名称 --> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property> <!-- 数据库的登陆用户名 --> <property name="connection.username">SUNYQ</property> <!-- 数据库的登陆密码 --> <property name="connection.password">123456</property> <!-- 方言:为每一种数据库提供适配器,方便转换 --> <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="Students.hbm.xml"/> </session-factory> </hibernate-configuration>
3.创建实体类Students.java
实体类的创建必须遵循JavaBeans的设计原则:
①公有类
②提供公有的不带参数的构造方法
③属性私有
④get/set封装
package com.iteye.sunyq.hibernate; public class Students { public Students() { } private int sid; private String sname; public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } }
4.创建对象/关系映射文件Students.hbm.xml
hbm配置中一些说明:
<hibernate-mapping中
属性名称 | 值 | 作用 |
schema | * | 模式名 |
catalog | * | 目录名 |
default-cascade | * | 级联风格 |
default-access | field/property/ClassName | 访问策略 |
default-lazy | true/false | 加载策略 |
package | * | 包名 |
<class中
属性名称 | 值 | 作用 |
name | * | 类别 |
table | * | 表名 |
batch-size | n | 一次抓取n条数据 |
where | * | 条件 |
entity-name | * | 同一个实体类映射成多个表 |
<id中
属性名称 | 值 | 作用 |
name | * | 属性名 |
type | * | 类型 |
column | * | 表中字段名称 |
length | * | 长度 |
<id中包含一个子标签是主键生成策略<generator class="native"></generator>
uuid | 按照uuid策略自动生成主键 |
assigned | 代码中手动给主键赋值 |
native | 根据数据库底层设置生成主键 |
foreign | 对应其他表主键 |
identity | SqlServer自增 |
increment | MySQL自增 |
sequence | Oracle自增 |
等等
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.iteye.sunyq.hibernate.Students" table="students"> <id name="sid" type="integer"> <column name="id"></column> <generator class="native"></generator> </id> <property name="sname" type="string"> <column name="sname"></column> </property> </class> </hibernate-mapping>
对于属性中的type可以有多种填写方式,还是以表格进行总结
基本类型
Hibernate映射类型 | Java类型 |
integer/int | java.lang.Integer/int |
long | java.lang.Long/long |
date | java.util.Date/java.sql.Date |
timestamp | java.util.Date/java.util.Timestamp |
time | java.util.Date/java.sql.Time |
calendar | java.util.Calendar |
calendar_date | java.util.calendar |
在填写type属性值时使用Hibernate类型或者java类型都可以
对象类型
Hibernate映射 | java | mySQL | Oracle | 标准SQL |
binary | byte[] | BLOB | BLOB | VARCHAR/BLOB |
text | java.lang.String | TEXT | CLOB | CLOB |
clob | java.sql.clob | TEXT | CLOB | CLOB |
BLOB | java.sql.Blob | BLOB | BLOB | BLOB |
5.将Student.hbm.xml文件加入hibernate.cfg.xml配置文件中
<mapping resource="Students.hbm.xml"/>
6.通过Hibernate API编写访问数据库的代码
package com.iteye.sunyq.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; public class Test { public static void main(String[] args) { //创建配置对象 Configuration config = new Configuration().configure(); //创建服务注册对象 ServiceRegistry service = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); SessionFactory sessionFactory = config.buildSessionFactory(service); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Students student = new Students(); session.save(student); transaction.commit(); session.close(); } }
Hibernate4使用ServiceRegistry服务注册对象来创建SessionFactory对象。
以上就能够完成简单的Hibernate框架的搭建了(亲测好用),但是实际的项目中可能还是有一定区别的。