HibernateDemo1

项目分为两个包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();
	}
}

测试结果,数据录入成功。


猜你喜欢

转载自blog.csdn.net/qq_33407846/article/details/80217725
1
(1)
>&1