在编写java程序的时候总会和数据库打交道,大家都知道java是面向对象的编程语言、
在java里面一切都是类,java里面用的是对象模型,对象模型包括的概念有:继承、多态等;
而数据库是关系模型,反映的是表与表的关系、关系模型包括的概念有:表、主键、外键等,
在我们编写java程序时需要将对象模型与关系模型进行转换,通常采用两种方法来转换这两种关系:
1、使用数据库连接技术手工编写代码对数据库进行增删改查(CURD)的操作、
这种方法比较繁琐,代码重复量也很大,耗时耗力。
2、使用ORM(ObjectRelation Mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate、TopLink、OJB。
这种方法既方便又快捷。
我们来学习使用Hibernate
Hibernate的优点:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度
的简化DAO层的编码工作
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持
各种关系数据库,从一对一到多对多的各种复杂关系。
Hibernate工作原理:
原理:
1.读取并解析配置文件
2.读取并解析映射信息,创建SessionFactory
3.打开Sesssion
4.创建事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
使用Hibernate引入的jar包和作用说明:
(Hibernate3.2示例)
Hibernate配置文件
hibernate.cfg.xml文件:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/HibernateConfiguration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<propertyname="hibernate.connection.username">root</property>
<propertyname="hibernate.connection.password">root</property>
<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<propertyname="hibernate.hbm2ddl.auto">update</property>
<propertyname="show_sql">true</property>
<mappingresource="cn/zc/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
常用配置信息:
hibernate.connection.url 数据库url地址
hibernate.connection.driver_class 数据库驱动类名
hibernate.connection.username 数据库用户名
hibernate.connection.password 数据库密码
hibernate.dialect 数据库方言
hibernate.hbm2ddl.auto 是否自动生成数据库create|update|create-drop|validate
show_sql 输出所有SQL语句到控制台
hibernate.connection.isolation 设置JDBC事务隔离级别。
<mapping resource="cn/zc/domain/User.hbm.xml"/> 实体类映射文件
对于hbm2dll.auto 各个取值的意义如下:
1.create-drop : hibernate一开始就发送一个drop语句,再执行create语句创建表,当sessionFactory关闭时又执行drop语句删除表。结果就是,当表存在时,首先会被drop掉,然后又创建,最终被drop,如果表不存在,一开始虽然hibernate还是会发送drop语句,当时因为表不存在而drop失败。
2.create:hibernate首先会发送一个drop语句,如果表存在则会被drop掉,然后hibernate再发送create语句创建表。
3.update:hibernate会首先查询数据库看是否存在此表,如果存在则不管,如果不存在则会先发送一个create语句创建一个表。
4.validate:每次插入数据之前都会验证数据库中的表结构和hbm文件的结构是否一致。如果表不存在,则报错。