1.Session管理
DepartmentDao.java
package cn.limbo.hibernate.dao;
import org.hibernate.Session;
import cn.limbo.hibernate.entities.Department;
import cn.limbo.hibernate.util.HibernateUtils;
public class DepartmentDao {
/**
* 若需要传入一个Session对象,则意味着上一层(Service)需要获取到Session对象,
* 这说明上一层需要和Hibernate的API紧密耦合,所以不推荐使用这种方式
* @param session
* @param department
*/
public void save(Session session,Department department)
{
session.save(department);
}
/**
* 内部获取Session对象,获取和当前线程绑定的Session对象
* 1.不许哟啊外部传入Session对象,
* 2.多个DAO方法可以使用一个事务
* @param department
*/
public void save(Department department)
{
Session session = HibernateUtils.getInstance().getSession();
System.out.println(session.hashCode());
session.save(department);
}
}
HibernateUtils.java
package cn.limbo.hibernate.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtils {
private SessionFactory sessionFactory;
private static HibernateUtils INSTANCE;
private HibernateUtils(){}
public static HibernateUtils getInstance()
{
if(INSTANCE == null)
INSTANCE = new HibernateUtils();
return INSTANCE;
}
public SessionFactory getSessionFactory()
{
if(sessionFactory == null)
{
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory;
}
public Session getSession() {
return getSessionFactory().getCurrentSession();
}
}
注意,使用getCurrentSession的时候需要设置cfg.xml中的属性
<!-- 配置管理Session的方式 -->
<property name="current_session_context_class">thread</property>
2.批量操作
建议使用JDBC原生的API进行批处理
public void testBatch()
{
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
//使用JDBC原生的方法最好
}
});
}