SSHプロジェクトではHibernate下地で簡単なパッケージDAO層

21997 ワード

くだらない話はあまりありません.主にhibernateのクエリー方法を使って、自分でDAO層をカプセル化して、サービスで使いやすいようにしました.
まず、継承する必要があります.
public class CommonDao extends HibernateDaoSupport

次に、必要なデータ・ソースを注入します.
 @Resource
    private SessionFactory sessionFactory;

    @PostConstruct
    public void initSessionFactory() {
        super.setSessionFactory(sessionFactory);
    }

では、次は簡単な方法でカプセル化されています.
 /**
     * 
     *     :       
     * 
     * @param hql
     * @return
     */
    public List getManyObjects(String hql) {
        return getHibernateTemplate().find(hql);
    }
   /**
     * 
     *     :    ,   ,      
     * 
     * @param hql
     * @param args
     * @return
     */
    public List getManyObjects(String hql, Object[] args) {
        return getHibernateTemplate().find(hql, args);
    }
  /**
     * 
     *     :    ,   ,      
     * 
     * @param hql
     * @param args
     * @return
     */
    public Object getOneObject(String hql, Object[] args) {
        List list = getHibernateTemplate().find(hql, args);
        if (list == null || list.size() == 0) {
            return null;
        } else {
            return list.get(0);
        }
    }
 /**
     * 
     *     :       
     * 
     * @param obj
     * @return
     */
    public Object save(Object obj) {
        return getHibernateTemplate().save(obj);
    }
 /**
     * 
     *     :       
     * 
     * @param objs
     * @return
     */
    public List saveAll(List objs) {
        if (objs == null || objs.size() == 0) {
            return null;
        }
        List list = new ArrayList();
        for (Object ob : objs) {
            list.add(save(ob));
        }
        return list;
    }
 /**
     * 
     *     :       
     * 
     * @param obj
     * @return
     */
    public void update(Object obj) {
        getHibernateTemplate().update(obj);
    }
  /**
     * 
     *     :   /      
     * 
     * @param obj
     * @return
     */
    public void merge(Object obj) {
        getHibernateTemplate().merge(obj);
    }
 /**
     * 
     *     :   /      
     * 
     * @param obj
     * @return
     */
    public void saveOrUpdate(Object obj) {
        getHibernateTemplate().saveOrUpdate(obj);
    }
 /**
     * 
     *     :     
     * 
     * @param obj
     */
    public void delete(Object obj) {
        getHibernateTemplate().delete(obj);
    }
/**
     * 
     *     :      
     * 
     * @param list
     */
    public void saveManyObjects(List list) {
        if (list == null || list.size() == 0) {
            return;
        }
        for (int i = 0; i < list.size(); i++) {
            getHibernateTemplate().save(list.get(i));
        }
    }
 /**
     *     :   HQL
     * 
     * @param hql
     * @return
     */
    public int bulkUpdate(String hql) {
        return getHibernateTemplate().bulkUpdate(hql);
    }
 /**
     * 
     *     :   HQL,   
     * 
     * @param hql
     * @param params
     * @return
     */
    public int bulkUpdate(String hql, final Object[] params) {
        return getHibernateTemplate().bulkUpdate(hql, params);
    }
 /**
     * 
     *     :        SQL
     * 
     * @param sql
     */
    public void executeNativeSqlUpdate(final String sql) {
        this.getHibernateTemplate().execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws SQLException {
                session.createSQLQuery(sql).executeUpdate();
                return null;
            }
        });
    }
 /**
     * 
     *     :        SQL    
     * 
     * @param sql
     * @param params
     */
    public void executeNativeSqlUpdate(final String sql, final Object[] params) {
        this.getHibernateTemplate().execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws SQLException {
                Query query = session.createSQLQuery(sql);
                if (params != null && params.length > 0) {
                    for (int i = 0; i < params.length; i++) {
                        query.setParameter(i, params[i]);
                    }
                }
                query.executeUpdate();
                return null;
            }
        });
    }
 /**
     * 
     *     :       SQL,   
     * 
     * @param sql
     * @return
     */
    public List executeNativeSqlQuery(final String sql, final Object[] params) {
        List list = (List) this.getHibernateTemplate().execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws SQLException {
                Query query = session.createSQLQuery(sql);
                if (params != null && params.length > 0) {
                    for (int i = 0; i < params.length; i++) {
                        query.setParameter(i, params[i]);
                    }
                }
                return query.list();
            }
        });
        return list;
    }
 /**
     * 
     *     :     
     * 
     * @param sql
     * @param firstRow
     * @param maxRow
     * @return
     */
    public List findByPage(final String sql, final int firstRow, final int maxRow) {
        return getHibernateTemplate().executeFind(new HibernateCallback() {

            public Object doInHibernate(Session session) throws SQLException {
                Query q = session.createQuery(sql);
                q.setFirstResult(firstRow);
                q.setMaxResults(maxRow);
                return q.list();
            }

        });
    }
  /**
     * 
     *     :      
     * 
     * @param sql
     * @return
     */
    public int findTotal(final String sql) {
        Long total = (Long) getHibernateTemplate().execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws SQLException {
                String countHQL = "select count(1) " + sql;
                Query q = session.createQuery(countHQL);
                Long total = (Long) q.uniqueResult();
                return total;
            }

        });
        if (total != null) {
            return total.intValue();
        } else {
            return 0;
        }
    }
 /**
     *        SQL            java  
     * @param sql   SQL    
     * @param params SQL    
     * @param clazz    
     * @return List
     */
    public List executeNativeSqlQueryForClass(final String sql, final Object[] params, final Class clazz) {
        List list = (List) this.getHibernateTemplate().execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException, SQLException {
                Query query = session.createSQLQuery(sql).addEntity(clazz);
                if (params != null && params.length > 0) {
                    for (int i = 0; i < params.length; i++) {
                        query.setParameter(i, params[i]);
                    }
                }
                return query.list();
            }
        });
        return list;
    }
 /**
     * 
     *     :    sql      List<map>    
     * 
     * @param sql
     * @return
     */
    public List findMapBySql(final String sql) {
        return getHibernateTemplate().executeFind(new HibernateCallback() {

            public Object doInHibernate(Session session) throws SQLException {
                SQLQuery query = session.createSQLQuery(sql);
                query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
                return query.list();
            }

        });
    }

以上が基本的なパッケージング方法であり、プロジェクトで使用するのに非常に便利である.