廢話不多少了,主要是使用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(); } }); }
以上就是一些基本的封裝方法,可以非常方便的供項目中使用.