package model; import java.util.List; import org.apache.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; public class HibernateDataOperation { static Logger logger = Logger.getLogger(HibernateDataOperation.class); public static void add(Object object, ResultCode code) { add(new Object[] { object }, code); } public static void add(Object[] objects, ResultCode code) { Session session = HibernateSessionFactory.getSession(); Transaction trans = session.beginTransaction(); add(objects, code, session); trans.commit(); session.close(); } public static void add(Object object, ResultCode code, Session session) { add(new Object[] { object }, code, session); } public static void add(Object[] objects, ResultCode code, Session session) { logger.info("Hibernate:start add to database"); try { for (Object object : objects) { logger.info("Hibernate:add Object:" + object.getClass() + ":" + object.toString()); session.save(object); } code.setCode(ResultCode.SUCCESS); logger.info("Hibernate:add to database success"); } catch (Exception e) { code.setCode(ResultCode.FAIL); logger.error("Hibernate:add to database fail"); logger.error("Hibernate error:" + e.getStackTrace()); logger.error("Hibernate error:" + e.getMessage()); } } public static List query(String paramName, Object paramValue, Class outputClass, ResultCode resultCode) { logger.info("Hibernate:start query from database"); logger.info("Hibernate:query parameters:" + paramName + " , " + paramValue.toString()); try { Session session = HibernateSessionFactory.getSession(); Criteria criteria = session.createCriteria(outputClass); // 使用缓存 criteria.setCacheable(true); criteria.add(Restrictions.eq(paramName, paramValue)); List list = criteria.list(); session.close(); logger.info("Hibernate:query from database success"); logger.info("Hibernate:query result list size:" + list.size()); resultCode.setCode(ResultCode.SUCCESS); return list; } catch (Exception e) { resultCode.setCode(ResultCode.FAIL); logger.error("Hibernate:query from database fail"); logger.error("Hibernate error:" + e.getStackTrace()); logger.error("Hibernate error:" + e.getMessage()); return null; } } /** * 重载query方法 增加Session参数 当需要使用延迟加载的时候 Session不能提前关闭 * * @param str * @param obj * @param cls * @param code * @param session * @return List * @author WangFei */ public static List query(String paramName, Object paramValue, Class outputClass, ResultCode resultCode, Session session) { logger.info("Hibernate:start query from database"); logger.info("Hibernate:query parameters:" + paramName + " , " + paramValue.toString()); try { Criteria criteria = session.createCriteria(outputClass); // 使用缓存 criteria.setCacheable(true); criteria.add(Restrictions.eq(paramName, paramValue)); List list = criteria.list(); logger.info("Hibernate:query from database success"); logger.info("Hibernate:query result list size:" + list.size()); resultCode.setCode(ResultCode.SUCCESS); return list; } catch (Exception e) { e.printStackTrace(); resultCode.setCode(ResultCode.FAIL); logger.error("Hibernate:query from database fail"); logger.error("Hibernate error:" + e.getStackTrace()); logger.error("Hibernate error:" + e.getMessage()); return null; } } public static void update(Object obj, ResultCode code) { try { Session session = HibernateSessionFactory.getSession(); Transaction trans = session.beginTransaction(); update(obj, code, session); trans.commit(); session.close(); } catch (Exception e) { code.setCode(ResultCode.FAIL); logger.error("Hibernate:update database fail"); logger.error("Hibernate error:" + e.getStackTrace()); logger.error("Hibernate error:" + e.getMessage()); } } public static void update(Object o, ResultCode code, Session session) { logger.info("Hibernate:start update database"); logger.info("Hibernate:update Object:" + o.getClass() + ":" + o.toString()); session.update(o); code.setCode(ResultCode.SUCCESS); logger.info("Hibernate:update database success"); } public static void delete(Object o, ResultCode code) { logger.info("Hibernate:start delete from database"); logger.info("Hibernate:delete Object:" + o.getClass() + ":" + o.toString()); try { Session session = HibernateSessionFactory.getSession(); Transaction trans = session.beginTransaction(); session.delete(o); trans.commit(); session.close(); code.setCode(ResultCode.SUCCESS); logger.info("Hibernate:delete database success"); } catch (Exception e) { code.setCode(ResultCode.FAIL); logger.error("Hibernate:delete from database fail"); logger.error("Hibernate error:" + e.getStackTrace()); logger.error("Hibernate error:" + e.getMessage()); } } }