package
cn.com.bochy.crm.dao.impl;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import javax.annotation.Resource;
import
org.apache.commons.lang.StringUtils;
import
org.hibernate.HibernateException;
import
org.hibernate.Query;
import
org.hibernate.Session;
import
org.springframework.orm.hibernate3.HibernateCallback;
import
org.springframework.orm.hibernate3.HibernateTemplate;
import
org.springframework.stereotype.Repository;
import
org.springframework.transaction.annotation.Isolation;
import
org.springframework.transaction.annotation.Propagation;
import
org.springframework.transaction.annotation.Transactional;
import
cn.com.bochy.crm.dao.BaseDao;
import
cn.com.bochy.crm.util.QueryResult;
@SuppressWarnings ( "rawtypes" )
@Transactional (readOnly= true )
@Repository (BaseDao.SERVER_NAME)
public
class BaseDaoImpl implements
BaseDao {
/*
* 注入sessionfactory
* save(Object entity):保存实体
* update(Object entity):修改实体方法
* queryById(Class entity, Serializable id):根据id查询实体
*
* (non-Javadoc)
* @see cn.com.bochy.crm.dao.BaseDao#save(java.lang.Object)
*/
@Resource (name= "hibernateTemplate" )
private
HibernateTemplate hibernateTemplate;
@Override
public
Object queryById(Class entity, Serializable id) {
// TODO Auto-generated method stub
return
hibernateTemplate.get(entity, id);
}
@Override
@Transactional (isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly= false )
public
void save(Object entity) {
// TODO Auto-generated method stub
hibernateTemplate.save(entity);
}
@Override
@Transactional (isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly= false )
public
void update(Object entity) {
// TODO Auto-generated method stub
hibernateTemplate.update(entity);
}
//删除数据(实体)
@Override
@Transactional (isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly= false )
public
void delete(Class entity, Serializable... id) {
// TODO Auto-generated method stub
//判断id存在
if (id.length> 0 &&id!= null ){
//通过for循环来判断id的实体是否存在,存在删除,不存在抛出异常
for (Serializable ids:id){
Object entityclass=hibernateTemplate.load(entity, ids);
if (entityclass== null ){
throw
new RuntimeException( "实体不存在" );
}
hibernateTemplate.delete(entityclass);
}
}
}
@Override
/*
* 无分页的查询
* queryListWithNoPage(Class entityClass,String wherehql,Object[] params)
* String hql="select s from sysusergroup s where 1=1 and s.name like ?"
* 拼出上面的hql语句需要获得类名,和参数
* 通过java反射机制获得类名
*/
public
List queryListWithNoPage(Class entityClass, String wherehql,
final
Object[] params,LinkedHashMap<String, String> orderby) {
// TODO Auto-generated method stub
//通过java反射机制获得类名
String entityName=entityClass.getSimpleName();
String hql= "select s from " +entityName+ " s where 1=1" ;
if (StringUtils.isNotBlank(wherehql)){ //判断wherehql的返回值是不是为空
hql=hql+wherehql;
}
//处理map类型的orderby
String order=getOrderBy(orderby);
final
String shql=hql+order;
System.out.println(shql);
List list=(List)hibernateTemplate.execute(
//拟名内部类,在拟名内部类中所有的参数为最终参数
new
HibernateCallback() {
@Override
public
Object doInHibernate(Session session) throws
HibernateException,
SQLException {
// TODO Auto-generated method stub
Query query=session.createQuery(shql);
setQuery(query,params);
return
query.list();
}
});
return
list;
}
//放置参数的方法
protected
void setQuery(Query query, Object[] params) {
// TODO Auto-generated method stub
if (params!= null &¶ms.length> 0 ){
for ( int
i= 0 ;i<params.length;i++){
query.setParameter(i, params[i]);
}
}
}
protected
String getOrderBy(LinkedHashMap<String, String> orderby) {
// TODO Auto-generated method stub
StringBuffer sf= new
StringBuffer( " order by " );
if (orderby!= null &&!orderby.isEmpty()){
Iterator<String> items=orderby.keySet().iterator();
if (items.hasNext()){
String key=items.next();
String val=orderby.get(key);
sf.append(key);
sf.append( " " +val);
}
}
String order=sf.toString();
System.out.println( "排序:" +order);
return
order;
}
@Override
public
QueryResult PageList(Class entityClass, String wherehql,
Object[] param, LinkedHashMap<String, String> orderby) {
// TODO Auto-generated method stub
//利用类反射机制获取类名
String entityName=entityClass.getSimpleName();
String hql= "select s from " +entityName+ " s where 1=1" ;
String chql= "select count(*) from " +entityName+ "s where 1=1" ;
if (StringUtils.isNotBlank(wherehql)){
hql=hql+wherehql;
}
String order=getOrderBy(orderby);
final
String shql=hql+order;
return
null ;
}
}
|