我的Spring框架+Hibernate应用
2006-06-07 17:17
127 查看
package **.dao.hibernate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import **.dao.EJEntityDAO;
import **.domain.EJEntity;
import **.domain.SysParameter;
import **.service.SysParameterService;
import **.utils.SpringContextLoader;
import **.utils.StringUtil;
public class HibernateEJEntityDAO extends BaseHibernateDAO implements
EJEntityDAO {
private Logger logger = Logger.getLogger(this.getClass().getName());
public void insertEJ(EJEntity entity) {
//向表中插入一条新记录
this.getHibernateTemplate().save(entity);
}
public EJEntity getEJByID(String id) {
//通过主键查找对应的单个实体
String hql = "select ej from EJEntity ej where ej.id=:id2";
List list = this.getHibernateTemplate().findByNamedParam(hql,"id2",id);
if(list.size()>0){
return (EJEntity)list.get(0);
}
return null;
}
public List getEJByPostDate(String omh_gl_post_date) {
//查找omh_gl_post_date即主机会计日期对应的所有记录项
String hql = " from EJEntity where gl_post_date=:date";
List list = this.getHibernateTemplate().findByNamedParam(hql,"date",omh_gl_post_date);
return list;
}
public List getEJBeforePostDate(String omh_gl_post_date) {
// TODO Auto-generated method stub
String hql = "select ej from EJEntity ej where ej.gl_post_date<:date";
List list = this.getHibernateTemplate().findByNamedParam(hql,"date",omh_gl_post_date);
return list;
}
/**
* 采用hibernate的criteria查询,可以灵活的设置查询条件
* @author tianbo
*/
public List getEJByParams(Map map){
String sql = "from EJEntity where 1=1 ";
List nameList = new ArrayList();
List object = new ArrayList();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
String str = StringUtil.getStrFormMap(map,"fromDate");
if(!str.equals("")){
try {
object.add(sdf.parse(str + " 00:00:00.0"));
sql = sql + " and transaction_date>=:fromDate";
nameList.add("fromDate");
} catch (ParseException e) {
e.printStackTrace();
}
}
str = StringUtil.getStrFormMap(map,"toDate");
if(!str.equals("")){
try {
object.add(sdf.parse(str + " 23:59:59.0"));
sql = sql + " and transaction_date<:toDate";
nameList.add("toDate");
} catch (ParseException e) {
e.printStackTrace();
}
}
str = StringUtil.getStrFormMap(map,"userId");
if(!str.equals("")){
sql += " and user_id=:userId";
nameList.add("userId");
object.add(str);
}
// 如果已经给出交易代号,则交易类别查询条件可以忽略!!
str = StringUtil.getStrFormMap(map,"tracCode");
if(!str.equals("")){
sql += " and trans_code=:tracCode";
nameList.add("tracCode");
object.add(str);
}else{
str = StringUtil.getStrFormMap(map,"tracType");
if(!str.equals("")){//未给出交易代号,但给出了交易类别,
// 按交易类别查询,即是交易代号的前两位是否等于交易类别。
sql += " and trans_code like :tracType";
nameList.add("tracType");
object.add(str+"%"); // %表示任意长度任意字符串的通配符
}
}
if(!StringUtil.getStrFormMap(map,"stime").equals("00:00") || !StringUtil.getStrFormMap(map,"etime").equals("00:00")){
str = StringUtil.getStrFormMap(map,"stime");
if(!str.equals("")){
sql += " and actual_time>=:stime";
nameList.add("stime");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"etime");
if(!str.equals("")){
sql += " and actual_time<=:etime";
nameList.add("etime");
object.add(str);
}
}
// 处理 是否曾经打印
// str = StringUtil.getStrFormMap(map,"hasPrint");
// if(!str.equals("")){
// sql += " and " ;
// }
str = StringUtil.getStrFormMap(map,"accountNo");
if(!str.equals("")){
sql += " and account_num=:accountNo";
nameList.add("accountNo");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"lowAmount");
if(!str.equals("")){
try{
object.add(new Double(Double.parseDouble(str)) );
sql += " and amount>=:lowAmount";
nameList.add("lowAmount");
}catch(NumberFormatException ex){
ex.printStackTrace();
}
}
str = StringUtil.getStrFormMap(map,"highAmount");
if(!str.equals("")){
try{
object.add(new Double(Double.parseDouble(str)) );
sql += " and amount<=:highAmount";
nameList.add("highAmount");
}catch(NumberFormatException ex){
ex.printStackTrace();
}
}
str = StringUtil.getStrFormMap(map,"currencyType");
if(!str.equals("")){
sql += " and currency=:currencyType";
nameList.add("currencyType");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"certId");
if(!str.equals("")){
sql += " and cert_num=:certId";
nameList.add("certId");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"ischeckInOut");
if(!str.equals("")){
sql += " and dc_flag=:ischeckInOut";
nameList.add("ischeckInOut");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"order");
if(str.equals("") || str.equals("2")){ // 缺省和取值=2时为逆序
sql += " order by id desc";
}
String[] names = new String[nameList.size()];
for(int i=0; i<nameList.size();i++){
names[i] = (String)nameList.get(i);
}
if(names.length<=0)
return getHibernateTemplate().find(sql);
else
return getHibernateTemplate().findByNamedParam(sql,names,object.toArray());
}
public int removeEJ(EJEntity delEntity) {
this.getHibernateTemplate().delete(delEntity);
return 1;
}
/**
* 考虑到一个月的日志数据量必然很大,用自己的事务处理策略和批处理删除。
* 摒弃了原先逐个调用this.getHibernateTemplate().delete(EJEntity)的低效方法。
* @author tianbo
*/
public int clearEJNow() {
SysParameterService service = (SysParameterService)SpringContextLoader.getBean("sysParameterService");
SysParameter param = service.getParameterByCode("0002");
int interval = 1;
try {
interval = Integer.parseInt(param.getParameterValue());
} catch (NumberFormatException e) {
e.printStackTrace();
}
logger.info("clear ej intervals"+interval);
Calendar now = Calendar.getInstance();
now.add(Calendar.DATE,-interval);
Date date = new Date(now.getTimeInMillis());
String sdate = new SimpleDateFormat("yyyy-MM-dd").format(date);
logger.info("all records before "+sdate+" will be cleared.");
SessionFactory factory = this.getSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
String hql = "delete from EJEntity where gl_post_date<:date";
int deletedEntities = session.createQuery( hql )
.setString( "date", sdate )
.executeUpdate();
tx.commit();
session.close();
return deletedEntities;
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import **.dao.EJEntityDAO;
import **.domain.EJEntity;
import **.domain.SysParameter;
import **.service.SysParameterService;
import **.utils.SpringContextLoader;
import **.utils.StringUtil;
public class HibernateEJEntityDAO extends BaseHibernateDAO implements
EJEntityDAO {
private Logger logger = Logger.getLogger(this.getClass().getName());
public void insertEJ(EJEntity entity) {
//向表中插入一条新记录
this.getHibernateTemplate().save(entity);
}
public EJEntity getEJByID(String id) {
//通过主键查找对应的单个实体
String hql = "select ej from EJEntity ej where ej.id=:id2";
List list = this.getHibernateTemplate().findByNamedParam(hql,"id2",id);
if(list.size()>0){
return (EJEntity)list.get(0);
}
return null;
}
public List getEJByPostDate(String omh_gl_post_date) {
//查找omh_gl_post_date即主机会计日期对应的所有记录项
String hql = " from EJEntity where gl_post_date=:date";
List list = this.getHibernateTemplate().findByNamedParam(hql,"date",omh_gl_post_date);
return list;
}
public List getEJBeforePostDate(String omh_gl_post_date) {
// TODO Auto-generated method stub
String hql = "select ej from EJEntity ej where ej.gl_post_date<:date";
List list = this.getHibernateTemplate().findByNamedParam(hql,"date",omh_gl_post_date);
return list;
}
/**
* 采用hibernate的criteria查询,可以灵活的设置查询条件
* @author tianbo
*/
public List getEJByParams(Map map){
String sql = "from EJEntity where 1=1 ";
List nameList = new ArrayList();
List object = new ArrayList();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
String str = StringUtil.getStrFormMap(map,"fromDate");
if(!str.equals("")){
try {
object.add(sdf.parse(str + " 00:00:00.0"));
sql = sql + " and transaction_date>=:fromDate";
nameList.add("fromDate");
} catch (ParseException e) {
e.printStackTrace();
}
}
str = StringUtil.getStrFormMap(map,"toDate");
if(!str.equals("")){
try {
object.add(sdf.parse(str + " 23:59:59.0"));
sql = sql + " and transaction_date<:toDate";
nameList.add("toDate");
} catch (ParseException e) {
e.printStackTrace();
}
}
str = StringUtil.getStrFormMap(map,"userId");
if(!str.equals("")){
sql += " and user_id=:userId";
nameList.add("userId");
object.add(str);
}
// 如果已经给出交易代号,则交易类别查询条件可以忽略!!
str = StringUtil.getStrFormMap(map,"tracCode");
if(!str.equals("")){
sql += " and trans_code=:tracCode";
nameList.add("tracCode");
object.add(str);
}else{
str = StringUtil.getStrFormMap(map,"tracType");
if(!str.equals("")){//未给出交易代号,但给出了交易类别,
// 按交易类别查询,即是交易代号的前两位是否等于交易类别。
sql += " and trans_code like :tracType";
nameList.add("tracType");
object.add(str+"%"); // %表示任意长度任意字符串的通配符
}
}
if(!StringUtil.getStrFormMap(map,"stime").equals("00:00") || !StringUtil.getStrFormMap(map,"etime").equals("00:00")){
str = StringUtil.getStrFormMap(map,"stime");
if(!str.equals("")){
sql += " and actual_time>=:stime";
nameList.add("stime");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"etime");
if(!str.equals("")){
sql += " and actual_time<=:etime";
nameList.add("etime");
object.add(str);
}
}
// 处理 是否曾经打印
// str = StringUtil.getStrFormMap(map,"hasPrint");
// if(!str.equals("")){
// sql += " and " ;
// }
str = StringUtil.getStrFormMap(map,"accountNo");
if(!str.equals("")){
sql += " and account_num=:accountNo";
nameList.add("accountNo");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"lowAmount");
if(!str.equals("")){
try{
object.add(new Double(Double.parseDouble(str)) );
sql += " and amount>=:lowAmount";
nameList.add("lowAmount");
}catch(NumberFormatException ex){
ex.printStackTrace();
}
}
str = StringUtil.getStrFormMap(map,"highAmount");
if(!str.equals("")){
try{
object.add(new Double(Double.parseDouble(str)) );
sql += " and amount<=:highAmount";
nameList.add("highAmount");
}catch(NumberFormatException ex){
ex.printStackTrace();
}
}
str = StringUtil.getStrFormMap(map,"currencyType");
if(!str.equals("")){
sql += " and currency=:currencyType";
nameList.add("currencyType");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"certId");
if(!str.equals("")){
sql += " and cert_num=:certId";
nameList.add("certId");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"ischeckInOut");
if(!str.equals("")){
sql += " and dc_flag=:ischeckInOut";
nameList.add("ischeckInOut");
object.add(str);
}
str = StringUtil.getStrFormMap(map,"order");
if(str.equals("") || str.equals("2")){ // 缺省和取值=2时为逆序
sql += " order by id desc";
}
String[] names = new String[nameList.size()];
for(int i=0; i<nameList.size();i++){
names[i] = (String)nameList.get(i);
}
if(names.length<=0)
return getHibernateTemplate().find(sql);
else
return getHibernateTemplate().findByNamedParam(sql,names,object.toArray());
}
public int removeEJ(EJEntity delEntity) {
this.getHibernateTemplate().delete(delEntity);
return 1;
}
/**
* 考虑到一个月的日志数据量必然很大,用自己的事务处理策略和批处理删除。
* 摒弃了原先逐个调用this.getHibernateTemplate().delete(EJEntity)的低效方法。
* @author tianbo
*/
public int clearEJNow() {
SysParameterService service = (SysParameterService)SpringContextLoader.getBean("sysParameterService");
SysParameter param = service.getParameterByCode("0002");
int interval = 1;
try {
interval = Integer.parseInt(param.getParameterValue());
} catch (NumberFormatException e) {
e.printStackTrace();
}
logger.info("clear ej intervals"+interval);
Calendar now = Calendar.getInstance();
now.add(Calendar.DATE,-interval);
Date date = new Date(now.getTimeInMillis());
String sdate = new SimpleDateFormat("yyyy-MM-dd").format(date);
logger.info("all records before "+sdate+" will be cleared.");
SessionFactory factory = this.getSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
String hql = "delete from EJEntity where gl_post_date<:date";
int deletedEntities = session.createQuery( hql )
.setString( "date", sdate )
.executeUpdate();
tx.commit();
session.close();
return deletedEntities;
}
}
相关文章推荐
- Hibernate与Oracle应用之主键生成
- Hibernate与Spring框架结合时,碰到的当前没有存在session的问题
- Hibernate应用的优化
- hibernate环境搭建教程---【小白系列】0基础到熟练应用hibernate框架(一)
- Sping+Struts+Hibernate开发的应用部署在weblogic下时出现的“ClassNotFoundException: org.hibernate.hql.ast.HqlToken”错误的解决方法
- hibernate中对象视图导航查询|加载策略---【小白系列】0基础到熟练应用hibernate框架(十四)
- mybatis 与 hibernate 的区别和应用场景(转)
- 使用myeclipse 应用struts2 + spring + hibernate 实现CRUD
- mybatis和hibernate本质区别和应用场景
- Spring框架的事务管理应用分析
- 实践hibernate的应用——struts2+hibernate的简单学生信息管理
- Struts2+Hibernate整合应用开发步骤
- glassfish创建JNDI并且应用到Spring+Hibernate框架中作为数据源
- 利用JSF、SpringFramework和Hibernate构建Web应用的实例讲述
- 应用Hibernate3的DetachedCriteria实现分页查询
- 基于Spring框架的WebSphere应用开发
- Hibernate学习笔记1--------一个简单的应用
- Struts+hibernate应用实现页面操作数据库
- 使用hibernate 做应用持久层
- JSON,Struts2,Spring,Hibernate,Extjs整合应用案例