废话不多说,上代码
import java.util.List; import java.util.Map; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; import com.HomeFurnishing.common.Exceptions.MyRuntimeException; import com.HomeFurnishing.common.entity.PageCond; /*** * @author zhukovasky * @version 1.0 * @see 本接口用来做一般的增删改查适合于Hibernate框架,做单表操作可能会存在一些问题 * */ public interface HibernateDAO { /*** * 保存,单表操作 * */ public void saveEntity(String klass,Object obj); public void updateEntity(String klass,Object obj); public void insertEntity(String klass,Object obj); public void deleteEntity(String klass,Object obj); public void deleteEntityByCascade(String klass,Object[] obj); public List queryEntitiesByCriteria(Criterion criteria, String klass,List<Order> orders); public List queryEntitiesByTemplate(String klass,Object obj,Criterion criteria ,List<Order> orders); public Object[] queryEntitiesByCriteria(Criterion criteria, String klass,PageCond page,List<Order> orders); /*** * @author zhukovasky * @see 模板查询 * */ public Object[] queryEntitiesByTemplate(String klass,Object obj,Criterion criteria ,PageCond page,List<Order> orders); public <V> V expandEntity(String klass,V obj); /**** * @author zhukovasky * @param sqlLocations 放置sql相应路径名 * @see i.e.String packagename="com.zhukovasky.common.utils"; * String xmlname="testxml.xml" * String sqlname="queryMyBudget"; * 那么它的值应该是 * "com.zhukovasky.common.utils.testxml.queryMyBudget" * 程序会自动计算相应的地址并生成实际的路径名 * @param Map<String,Object> parameterMap 查询参数 * @return List<Map> 返回结果为HashMap,对于单条记录 * * */ public List<Map> queryNameSqlByHibernate(String sqlLocations,Map<String,Object> parameterMap) throws MyRuntimeException; /** * @author zhukovasky * @param sqlLocations 放置sql相应路径名 * @see i.e.String packagename="com.zhukovasky.common.utils"; * String xmlname="testxml.xml" * String sqlname="queryMyBudget"; * 那么它的值应该是 * "com.zhukovasky.common.utils.testxml.queryMyBudget" * 程序会自动计算相应的地址并生成实际的路径名 * @param Map<String,Object> parameterMap 查询参数 * @return List<Map> 返回结果为HashMap,对于单条记录 * * */ public List<Map> queryNameSqlByHibernate(String sqlLocations,Map<String,Object> parameterMap,PageCond page) throws MyRuntimeException; /*** * @author zhukovasky * @param sqlLocations 放置存储过程位置 * */ public void callProcedures(String sqlLocations,Map<String,Object> parameterMap); }
import java.io.File; import java.io.IOException; import java.io.Serializable; import java.util.List; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import org.hibernate.Criteria; import org.hibernate.EntityMode; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Example; import org.hibernate.criterion.Order; import org.hibernate.metadata.ClassMetadata; import org.hibernate.transform.Transformers; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; import com.HomeFurnishing.common.DataBaseUtil.basic.HibernateSessionFactory; import com.HomeFurnishing.common.Exceptions.MyRuntimeException; import com.HomeFurnishing.common.Pagination.Pagination; import com.HomeFurnishing.common.XmlUtils.XmlUtils; import com.HomeFurnishing.common.entity.PageCond; public class HibernateDAOImpl implements HibernateDAO { private static final Logger log = LoggerFactory.getLogger(HibernateDAOImpl.class); /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * @see 该方法可能在实体没有sequence的情况下使用会有些问题 * */ public void saveEntity(String klass, Object obj) { if(obj==null){ log.error("saveEntity方法对象为空!"); } Session session=HibernateSessionFactory.getSessionFactory().openSession(); log.info("保存实体"); session.save(klass, obj); session.flush(); } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ public void updateEntity(String klass, Object obj) { Session session=HibernateSessionFactory.getSessionFactory().openSession(); session.update(klass, obj); session.flush(); } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ public void insertEntity1(String klass, Object obj) { Session session=HibernateSessionFactory.getSessionFactory().openSession(); session.save(klass, obj); session.flush(); } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ public void deleteEntity(String klass, Object obj) { // TODO Auto-generated method stub } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ public void deleteEntityByCascade(Class klass, Object[] obj) { // TODO Auto-generated method stub } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ public List queryEntitiesByCriteria(Criterion criteria, String klass, List<Order> orders) { // TODO Auto-generated method stub return null; } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ @SuppressWarnings("unchecked") public <V> V expandEntity(String klass, V obj) { Session session=HibernateSessionFactory.getSessionFactory().openSession(); ClassMetadata cl=HibernateSessionFactory.getSessionFactory().getClassMetadata(klass); Serializable id=cl.getIdentifier(obj, EntityMode.POJO); obj=(V) session.get(klass, id); return obj; } /** * @param klass 实体名称,类的名称 * @param Obj 实体对象 */ public List queryEntitiesByTemplate(String klass, Object obj, Criterion criteria, List<Order> orders) { Session session=HibernateSessionFactory.getSession(); Criteria criterias=session.createCriteria(klass).add(Example.create(obj)).add(criteria); List list=null; if(orders==null){ list=criterias.list(); }else{ for(Order iter:orders){ criterias.addOrder(iter); } } list=criterias.list(); return list; } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * **/ public void insertEntity(String klass, Object obj) { Session session=HibernateSessionFactory.getSessionFactory().openSession(); session.save(klass, obj); session.flush(); } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ public void deleteEntityByCascade(String klass, Object[] obj) { // TODO Auto-generated method stub } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ public Object[] queryEntitiesByCriteria(Criterion criteria, String klass, PageCond page, List<Order> orders) { Object[] result=Pagination.doQueryPageCond(klass, criteria, orders, page); return result; } /*** * @param klass 实体名称,类的名称 * @param Obj 实体对象 * */ public Object[] queryEntitiesByTemplate(String klass, Object obj, Criterion criteria, PageCond page, List<Order> orders) { Object[] result=Pagination.doQueryPageCond(klass, criteria, orders, page); return result; } /**** * @author zhukovasky * @param sqlLocations 放置sql相应路径名 * @see i.e.String packagename="com.zhukovasky.common.utils"; * String xmlname="testxml.xml" * String sqlname="queryMyBudget"; * 那么它的值应该是 * "com.zhukovasky.common.utils.testxml.queryMyBudget" * 程序会自动计算相应的地址并生成实际的路径名 * @param Map<String,Object> parameterMap 查询参数 * @return List<Map> 返回结果为HashMap,对于单条记录 * * */ public List<Map> queryNameSqlByHibernate(String sqlLocations, Map<String, Object> parameterMap) throws MyRuntimeException{ String systempath=System.getProperty("user.dir"); String realXmlPath=XmlUtils.getRealSqlName(sqlLocations); String querySqlname=XmlUtils.getRealSqlName(sqlLocations); realXmlPath=systempath+File.separator+"src"+File.separator+realXmlPath; String sql=""; boolean hasExceptions=false; Throwable ee=null; Session session=null; List<Map> result=null; try { sql=XmlUtils.loadSqlFromXml(realXmlPath, querySqlname, parameterMap); } catch (ParserConfigurationException e) { log.error("编译XML错误"); ee=e; hasExceptions=true; } catch (IOException e){ log.error("文件读写异常"); ee=e; hasExceptions=true; } catch (SAXException e) { log.error("解析XML错误"); ee=e; hasExceptions=true; }finally{ if(hasExceptions==true){ throw new MyRuntimeException(ee); }else{ session=HibernateSessionFactory.getSession(); SQLQuery sqlquery=session.createSQLQuery(sql); String[] RealParameters=sqlquery.getNamedParameters(); for(String iter:RealParameters){ if(parameterMap.containsKey(iter)){ sqlquery.setParameter(iter, parameterMap.get(iter)); } } sqlquery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); result=sqlquery.list(); } } return result; } /**** * @author zhukovasky * @param sqlLocations 放置sql相应路径名 * @see i.e.String packagename="com.zhukovasky.common.utils"; * String xmlname="testxml.xml" * String sqlname="queryMyBudget"; * 那么它的值应该是 * "com.zhukovasky.common.utils.testxml.queryMyBudget" * 程序会自动计算相应的地址并生成实际的路径名 * @param Map<String,Object> parameterMap 查询参数 * @return List<Map> 返回结果为HashMap,对于单条记录 * * */ public List<Map> queryNameSqlByHibernate(String sqlLocations, Map<String, Object> parameterMap, PageCond page) throws MyRuntimeException{ String systempath=System.getProperty("user.dir"); String realXmlPath=XmlUtils.getRealSqlName(sqlLocations); String querySqlname=XmlUtils.getRealSqlName(sqlLocations); realXmlPath=systempath+File.separator+"src"+File.separator+realXmlPath; String sql=""; boolean hasExceptions=false; Throwable ee=null; Session session=null; List<Map> result=null; try { sql=XmlUtils.loadSqlFromXml(realXmlPath, querySqlname, parameterMap); } catch (ParserConfigurationException e) { log.error("编译XML错误"); ee=e; hasExceptions=true; } catch (IOException e){ log.error("文件读写异常"); ee=e; hasExceptions=true; } catch (SAXException e) { log.error("解析XML错误"); ee=e; hasExceptions=true; }finally{ if(hasExceptions==true){ throw new MyRuntimeException(ee); }else{ session=HibernateSessionFactory.getSession(); SQLQuery sqlquery=session.createSQLQuery(sql); String[] RealParameters=sqlquery.getNamedParameters(); for(String iter:RealParameters){ if(parameterMap.containsKey(iter)){ sqlquery.setParameter(iter, parameterMap.get(iter)); } } sqlquery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); result=Pagination.doQueryPageCond(sqlquery, page); } } return result; } public void callProcedures(String sqlLocations, Map<String, Object> parameterMap) { String systempath=System.getProperty("user.dir"); String realXmlPath=XmlUtils.getRealSqlName(sqlLocations); String querySqlname=XmlUtils.getRealSqlName(sqlLocations); realXmlPath=systempath+File.separator+"src"+File.separator+realXmlPath; String sql=""; boolean hasExceptions=false; Throwable ee=null; Session session=null; try { sql=XmlUtils.loadSqlFromXml(realXmlPath, querySqlname, parameterMap); } catch (ParserConfigurationException e) { log.error("编译XML错误"); ee=e; hasExceptions=true; } catch (IOException e){ log.error("文件读写异常"); ee=e; hasExceptions=true; } catch (SAXException e) { log.error("解析XML错误"); ee=e; hasExceptions=true; }finally{ if(hasExceptions==true){ throw new MyRuntimeException(ee); }else{ session=HibernateSessionFactory.getSession(); SQLQuery sqlquery=session.createSQLQuery(sql); String[] RealParameters=sqlquery.getNamedParameters(); for(String iter:RealParameters){ if(parameterMap.containsKey(iter)){ sqlquery.setParameter(iter, parameterMap.get(iter)); } } sqlquery.executeUpdate(); } } } }
时间: 2024-10-18 15:25:58