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());
}
}
}