Hibernate的一种用法

来源:互联网 发布:友盟推送 java服务端 编辑:程序博客网 时间:2024/06/07 12:29
废话不多说,上代码
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 stubreturn 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();}}}}

2 0
原创粉丝点击