1、接口定义
package com.gkhb.mis.core.dao;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.SqlParameter;
/**
* @corporation gkhb
* @author
* @date 2008-4-9 下午03:03:54
* @path com.gkhb.mis.core.dao
* @description
*/
public interface IOperationGenericDao {
public static final String DAO = "operationGenericDao";
public Page findByPage(String sql, Page page, Object... values);
public List<?> findRow(String sql, Object... values);
public Map<?, ?> getRow(String sql, Object... values);
public int saveRow(String sql, Object... values);
public Map<?, ?> executeStroeProcedure(String procedureName,
SqlParameter[] procedureParameters, Object... parameterValues);
}
2、接口实现
package com.gkhb.mis.core.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.StoredProcedure;
/**
* @corporation gkhb
* @author
* @date 2008-4-9 下午03:04:47
* @path com.gkhb.mis.core.dao
* @description 通用业务数据访问处理
*/
public class OperationGenericDaoJdbcImp extends JdbcDaoSupport implements
IOperationGenericDao {
protected final Log LOG = LogFactory.getLog(this.getClass());
/**
* @desc
* @date 2008-11-7
* @author
* @parameter List={map}
* @see com.gkhb.mis.core.dao.IOperationGenericDao#findByPage(java.lang.String,
* com.gkhb.mis.core.dao.Page, java.lang.Object[])
*/
public Page findByPage(String sql, Page page, Object... values) {
LOG.debug("===findByPage===sql=====" + sql);
StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( ");
totalSQL.append(sql);
totalSQL.append(" ) totalTable ");
int totalCount = getJdbcTemplate().queryForInt(totalSQL.toString(),values);
int lastIndex = page.getStart() + page.getPageSize();
StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( ");
paginationSQL.append(" SELECT temp.* ,ROWNUM num FROM ( ");
paginationSQL.append(sql);
paginationSQL.append(" ) temp where ROWNUM <= " + lastIndex);
paginationSQL.append(" ) WHERE num > " + page.getStart());
page.setResult(getJdbcTemplate().queryForList(paginationSQL.toString(),
values));
page.setTotalCount(totalCount);
return page;
}
/**
* @desc list={Map}
* @date 2008-11-7
* @author
* @parameter
* @see com.gkhb.mis.core.dao.IOperationGenericDao#findRow(java.lang.String,
* java.lang.Object[])
*/
public List<?> findRow(String sql, Object... values) {
LOG.debug("===findRow===sql=====" + sql);
return getJdbcTemplate().queryForList(sql, values);
}
public Map<?, ?> getRow(String sql, Object... values) {
LOG.debug("===getRow===sql=====" + sql);
return getJdbcTemplate().queryForMap(sql, values);
}
public int saveRow(String sql, Object... values) {
LOG.debug("===saveRow===sql=====" + sql);
return getJdbcTemplate().update(sql, values);
}
/**
* @description
* @date 2008-7-7
* @author
* @param procedureName
* @param procedureParameters
* @return}
*/
public Map<?, ?> executeStroeProcedure(String procedureName,
SqlParameter[] procedureParameters, Object... parameterValues) {
CustomStoredProcedure sproc = new CustomStoredProcedure(
getDataSource(), procedureName, procedureParameters);
Map<?, ?> out = sproc.execute(parameterValues);
return out;
}
private class CustomStoredProcedure extends StoredProcedure {
public CustomStoredProcedure(DataSource ds, String proname,
SqlParameter[] parameters) {
setDataSource(ds);
setFunction(false);
setSql(proname);
this.setParameters(parameters);
// declareParameter(new SqlParameter("g_gdfgsbm", Types.VARCHAR));
// declareParameter(new SqlParameter("g_cbyear", Types.NUMERIC));
// declareParameter(new SqlParameter("g_cbmonth", Types.NUMERIC));
compile();
}
@SuppressWarnings("unchecked")
public Map execute(Object... p) {
Map inParams = new HashMap();
int dpsize = this.getDeclaredParameters().size();
for (int i = 0; i < dpsize; i++) {
SqlParameter s = (SqlParameter) this.getDeclaredParameters()
.get(i);
inParams.put(s.getName(), p[i]);
}
Map out = execute(inParams);
return out;
}
}
}
3、实际调用
package com.gkhb.t3.crm.reportImpl;
import java.sql.Types;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.gkhb.mis.core.dao.IOperationGenericDao;
import com.gkhb.t3.crm.report.CashierPaymentReport;
import com.gkhb.t3.crm.report.ICashierPaymentReport;
/**
* @author
*
*/
@Service(ICashierPaymentReport.SERVICE)
@Transactional
public class CashierPaymentReportImpl implements ICashierPaymentReport {
@Autowired
private IOperationGenericDao jdbcDao;
@Override
public List<CashierPaymentReport> reportFind(Map sc) {
String hql = "select * from crm_report_cnszrb t where to_char(t.rq,'yyyy-mm-dd') between ? and ? and t.groupId like ? order by t.rq desc ";
// String hql = "select * from crm_report_cnszrb ";
String startRq = (String) sc.get("startRq");
String endRq = (String) sc.get("endRq");
String groupId = (String) sc.get("groupId");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date startRq1 = null;
try {
startRq1 = format.parse(startRq);
} catch (ParseException e) {
e.printStackTrace();
}
Date endRq1 = null;
try {
endRq1 = format.parse(endRq);
} catch (ParseException e) {
e.printStackTrace();
}
SqlParameter rq = new SqlParameter(Types.VARCHAR);
// 统计报表
System.out.println("========== start ===========");
jdbcDao.executeStroeProcedure("crm_fee_cnszrbreport",
new SqlParameter[] {
new SqlParameter("l_start", Types.DATE),//存储过程参数名称及数据类型l_start
new SqlParameter("l_end", Types.DATE),//存储过程参数名称l_end
new SqlParameter("l_groupid", Types.INTEGER)// 存储过程参数名称l_groupid
},
new Object[] {
startRq1, endRq1, new Integer(groupId) //三个参数对应的值
});
System.out.println("========== end ==============");
// 查询报表
List reportMap = jdbcDao.findRow(hql, new Object[] {startRq, endRq,
groupId });
List<CashierPaymentReport> CashierPaymentReportVo = new ArrayList<CashierPaymentReport>();
for (int j = 0; j < reportMap.size(); j++) {
CashierPaymentReport temp = new CashierPaymentReport();
Map tem = (Map) reportMap.get(j);
temp.setRQ((Date) tem.get("rq"));
temp.setDJBH((String) tem.get("djbh"));
temp.setDJLX((String) tem.get("djlx"));
temp.setZJ((String) tem.get("zj"));
temp.setJBR((String) tem.get("jbr"));
temp.setSRJE((Number) tem.get("srje"));
temp.setZCJE((Number) tem.get("zcje"));
CashierPaymentReportVo.add(temp);
}
return CashierPaymentReportVo;
}
}