Hibernate原理与应用
一、JDBC数据库连接
1、JDBC的优点:直接底层操作,提供了很简单、便捷的访问数据库的方法,跨平台性比较强。灵活性比较强,可以写很复杂的SQL语句。
2、JDBC的缺点:
1).因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。
2).操作比较繁琐,很多代码需要重复写很多次。
3).如果遇到批量操作,频繁与数据库进行交互,容易造成效率的下降。
二、引入
1、模型不匹配(阻抗不匹配):Java面向对象语言,对象模型,其主要概念有:继承、关联、多态等;数据库是关系模型,其主要概念有:表、主键、外键等。
2、解决办法
1)、使用JDBC手工转换。
2)、使用ORM(Object Relation Mapping对象关系映射)框架来解决。
3、Hibernate是一个开源ORM框架。
4、ORM全称ObjectRelation Mapping,即对象关系映射。它是一种用来完成对象模型到关系模型的映射技术。就是把应用程序中的对象数据持久化到关系数据库的表的一种技术。
5、使用ORM( ObjectRelation Mapping )框架来解决。主流的ORM框架有JBoss公司的Hibernate、Oracle公司的TopLink、Apache组织的OJB、Sun公司的JDO。
6、简单的说:ORM能利用面向对象的思想开放基于关系型数据库的应用程序,它的主要工作是将对象数据保存到关系数据库的表中,以及将关系数据库表中数据读入到对象中。
三、安装配置
1、下载地址http://www.hibernate.org,使用3.3版本。
2、解压获取必需类库文件
3、将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:
如图:
4、配置文件hibernate.cfg.xml和hibernate.properties,XML和properties两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件。
可以在配置文件指定:数据库的URL、用户名、密码、JDBC驱动类、方言等。启动时Hibernate会在CLASSPATH里找这个配置文件。
5、映射文件(hbm.xml,对象模型和关系模型的映射)。
6、编写示例步骤:
1).新建java项目,并加入相应的jar包,及jdbc驱动。
2).创建持久化类
3).准备数据库表
4).创建配置文件 hibernate.cfg.xml
5).创建映射文件 xxx.hbm.xml
6.创建测试文件
7、使用事项:
1)Hibernate.connection.url 表示要链接的数据库地址
2)Hibernate.connection.driver_class 表示要链接的数据库的驱动类
3)Hibernate.connection.username 要连接的数据库的用户名
4)Hibernate.connection.password 要连接的数据库的密码
5)Hibernate.dialect 表示要使用的数据库的类型
org.hibernate.dialect.MySQL5Dialect mysql数据库
org.hibernate.dialect.Oracle9Dialect oracle数据库
org.hibernate.dialect.SQLServerDialect SQLServer数据库
6)hibernate.hbm2ddl.auto
validate:加载hibernate时验证创建表结构
update:加载hibernate自动更新数据库结构,如表存在不创建,如不存在创建。
create:每一次加载hibernate时都创建表结构
create-drop:加载hibernate时创建,退出时删除
四、基本概念和CURD
1、开发流程
1)、由Domainobject -> mapping->db。(官方推荐)
2)、由DB开始,用工具生成mapping和Domain object。(使用较多)
3)、由映射文件开始。
2、Domain Object限制
1)、默认的构造方法(必须的)。
2)、有无意义的标示符id(主键)(可选)
3)、非final的,对懒加载有影响(可选)
3、对象关系映射文件:把面向对象中的实体类对象映射到数据库中的实体(表的记录),把实体类之间的关联关系也映射到数据库中多个表之间的相互关系中。这样,在Hibernate中对这些实体对象的操作就直接转换为对数据库表的记录的操作。
4、使用的类和接口
1).Configuration类:是Hibernate的入口,它负责配置并启动Hibernate。Hibernate通过Configuration的实例加载配置文件信息,然后读取指定对象关系映射文件的内容并创建SessionFactory实例。
2).SessionFactory接口:负责初始化Hibernate。一个SessionFactory实例对应一个数据库。应用程序从SessionFactory中获得Session实例。
3).Session接口:Session被称为持久化管理器,负责管理与持久化相关的操作:存储、更新、删除和加载对象。
4).Transaction接口:是Hibernate框架的事务接口。它对底层的事务接口做了封装。包括:JDBC API和JTA。
5)Session的缓存(一级缓存):Session的CRUD方法以及调用查询接口的list(),iterate()方法时,如果session缓存中不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中,如果session缓存中已经存在这个对象,就不需在去数据库加载,而直接使用缓存中的对象。
flush: 进行清理缓存(此时缓存中的数据并不丢失)的操作,让缓存和数据库同步执行一些列sql语句,但不提交事务,;
commit:先调用flush() 方法,然后提交事务. 则意味着提交事务意味着对数据库操作永久保存下来。
session的缓存一般交由hibernate框架自动管理。