1:建立maven project
2:pom中添加hibernate支持包
1 <dependency> 2 <groupId>mysql</groupId> 3 <artifactId>mysql-connector-java</artifactId> 4 <version>5.1.31</version> 5 </dependency> 6 7 <dependency> 8 <groupId>org.hibernate</groupId> 9 <artifactId>hibernate-core</artifactId> 10 <version>4.3.0.Final</version> 11 </dependency>
3:创建实体类User
1 public class User { 2 private Long id; 3 private String title; 4 private Date date; 5 }
4:配置User.hbm.xml(文件放在工程根目录下)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping > 6 <class name="com.zlt.hibernatedemo.User" table="user"> 7 <id name="id" column="id"> 8 <generator class="increment"></generator> 9 </id> 10 11 <property name="date" column="data" type="timestamp"></property> 12 <property name="title"></property> 13 </class> 14 15 </hibernate-mapping>
5:配置hibernate.cfg.xml(文件放在工程根目录下)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <session-factory> 7 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 8 <property name="connection.url">jdbc:mysql://localhost:3306/hibernatetest</property> 9 <property name="connection.username">root</property> 10 <property name="connection.password">root</property> 11 12 <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 13 <property name="show_sql">true</property> 14 <property name="hbm2ddl.auto">create</property> 15 16 <mapping resource="User.hbm.xml"/> 17 </session-factory> 18 19 </hibernate-configuration>
6:创建session工具类 HibernateFactory.java
1 public class HibernateFactory { 2 //sessionFactory是一个线程安全的全局对象,只需要创建一次 3 public static final SessionFactory sessionFactory; 4 5 static { 6 try { 7 sessionFactory = new Configuration().configure().buildSessionFactory(); 8 } catch (Throwable ex) { 9 System.err.println("Initial SessionFactory creation failed." + ex); 10 throw new ExceptionInInitializerError(ex); 11 } 12 } 13 14 public static final ThreadLocal session = new ThreadLocal(); 15 16 public static Session currentSession() throws HibernateException { 17 Session s = (Session) session.get(); 18 // Open a new Session, if this thread has none yet 19 if (s == null) { 20 s = sessionFactory.openSession(); 21 // Store it in the ThreadLocal variable 22 session.set(s); 23 } 24 return s; 25 } 26 27 public static void closeSession() throws HibernateException { 28 Session s = (Session) session.get(); 29 if (s != null) 30 s.close(); 31 session.set(null); 32 } 33 34 }
Configuration接口负责加载配置文件得到内部数据
Configuration config = new Configuration().configure("/hibernate.cfg.mxl"); //前面带"/"表示在src根目录下开始寻找
Configuration config = new Configuration().configure(); //自动搜寻hibernate.cfg.mxl
SessionFctory接口负责创建Session实例,Configuration实例config会根据配置信息构造SessionFactory实例并返回,因此config变更也不会影响到SessionFactory的实例,同样如果应用需要访问多个数据库,针对每个数据库,应分别对其创建相应的SessionFactory实例,SessionFactory保存了当前数据库配置的所有映射关系,同时也负责维护当前的二级数据缓存和Statement Pool,SessionFactory创建过程非常复杂而且线程安全,应用中针对一个数据库共享一个SessionFactory实例即可
SessionFactory sessionFactory = config.buildSessionFactory();
Session是hibernate持久化操作的基础类,提供了save,update,delete等方法
Session非线程安全,即一个Session实例同时只可由一个线程使用,一个Session实例的多线程并发调用会导致难以预知的错误
Session session = sessionFactory.openSession();
7:测试程序
1 public class HibernateTest { 2 public static void main(String[] args) { 3 Session session = HibernateFactory.currentSession(); 4 Transaction tx = session.beginTransaction(); 5 User user = new User(); 6 user.setDate(new Date()); 7 user.setTitle("title"); 8 session.save(user); 9 10 tx.commit(); 11 session.close(); 12 } 13 }
8:结果