文章来源: http://blog.csdn.net/jiuqiyuliang/article/details/39078749/
持久化(Persistence),把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
Hibernate是对JDBC进一步封装
是持久层的框架
Hibernate是开源的一个ORM(对象关系映射)框架:
ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。
Hibernate六大核心接口,两个主要配置文件,以及他们直接的关系。
1、Configuration接口:负责配置并启动Hibernate
2、SessionFactory接口:负责初始化Hibernate
3、Session接口:负责持久化对象的CRUD操作
4、Transaction接口:负责事务
5、Query接口和Criteria接口:负责执行各种数据库查询
注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。
实例项目:
User.java
package com.kangjie.User; import java.util.Date; public class User { private String id; private String name; private String password; private Date createTime; private Date expireTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getExpireTime() { return expireTime; } public void setExpireTime(Date expireTime) { this.expireTime = expireTime; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", password=" + password + ", createTime=" + createTime + ", expireTime=" + expireTime + "]"; } }
App.java
package com.kangjie.User; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; public class App { private static SessionFactory sessionFactory; static { Configuration cfg = new Configuration(); cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件 sessionFactory = cfg.buildSessionFactory(); // 生成Session工厂 } @Test public void testSave() throws Exception { User user = new User(); user.setName("jiuqiyuliang"); user.setPassword("123456"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); Session session = sessionFactory.openSession(); //打开一个新的Session Transaction tx = session.beginTransaction(); // 开始事务 session.save(user); tx.commit(); //提交事务 session.close(); // 提交事务 }
User.hbm.xml
<?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 package="com.kangjie.User"> <class name="User" table="User"> <id name="id"> <!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID --> <generator class="uuid"></generator> </id> <property name="name"></property> <property name="password"></property> <property name="createTime" type="date"></property> <property name="expireTime" type="date"></property> </class> </hibernate-mapping>
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory name="foo"> <!-- 配置数据库信息 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.url">jdbc:mysql://139.196.170.62:3307/mysite</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username">kangjie</property> <property name="hibernate.connection.password">Kangjie_456</property> <!-- 其他配置 --> <property name="hibernate.show_sql">true</property> <!-- <property name="hibernate.format_sql">false</property> create:先删除,再创建 update:如果表不存在就创建,不一样就更新,一样就什么都不做。 create-drop:初始化时创建表,SessionFactory执行close()时删除表。 validate:验证表结构是否一致,如果不一致,就抛异常。 <property name="hbm2ddl.auto">update</property> --> <!-- 导入映射文件 --> <mapping resource="com/kangjie/User/User.hbm.xml"/> </session-factory> </hibernate-configuration>