Hibernate简介
Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有。
它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate。
Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。
Hibernate的运行过程如下图:
环境搭建
所使的驱动jar包:
antlr-2.7.6.jar
commons-collections-3.1.jar
commons-logging.jar
dom4j-1.6.1.jar
hibernate3.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.12.0.GA.jar
jta-1.1.jar
log4j-1.2.16.jar
ojdbc6.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.7.2.jar
第二步:建立实体类*.java
package com.bjpowernode.hibernate; import java.util.Date; public class User { //主键 private String id; //名称 private String name; //密码 private String password; //提供getter和setter方法 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; } }
第三步:提供*.hbm.xml文件,该文件可以说是实体生成表的配置文件。Hibernate会根据你写的实体类和相应的映射文件生成数据库表。
<?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 > <class name="com.bjpowernode.hibernate.User"> <id name="id"> <generator class="uuid"/> </id> <property name="name"/> <property name="password"/> <property name="createTime"/> <property name="expireTime"/> </class> </hibernate-mapping>
第四步:提供hibernate.cfg.xml文件,完成基本的配置信息,并将*.hbm.xml文件配置进入。(可以参考并修改成自己的)根据自己的需求进行取舍。cfg.xml是整个Hibernate的入口配置
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Hibernate要连接数据库的驱动。(此处使用mysql的,如果使用的替他数据库的,请上网查找) --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 指定连接数据库的url,此处数据库名为:hibernate_demo --> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_demo</property> <!-- 数据库的用户名和密码 --> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!-- 数据库的方言(用于将对象模型的存储生成相应的sql语句) --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 该项为true,当与数据库交互的时候,将在Console中打印 sql语句,方便学习 --> <property name="hibernate.show_sql">true</property> <!-- 指定连接池里最大连接数 --> <property name="hibernate.c3p0.max_size">20</property> <!-- 指定连接池里最小连接数 --> <property name="hibernate.c3p0.min_size">1</property> <!-- 指定连接池里连接的超时时长 --> <property name="hibernate.c3p0.timeout">5000</property> <!-- 配置此属性,程序会根据需要自动创建表 --> <property name="hbm2ddl.auto">update</property> <!-- 显示Hibernate持久化操作所生成的SQL --> <property name="show_sql">true</property> <!-- 将SQL脚本进行格式化后再输出 --> <property name="hibernate.format_sql">true</property> <!-- 列出每个要映射的 类 --> <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/> </session-factory> </hibernate-configuration>
使用工具类,将已经生成的实体类,映射到数据库中(生成数据库表)
如果使用了设置了<propertyname="hbm2ddl.auto">update</property> 那么就不用写工具类了。
注意:数据库需要手动建立。
Hibernate的一个特点,耦合性低,容易单元测试。所以最好建立一个单元测试类。测试一下代码的连通性。
第五步:写单元测试类。调试是否成功。也是检验代码的质量
package com.bjpowernode.hibernate; import org.hibernate.Session; import junit.framework.TestCase; public class UserTest extends TestCase { public void testSave1(){ Session session=null; try{ session=HibernateUtils.getSession(); //开启事务 session.beginTransaction(); User user=new User(); user.setName("张三"); user.setPassword("123456"); //事务提交 session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); //事务回滚 session.getTransaction().rollback(); }finally{ //关闭Session HibernateUtils.closeSession(session); } } }