本节将开始,使用hibernate搭建持久层。当然在决定用不用之前,还请斟酌一下是否使用。了解一下Hibernate的优缺点。
Hibernate优劣对比
Hibernate是一个持久的ORM框架,首先要简历一个Java Project 这个就不用多说了吧。之后,我们来搭建Hibernate框架。
第一步:引入相关Jar包。包含两部分,核心jar包(Hibernate_Home/hibernate3.jar)和相关包(Hibernate_Home/lib/*.jar) 如上图。
如果没有,请去下载Hibernate,解压之后 如图:
第二步:建立实体类*.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); } } }
通过上面几个步骤,将Hibernate的架构搭建起来。通过自测的方式逐步开发。Hibernate的核心就是OR的转换,即编写hbm映射文件。接下来,我们会在后续讲解