项目分为两个包VO和Util包,分别存放SessionFactory和实体类加XML。
实体类
package com.vo; public class Student { private int id; private String name; private int age; private String code; public Student(){} public Student(int id,String name){ this.id = id; this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
hibernate-config.xml用于配置数据库连接,注册MySql方言,注册Student.hbm.xml的mapping
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="myeclipse.connection.profile">mm</property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="connection.username">root</property> <property name="connection.url"> jdbc:mysql://localhost:3306/exam </property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <property name="cache.region.factory_class"> org.hibernate.cache.EhCacheRegionFactory </property> <property name="cache.use_query_cache">true</property> <property name="cache.use_second_level_cache">true</property> <property name="connection.password">970123</property> <mapping resource="com/vo/Student.hbm.xml" /> </session-factory> </hibernate-configuration>Student.hbm.xml用于编写Student的列名与属性名对应关系
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.vo.Student" table="student"> <cache usage="read-only"/> <id name="id" column="student_id"> <generator class="identity" /> </id> <property name="name" column="student_name" /> <property name="age" column="student_age" /> <property name="code" column="student_code" /> </class> </hibernate-mapping>HibernateSessionFactory类用于获取数据库Session保证连接不为空。
package com.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; / public class HibernateSessionFactory { private static Configuration configuration = new Configuration(); private static ServiceRegistry serviceRegistry; private static SessionFactory sessionFactory; private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); public static Configuration getConfiguration() { return configuration; } public static SessionFactory getSessionFactory() { return sessionFactory; } static{ configuration.configure("hibernate-config.xml"); serviceRegistry = new ServiceRegistryBuilder() .applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } private static void rebuildSessionFactory(){ configuration.configure(); serviceRegistry = new ServiceRegistryBuilder() .applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } public static Session getSession(){ Session session = threadLocal.get(); if(session==null || !session.isOpen()){ if(sessionFactory==null){ rebuildSessionFactory(); } session = (sessionFactory!=null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } public static void closeSession(){ Session session = threadLocal.get(); if(session!=null){ session.close(); threadLocal.set(null); } } }
测试类,用于单个数据插入的测试,
package com.util; import java.util.Iterator; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import com.vo.Student; public class TestHibernate { @Test public void saveStudent(){ Student student = new Student(); student.setAge(18); student.setName("学生"); student.setCode("008"); Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction();//开启事务 session.save(student); tx.commit(); HibernateSessionFactory.closeSession(); } }
测试结果,数据录入成功。