Hibernate大致的开发步骤如下(点击图片再查看,显示效果更好):
其中的第一步的配置文件Hibernate.cfg.xml文件的主要内容如下:
<hibernate-configuration>
<session-factory>
<!-- 链接链接数据库的基本信息 -->
<property name="connection.username">root</property>
<property name="connection.password">填写你的mysql的登录密码</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate5</property>
<!-- 配置Hibernate的基本信息 -->
<!-- Hibernate的方言 -->
<!-- <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> -->
<!-- 执行操作是是否在控制台打印sql -->
<property name="show_sql">true</property>
<!-- 是否对sql进行格式化 -->
<property name="format_sql">true</property>
<!-- 指定指定生成数据表策略(是否在数据控中自动生成表) -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定关联的.hbm.xml文件 -->
<mapping resource="cn/cloudspace/hibernate/helloworld/News.hbm.xml"/>
</session-factory>
</hibernate-configuration>
第二步持久化类.java文件的主要内容(省略getter、setter):
public class News {
private Integer id;
private String title;
private String author;
private Date date;
public News(String title, String author, Date date) {
super();
this.title = title;
this.author = author;
this.date = date;
}
public News() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "News [id=" + id + ", title=" + title + ", author=" + author + ", date=" + date + "]";
}
第三步对象关系映射文件.hbm.xml主要内容:
<hibernate-mapping>
<class name="cn.cloudspace.hibernate.helloworld.News" table="NEWS">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<!-- 指定主键的生成方,native:使用数据库本地生成方式(自动增长): -->
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" />
</property>
<property name="author" type="java.lang.String">
<column name="AUTHOR" />
</property>
<property name="date" type="java.util.Date">
<column name="DATE" />
</property>
</class>
</hibernate-mapping>
第四步Hibernate Api访问数据库文件的主要代码:
@Test
public void test() {
// 1、创建一个sessionFactory对象
SessionFactory sessionFactory = null;
// 1.1创建Configuration 对象:对应Hibernate的基本设置信息和对象映射关系
Configuration configuration = new Configuration().configure();
// 4.0之前这样创建
// sessionFactory = configuration.buildSessionFactory();
// 1.2 创建一个ServiceRegistry 对象,Hibernate 4.x以后添加的一个对象
// Hibernate的任何配置和服务都需要在该对象中注册易后方可使用
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
// 1.3
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
// 2、创建一个session对象
Session session = sessionFactory.openSession();
// 3、开启事务
Transaction transaction = session.beginTransaction();
// 4、执行保存操作
News news = new News("java", "helloworlld", new Date(new java.util.Date().getTime()));
session.save(news);
// 5、提交事务
transaction.commit();
// 6、关闭session
session.close();
// 7、关闭sessionFactory对象
sessionFactory.close();
}
Hibernate开发的主要流程就是以上内容了。
API解释说明:
Configuration类:
Configuration类负责管理Hibernate的配置信息。包括如下:
-Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类、数据库Dialect、数据库连接池等(对应hibernate.cfg.xml文件)
-持久化类与数据表的映射关系(.hbm.xml文件)
创建Configuration的两种方式:
---属性文件 (hibernate.properties)
Configuration cfg = new Configuration();
---Xml文件(hibernate.xfg.xml,推荐使用):
Configuration cfg = new Configuration().configure();
---Configuration的configure方法还支持带参数访问:
File file = new File("simple.xml");
Configuration cfg = new Configuration().configure(file);
SessionFactory接口:
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的。
---SessionFactory对象一旦构造完毕,既被赋予特定的配置信息。
---SessionFactory是生成Session的工厂。
---构造SessionFactory很耗费资源,一般情况下一个应用只初始化一个SessionFactory对象。
---Hibernate4新增了一个SevericeRegistry接口,所有基于Hibernate的配置或者服务都必须统一向这个接口注册后方可使用
Hibernate4中创建SessionFactory的步骤:
// 1.1创建Configuration 对象:对应Hibernate的基本设置信息和对象映射关系
Configuration configuration = new Configuration().configure();
// 4.0之前这样创建
//sessionFactory = configuration.buildSessionFactory();
// 1.2 创建一个ServiceRegistry 对象,Hibernate 4.x以后添加的一个对象
// Hibernate的任何配置和服务都需要在该对象中注册易后方可使用
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
// 1.3创建sessionFactory对象
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session接口:
-Session是应用程序与数据库之间交互操作的一个单线程接口,是Hibernate运作中心,所有的持久化对象必须在session的管理下才可以进行持久化操作,此对象的生命周期很短;Session有一个一级缓存,现实执行flash之前,所有的持久层操作都缓存在session对象中,相当于JDBC中的Connection。
-持久化类与Session关联起来以后就具有了持久化的能力。
-Session的方法
---取得持久化对象的方法:get()/set()
---持久化对象都的保存、更新、删除:save()、update()、saveOrUpdate()、delete()
---开启事务:beginTransaction()
---管理Session的方法:isOpen()、flush()、clear()、evict()、close()等
Transaction (事务):
-代表一次原子操作,它具有数据库事务概念。所有持久层都应该在该事务管理下进行,即使是只读操作。
Transaction transaction = session.beginTransaction();
-常用方法:
---commit():提交相关联的session实例
---rollback():撤销事务操作
---wasCommitted():检察事务是否提交
Hibernate配置文件的两个配置项:
-hbm2ddl.auto:该属性可帮助我们实现正向工程,即由Java代码生成数据库脚本,进而生成具体的表结构。(取值:create|update|create-drop|validate)
取值说明:
---create:会根据.hbm.xml文件来生成数据表,但是每一次运行都会删除上一次生成的表,重新生成表,哪怕第二次没有任何改变。
---create-drop:会根据.hbm.xml文件来生成数据表,但是SessionFactory一关闭,表就自动删除。
---update:最常用的属性值。也会根据.hbm.xml文件来生成数据表,但是若.hbm.xml文件和数据库中对应的数据表的表结构不同,Hibernate将更新数据表结构,但是不会删除已有的行和列。
---validate:会和数据库中的表进行比较若.hbm.xml文件中的列在数据库表中不存在,则标出异常。
-format_sqlL:是否将SQL转化为格式良好的SQL语句(取值:true|false)