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();
}
});
}
以上が基本的なパッケージング方法であり、プロジェクトで使用するのに非常に便利である.