需求背景

如果你的插件功能比较复杂,涉及的数据表比较多,并且你需要频繁的保存或者更新操作.

JDBC无法满足使用,使用Hibernate更便捷的操作数据库吧!

核心代码解释

1.插件获取Hibernate Session

因为插件是属于OSGI架构中的热部署模块,和Joget Core模块是分开的. 因此你无法直接获取到Hibernate的Session

只能通过切换ClassLoader做到


2.Dao层封装

虽然切换了线程,但是Dao层仍需要继承抽象类来 findSession()

3.愉快的使用Hibernate编写代码吧

  1. Xml定义Dao
  2. resource 定义entity.hbm.xml
  3. model定义 entity.java

使用Hibernate其实也较为复杂,在使用之前,我建议先参考这篇文章如何在插件中对数据表进行CRUD


public class ProductsDaoImpl extends AbstractSpringDao implements ProductsDao {

    @Override
    public Session findSession() {
        Session session = null;
        SessionFactory sf = super.getSessionFactory();
        
        try {
            session = sf.getCurrentSession();
        } catch (Exception e) {}
        
        if (session == null) {
            session = sf.openSession();
        }
        
        return session;
    }
}
  • No labels