通用DAO

import java.io.Serializable;
import java.util.List;
import java.util.Map;

@SuppressWarnings("unchecked")
public interface GenericDao<T,ID extends Serializable> {

/**
* 根据id加载实体,没有返回
* @param id
* @return
*/
T get(ID id);

/**
* 没有则抛出异常
* @param id
* @return
*/

T load(ID id);

/**
* 保存实体
* @param entity
* @return
*/
void save(T entity);

/**
* 更新实体
* @param entity
*/
void update(T entity);

/**
* 删除实体
* @param entity
*/
void delete(T entity);

/**
* 根据ID删除数据
* @param id
*/
void deleteById(ID id);

/**
* 得到所有的实体
* @return
*/
List<T> findAll();

/**
* 得到所有实体记录
* @return
*/
int count();

/**
* 根据hql得到记录集
* @param hql
* @param params
* @return
*/
List<T> findByHql(final String hql,Object...params);

/**
* 根据hql得到查询记录数
* @param hql
* @param params
* @return
*/
int countByHql(final String hql,Object...params);


/**
* 同步缓存和数据库
*/
public void flush();

public void clear();

/**
* 排序方法
* @param entityClass 实体类型
* @param orderBy 按什么排序
* @param isAsc true为升序
* @return
*/
public List<T> getAll(Class<T> entityClass, String orderBy, boolean isAsc);

/**
* 如果没有定义泛型或想查找其它实体数据可用此方法
* 根据属性分页查询
* @param entityClass 实体类型
* @param propertyMap 属性和值数据
* @param currentPage 当前页
* @param pageSize 每页页数
* @param orderBy 排序字段
* @param isAsc 排序方式
* @return
*/
public List<T> findAll(Class<T> entityClass,Map<String,Object> propertyMap,int currentPage,int pageSize,String orderBy,boolean isAsc);

/**
* 得到有属性值的记录数,非泛型可用
* @param entityClass
* @param propertyMap
* @return
*/
public int count(Class<T> entityClass,Map<String,Object> propertyMap);

/**
* 得到有属性值的记录数已定义泛型可用
* @param entityClass
* @param propertyMap
* @return
*/
public int count(Map<String,Object> propertyMap);


/**
* 根据相关的带参数hql计算总数,无参数values设为null
* @param hql
* @param values
* @return
*/
public int count(String hql,Object[] values);


/**
* 根据hql删除数据
* @return 返回删除条数
* @param hql
*/
public int delete(String hql);

/**
* 自定义查询
* @param filter
* @return
*/
public List<T> findAllBy(Map filter);

}


------------------------------------------------------------


import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

@SuppressWarnings("unchecked")
public abstract class AbstractHibernateDao<T,ID extends Serializable> extends HibernateDaoSupport
implements GenericDao<T, ID> {

Class<T> presistentClass;

public AbstractHibernateDao(){
presistentClass = (Class<T>)((ParameterizedType)this.getClass().
getGenericSuperclass()).getActualTypeArguments()[0];
}

public T get(ID id) {
return (T)this.getHibernateTemplate().get(presistentClass, id);
}



public T load(ID id) {
return (T) this.getHibernateTemplate().load(presistentClass, id);
}

public void save(T entity) {
this.getHibernateTemplate().save(entity);
}

public void update(T entity) {
this.getHibernateTemplate().update(entity);
}

public void delete(T entity) {
this.getHibernateTemplate().delete(entity);
}

public void deleteById(ID id) {
this.getHibernateTemplate().delete(get(id));
}

public List<T> findAll() {
return this.getHibernateTemplate().find("from " + presistentClass.getName());
}

public int count() {

return 0;
}

public List<T> findByHql(String hql, Object... params) {
this.getHibernateTemplate().find(hql, params);
return null;
}

public int countByHql(final String hql, final Object... params) {

int count = 0;

StringBuffer countHql = new StringBuffer();
countHql.append("SELECT COUNT(*) AS CNT FROM (");
countHql.append(hql);
countHql.append(")");

@SuppressWarnings("unchecked")
List<Object> list = getHibernateTemplate().find(countHql.toString(),params);
if (list != null) {
count = Integer.parseInt(list.get(0).toString());
}
list = null;
return count;
}

public void flush() {
this.getHibernateTemplate().flush();
}

public void clear() {
getHibernateTemplate().clear();
}

/**
* 获取全部对象,带排序字段与升降序参数.
*/
public List<T> getAll(String orderBy, boolean isAsc) {
if (isAsc)
return getHibernateTemplate().findByCriteria(
DetachedCriteria.forClass(presistentClass).addOrder(Order.asc(orderBy)));
else
return getHibernateTemplate().findByCriteria(
DetachedCriteria.forClass(presistentClass).addOrder(Order.desc(orderBy)));

}


public List<T> findBy(final String propertyName, final Object value, final String orderBy, final boolean isAsc){
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(getPresistentClass());
criteria.add(Restrictions.eq(propertyName, value));
if (isAsc) {
criteria.addOrder(Order.asc(orderBy));
} else {
criteria.addOrder(Order.desc(orderBy));
}
return criteria.list();
}

});
}


public List<T> findAll(final Class<T> entityClass,final Map<String,Object> propertyMap,final int currentPage,final int pageSize,final String orderBy,final boolean isAsc) {
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(entityClass);
criteria.add(Restrictions.allEq(propertyMap));
if (isAsc) {
criteria.addOrder(Order.asc(orderBy));
} else {
criteria.addOrder(Order.desc(orderBy));
}
criteria.setFirstResult((currentPage - 1) * pageSize);
criteria.setMaxResults(pageSize);
return criteria.list();
}

});
}

public List<T> findAll(final Map propertyMap,final int currentPage,final int pageSize,final String orderBy,final boolean isAsc) {
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(getPresistentClass());
criteria.add(Restrictions.allEq(propertyMap));
if (isAsc) {
criteria.addOrder(Order.asc(orderBy));
} else {
criteria.addOrder(Order.desc(orderBy));
}
criteria.setFirstResult((currentPage - 1) * pageSize);
criteria.setMaxResults(pageSize);
return criteria.list();
}

});
}

public int count(Class<T> entityClass,Map<String,Object> propertyMap) {
int size = 0;
StringBuilder hql = new StringBuilder(" SELECT COUNT(*) AS CNT FROM ");
hql.append(entityClass.getName());
hql.append(contactPropertyMap(propertyMap));
List list = this.getHibernateTemplate().find(hql.toString());

if (list != null) {
size = Integer.parseInt(list.get(0).toString());
}
return size;
}

public int count(Map propertyMap) {
int size = 0;
StringBuilder hql = new StringBuilder(" SELECT COUNT(*) AS CNT FROM ");
hql.append(getPresistentClass().getName());
hql.append(contactPropertyMap(propertyMap));
List list = this.getHibernateTemplate().find(hql.toString());

if (list != null) {
size = Integer.parseInt(list.get(0).toString());
}
return size;
}






public int count(String hql, Object[] values) {
StringBuilder tempHql = new StringBuilder();
tempHql.append(" SELECT COUNT(*) AS CNT FROM ( ");
tempHql.append(hql);
tempHql.append(")");

List list = getHibernateTemplate().find(tempHql.toString(), values);

int size = 0;
if (list != null) {
size = Integer.parseInt(list.get(0).toString());
}
return size;
}

public List<T> findAll(final String hql,final Object[] values,
final int currentPage, final int pageSize) {
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values);
}
query.setFirstResult((currentPage - 1) * pageSize);
query.setMaxResults(pageSize);
return query.list();
}

});
}

public List<T> getAll(final Class<T> entityClass, final String orderBy, final boolean isAsc) {
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Class clazz = entityClass;

if (clazz == null) {
clazz = getPresistentClass();
}
Criteria criteria = session.createCriteria(clazz);

if (isAsc) {
criteria.addOrder(Order.asc(orderBy));
} else {
criteria.addOrder(Order.desc(orderBy));
}
return criteria.list();
}

});
}

public Class<T> getPresistentClass() {
return presistentClass;
}

public void setPresistentClass(Class<T> presistentClass) {
this.presistentClass = presistentClass;
}

public final String contactPropertyMap(Map<String,Object> propertyMap) {
StringBuilder sql = new StringBuilder(" WHERE 1 = 1 ");
Set<Map.Entry<String,Object>> mapSet = propertyMap.entrySet();
Iterator iterator = mapSet.iterator();
while(iterator.hasNext()) {
Map.Entry entry = (Map.Entry)iterator.next();
sql.append(" AND ");
sql.append(entry.getKey());
sql.append("=");
sql.append("'");
sql.append(entry.getValue());
sql.append("'");

}
return sql.toString();
}

public int delete(String hql) {
return getHibernateTemplate().bulkUpdate(hql);
}







}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值