SSH 项目中 用Hibernate底层 简单的封装DAO层

Posted 青天流云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH 项目中 用Hibernate底层 简单的封装DAO层相关的知识,希望对你有一定的参考价值。

废话不多少了,主要是使用hibernate的查询方法,自己封装了DAO层,供service来方便使用.

首先:必须要继承的

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();
            }

        });
    }

以上就是一些基本的封装方法,可以非常方便的供项目中使用.

以上是关于SSH 项目中 用Hibernate底层 简单的封装DAO层的主要内容,如果未能解决你的问题,请参考以下文章

SSH进阶之路Hibernate基本映射

SSH进阶之路Hibernate基本映射

SSH进阶之路Hibernate映射——一对一单向关联映射

用eclipse搭建SSH(struts+spring+hibernate)框架

IDEA + SSH OA 第一天(项目收获:Hibernate XML)

用Eclipse搭建ssh框架