Hibernate要点(二)
来源:互联网 发布:淘宝小样 编辑:程序博客网 时间:2024/06/11 02:33
24.ThreadLocal:它会为每个线程维护一个私有的变量空间。实际上,
其实现原理是在JVM 中维护一个Map,这个Map的key 就是当前的线程对象,而value则是
线程通过ThreadLocal.set方法保存的对象实例。当线程调用ThreadLocal.get方法时,
ThreadLocal会根据当前线程对象的引用,取出Map中对应的对象返回。
这样,ThreadLocal通过以各个线程对象的引用作为区分,从而将不同线程的变量隔离开
来。
25.Hibernate官方开发手册标准示例:
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new
Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException(
"Configuration problem: " + ex.getMessage(),
ex
);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException
{
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}
26.通过filter实现session的重用:
public class PersistenceFilter implements Filter
{
protected static ThreadLocal hibernateHolder = new ThreadLocal();
public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain)
throws IOException, ServletException
{
hibernateHolder.set(getSession());
try
{
……
chain.doFilter(request, response);
……
}
finally
{
Session sess = (Session)hibernateHolder.get();
if (sess != null)
{
hibernateHolder.set(null);
try
{
sess.close();
}
catch (HibernateException ex) {
throw new ServletException(ex);
}
}
}
}
……}
27.Spring的参数化事务管理功能相当强大,笔者建议在基于Spring Framework的应用
开发中,尽量使用容器管理事务,以获得数据逻辑代码的最佳可读性。
public class UserDAO extends HibernateDaoSupport implements IUserDAO
{
public void insertUser(User user) {
getHibernateTemplate().saveOrUpdate(user);
}
}
上面的UserDAO实现了自定义的IUserDAO接口,并扩展了抽象类:
HibernateDaoSupport
HibernateSupport实现了HibernateTemplate和SessionFactory实例的关联。
HibernateTemplate对Hibernate Session操作进行了封装,而
HibernateTemplate.execute方法则是一封装机制的核心
*在spring的配置文件里,移植了整个hibernate.cfg.xml的内容。
其实现原理是在JVM 中维护一个Map,这个Map的key 就是当前的线程对象,而value则是
线程通过ThreadLocal.set方法保存的对象实例。当线程调用ThreadLocal.get方法时,
ThreadLocal会根据当前线程对象的引用,取出Map中对应的对象返回。
这样,ThreadLocal通过以各个线程对象的引用作为区分,从而将不同线程的变量隔离开
来。
25.Hibernate官方开发手册标准示例:
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new
Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException(
"Configuration problem: " + ex.getMessage(),
ex
);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException
{
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}
26.通过filter实现session的重用:
public class PersistenceFilter implements Filter
{
protected static ThreadLocal hibernateHolder = new ThreadLocal();
public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain)
throws IOException, ServletException
{
hibernateHolder.set(getSession());
try
{
……
chain.doFilter(request, response);
……
}
finally
{
Session sess = (Session)hibernateHolder.get();
if (sess != null)
{
hibernateHolder.set(null);
try
{
sess.close();
}
catch (HibernateException ex) {
throw new ServletException(ex);
}
}
}
}
……}
27.Spring的参数化事务管理功能相当强大,笔者建议在基于Spring Framework的应用
开发中,尽量使用容器管理事务,以获得数据逻辑代码的最佳可读性。
public class UserDAO extends HibernateDaoSupport implements IUserDAO
{
public void insertUser(User user) {
getHibernateTemplate().saveOrUpdate(user);
}
}
上面的UserDAO实现了自定义的IUserDAO接口,并扩展了抽象类:
HibernateDaoSupport
HibernateSupport实现了HibernateTemplate和SessionFactory实例的关联。
HibernateTemplate对Hibernate Session操作进行了封装,而
HibernateTemplate.execute方法则是一封装机制的核心
*在spring的配置文件里,移植了整个hibernate.cfg.xml的内容。
- Hibernate要点(二)
- hibernate框架学习要点(二)
- hibernate要点
- hibernate要点
- hibernate要点
- hibernate要点
- Hibernate要点
- hibernate要点
- Hibernate要点
- Hibernate要点
- hibernate要点
- Hibernate要点
- hibernate要点
- hibernate要点
- Hibernate 要点
- hibernate要点
- hibernate要点
- Hibernate面试要点 Hibernate
- 关于扁平工具条
- C#中的非托管资源释放(Finalize&Dispose)
- 使用UltraWebGrid控件分页功能注意事项
- (转)世界上最美丽的英文
- Hibernate要点(一)
- Hibernate要点(二)
- css
- ATL 中增加双接口
- 增添趣味: 给单调的 Windows 窗体应用程序增添趣味
- C#书写规范
- 位运算_求一个数有多少个因子2
- 素数_筛选法产生素数
- 认识ASP.NET配置文件Web.config
- 素数_判断是否素数