这篇笔记中,我们就先让Hibernate跑起来,对它如何使用形成直观性认识。当然开发工具为Eclipse 3.5+Hibernate Tools for Eclipse 插件+mySQl 5.1。在开始新建项目之前,使用mysql建立一个数据库-customer,里面新建表格Customer(id int, name varchar)。
1. 新建Java项目,引入数据库连接包(此处使用mysql 5.1)和Hibernate3.6的包。Hibernate3.6必须的包有:hibernate3.jar, antlr-2.7.6.jar, commons-collections-3.1.jar, dom4j-1.6.1.jar, javassist-3.12.0.GA.jar, jta-1.1.jar, slf4j-api-1.6.1.jar, hibernate-jpa-2.0-api-1.0.0.Final.jar。
2. 利用Hibernate Tools插件创建hibernate.cfg.xml全局配置文件,进行数据库连接的配置。
在src下,新建-other-hibernate-hibernate configuration file(cfg.xml),同时设置Hibernate Console configuration,为根据数据库生成映射文件(.hbm.xml)和实体类做准备。(具体步骤参考上篇笔记的链接)
3. 使用Hibernate Code Generation,产生映射文件和实体类。
项目的结构图如下:
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory name="TestSessionFactory"> <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/customer</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 映射文件,指出完全路径 --> <mapping resource="test/hibernate/Customer.hbm.xml"/> </session-factory> </hibernate-configuration>
对象/关系映射文件Customer.hbm.xml,指出了类Customer和数据库中表格customer的对应关系:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2011-4-12 20:12:47 by Hibernate Tools 3.3.0.GA --> <hibernate-mapping> <!-- 类名字为类的具体路径 --> <class name="test.hibernate.Customer" table="customer" catalog="customer"> <!-- 类标识-主键 --> <id name="id" type="java.lang.Integer"> <column name="id" /> <!-- 主键的生成方式 --> <generator class="identity" /> </id> <!-- 类属性-字段 --> <property name="name" type="string"> <column name="name" length="20" not-null="true" /> </property> </class> </hibernate-mapping>
Customer类就不贴代码了,为简单的Bean。只有get,set方法。
HibernateHelper类用于获得Hibernate的SessionFactory:
package test.hibernate; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateHelper { private static SessionFactory sessionFactory; static { try{ sessionFactory = new Configuration().configure("test/hibernate/hibernate.cfg.xml") .buildSessionFactory(); }catch(Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static void close(){ sessionFactory.close(); } }
补充:Configuration是Hibernate的入口,用于加载全局配置文件和映射文件以此创建SessionFactory。有不同的使用方式:
/* * 此方法Hibernate会在classpath下寻找hibernate.properties文件; * 找不到则会抛出异常 */ Configuration cfg=new Configuration(); /* * configure()方法会在classpath下面找hibernate.cfg.xml文件 * 根据cfg.xml文件加载映射文件 */ Configuration cfg1=new Configuration().configure(); //指出特定的cfg.xml,要用全路径 Configuration cfg2=new Configuration().configure("test/hibernate/myHiber.cfg.xml");
当然,还可以动态制定映射文件、设置配置属性,这里都不再作介绍,因为此方法丧失了配置文件的方便性和可维护性。虽然也可以使用.properties文件,但鼓励使用xml文件。
Main类
package test.hibernate; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; @SuppressWarnings("unchecked") public class Main { public static void main(String[] args) { //session如同JDBC connection对于JDBc一样 Session session = HibernateHelper.getSessionFactory().openSession(); Transaction transaction = session.beginTransaction(); Query query = session.createQuery("from Customer c"); List result = query.list(); for(Object aRe:result){ Customer customer=(Customer) aRe; System.out.println(customer.getName()); } transaction.commit(); session.close(); } }