Hibernate快速上手

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>
        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/snlu</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.jdbc.fetch_size">5</property>
        <property name="hibernate.max_fetch_depth">1</property>
        <property name="hibernate.search.autoregister_listeners">false</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.validator.apply_to_ddl">false</property>
        <mapping resource="dto/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>

注:mapping resource路径为包名+类名

hibernateUtil

package util;

import javassist.bytecode.stackmap.BasicBlock.Catch;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
	// SessionFactory会话工厂
	private static SessionFactory sessionFactory = null;
	// 线程局部变量管理
	private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

	// 写在static块是因为该块只会被类被ClassLoader加载到虚拟机的时候执行一次
	static {
		try {
			// 使用Configuration()对象.configure()方法去读取src/hibernate.cfg.xml配置文件
			sessionFactory = new Configuration().configure().buildSessionFactory();// 产生一个SessionFactory
		} catch (Throwable e) {// 如果在执行static块的时候出现任何的Throwable(Error和Exception的类的父类)则处理
			// 抛出明确的static程式错误的异常
			throw new ExceptionInInitializerError(e);
		}
	}

	/**
	 * 
	 * 获得SessionFactory这个就不说了
	 * 
	 * @return SessionFactory
	 */
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	/**
	 * 获得Session会话对象
	 * 
	 * @return Session
	 */

	public static Session getSession() {
		// 首先从线程局部变量中有没有session,以免还要openSession();
		Session session = threadLocal.get();
		// 如果是空或者没有打开
		if (session == null || !session.isOpen()) {
			// 则打开(因为static块有可能出错,所以这里进行三元判断)
			session = sessionFactory != null ? sessionFactory.openSession()
					: null;
			// 设置到线程局部变量中
			threadLocal.set(session);
		}
		return session;
	}

	// 关闭Session
	public static void closeSession() {
		// 获得线程局部变量中的session
		Session session = threadLocal.get();
		// 设置为空,当再次调用openSession()的时候才能打开Session
		threadLocal.set(null);
		if (session != null) {
			session.close();
		}
	}
}

dto User

package dto;

import java.io.Serializable;

public class User  implements Serializable{
	private int id;
	
	private String name;
	
	private String password;
	
	private String type;
	
	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 String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	

}

User的xml

<?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 2015-6-16 21:19:24 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
	<class name="dto.User" table="user" catalog="snlu">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="identity" />
		</id>
		<property name="name" type="string">
			<column name="name" />
		</property>
		<property name="password" type="string">
			<column name="password" />
		</property>
		<property name="type" type="string">
			<column name="type" />
		</property>
	</class>
</hibernate-mapping>

注:class 里的name属性为包名加类名

UserDAO

package dao;

import dto.User;

public interface UserDAO {
	void save(User user);
	User findById(int id);
	void delete(User user);
	void update(User user);
}

UserDAOImpl

package dao;

import org.hibernate.Session;
import org.hibernate.Transaction;

import util.HibernateUtil;
import dto.User;

public class UserDAOImpl implements UserDAO {

	@Override
	public void save(User user) {
		Session session = HibernateUtil.getSession(); // 生成session实例
		Transaction tx = session.beginTransaction(); // 创建Transaction实例
		try {
			session.save(user);
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tx.rollback();
		} finally {
			HibernateUtil.closeSession();
		}
	}

	@Override
	public User findById(int id) {
		User user = null;
		Session session = HibernateUtil.getSession(); // 生成session实例
		Transaction tx = session.beginTransaction(); // 创建Transaction实例
		try {
			user = (User) session.get(User.class, id);
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tx.rollback();
		} finally {
			HibernateUtil.closeSession();
		}
		return user;
	}

	@Override
	public void delete(User user) {
		Session session = HibernateUtil.getSession(); // 生成session实例
		Transaction tx = session.beginTransaction(); // 创建Transaction实例
		try {
			session.delete(user);
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tx.rollback();
		} finally {
			HibernateUtil.closeSession();
		}

	}

	@Override
	public void update(User user) {
		Session session = HibernateUtil.getSession(); // 生成session实例
		Transaction tx = session.beginTransaction(); // 创建Transaction实例
		try {
			session.update(user);
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tx.rollback();
		} finally {
			HibernateUtil.closeSession();
		}

	}

}

DaoFactory

package dao;

public class DAOFactory {
	public static UserDAO getUserDAOInstance(){
		return new UserDAOImpl();
	}
}

UserTest

package test;

import org.junit.Test;

import dao.DAOFactory;
import dao.UserDAO;
import dao.UserDAOImpl;
import dto.User;

public class UserTest {
	@Test
	public void testSave(){
		UserDAO dao=DAOFactory.getUserDAOInstance();
		try{
			User user=new User();
			user.setName("zhangsa");
			user.setPassword("123");
			user.setType("admin");
			dao.save(user);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}


你可能感兴趣的:(java,Hibernate,ssh)