第一章 初识Hibernate
ORM 对象/关系映射(Object/Relationship Mapping)
写SQL语句的缺点:
*不同的数据库使用的SQL语法不同
*同样的功能在不同的数据库中有不同的实现方式,比如分页
*程序过分依赖SQL对程序的移植及扩展,维护等带来很大的麻烦
Hibernate是Java领域的一款开源的ORM框架技术
Hibernate对JDBC进行了非常轻量级的对象封装
其它主流的ORM框架技术:
1.MyBatis:前身就是著名的iBatis
2.Toplink:后被oracle收购,并重新包装为Oracle AS TopLink
3.EJB:本身是JAVAEE的规范,重量级
开发前准备:插件Hibernate Tools for Eclipse Plugins
Jboss公司推出的一个Eclipse综合开发工具插件,该插件可以简化ORM框架Hibernate
以及JBoss Seam,EJB3等的开发工作
第一个例子:创建Hibernate的配置文件;创建持久化类;创建对象-关系映射文件;通过Hibernate API编写访问数据库的代码
导入Hibernate必须的jar包 导入Mysql的jdbc驱动 导入junit架包
使用Junit进行测试 @Test:测试方法 @Before:初始化方法 @After:释放资源
第二章 Hibernate进阶
hibernate.cfg.xml常用配置
hibernate.show_sql 是否把运行时的SQL语句输出到控制台,编码阶段便于测试
hibernate.format_sql输出到控制台的SQL语句是否进行排版,便于阅读。建议设置true
hbm2ddl.auto可以帮助由java代码生成的数据库脚本,进而生成具体的表结构。create|update|create-drop|validate
hibernate.default_schema默认的数据库
hibernate.dialect配置Hibernate数据库方言,Hibernate可针对特殊的数据库进行优化
<!-- 一次读的数据库记录数 -->
<property name="hibernate.jdbc.fetch_size">50</property>
<!-- 设定对数据库进行批量删除 -->
<property name="hibernate.jdbc.batch_size">30</property>
hibernate.max_fetch_depth设置外连接抓取树的最大深度取值. 建议设置为0到3之间
<property name="hibernate.connection.SetBigStringTryClob">true</property>
可以像操作String一样操作CLOB
CLOB和BLOB的区别
CLOB使用CHAR来保存数据。 如:保存XML文档。
BLOB就是使用二进制保存数据。 如:保存位图。
session简介
*hibernate执行流程
创建一个配置对象Configuration,用来读取hibernate.cfg.xml配置文档
创建SessionFactory对象,加载相应的对象关系映射文件
创建Session对象,相当于获得了一个数据库连接对象,可以执行session对象相应的方法(增删改查)
开启事务,执行完session的方法之后需要提交事务,最后关闭session
hibernate是对jdbc的封装,不建议直接使用jdbc的connection操作数据库,而是通过使用session操作数据库。
session与connection是多对一的关系,每个session都有一个与之相对应的connection,一个connection不同时刻可以供多个session使用。
hibernate对数据的操作都是封装在事务中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。
openSession getCurrentSession
后者在事务提交或者回滚之后会自动关闭,前者openSession需要你手动关闭,如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
openSession每次创建一个新对象。getCurrentSession使用现有的对象。
第三章 Hibernate单表操作
单一主键
assigned由java应用程序负责生成(手工赋值)
native由底层数据库自动生成标识符,如果是MySQL就是increment,如果是oracle就是sequence
基本类型
Hibernate映射类型 Java类型 描述
integer/int java.lang.Integer/int 整型
date java.util.Date/java.sql.Date 代表日期:yyyy-MM-dd
time java.util.Date/java.sql.Date 代表时间:hh:mi:ss
timestamp java.util.Date/java.sql.Timestamp 代表时间和日期:yyyymmddhhmiss
对象类型 java类型 描述
clob java.sql.Clob 大文本类型
blob java.sql.Blob 大二进制数据文件(音频,视频,图片)
binary byte[]
text java.lang.String
Mysql不支持标准SQL的CLOB类型,在Mysql中,用text,mediumtext,longtext类型来表示超过长度为225的长文本数据。
组件属性------实体类中的某个属性属于用户自定义的类的对象
总结Hibernate开发的基本步骤:
1)编写配置文档hibernate.cfg.xml
2)编写实体类
3)生成对应实体类的映射文件并添加到配置文件中
4)调用API的函数并测试