/*
* Created on Apr 23, 2010
* JdbcTemplateUtil.java
*
* Copyright 2004 Hintsoft, LTD. All rights reserved.
* HINTSOFT PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
* $Id: JdbcTemplateUtil.java,v 1.8 2011/12/16 07:46:27 hcc Exp $
* $Author: hcc $ ( mailto:huangcc@hintsoft.com.cn )
* $Revision: 1.8 $
*
*/
package base.util;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Id;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.LinkedCaseInsensitiveMap;
// import auth.po.User;
/**
* @author huangcc
*
*/
public class JdbcTemplateUtil<T> {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public String getObjString(Object obj) {
T t = (T) obj;
return t.toString();
}
public void excuteInsertByList(JdbcTemplate jt, String tableName, final boolean seqId, final List list,
final Class cla) throws Exception {
Object obj = null;
if (list != null && list.size() > 0) {
obj = list.get(0);
} else {
return;
}
T t = (T) obj;
Field[] fieldArr = cla.getDeclaredFields();
String colum = "";
String columVal = "";
List<String> clumList = new ArrayList<String>();
for (Field field : fieldArr) {
String fieldName = field.getName();
if (field.getAnnotation(Column.class) != null) {
String beanid = field.getAnnotation(Column.class).name();
if (!StringUtils.isEmpty(beanid)) {
String meName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
Method m = cla.getDeclaredMethod(meName);
Object o = m.invoke(t);
if (seqId) {
if (fieldName.equalsIgnoreCase("ID")) {
continue;
}
}
clumList.add(beanid);
}
}
}
if (clumList.size() == 0) {
return;
}
for (String key : clumList) {
colum += key + ",";
columVal += "?,";
}
if (colum.endsWith(",")) {
colum = colum.substring(0, colum.length() - 1);
}
if (columVal.endsWith(",")) {
columVal = columVal.substring(0, columVal.length() - 1);
}
String sql = "insert into " + tableName + "(" + colum.toString() + ")values(" + columVal + ")";
// logger.info(sql);
BatchPreparedStatementSetter batchPreparedStatementSetter = null;
batchPreparedStatementSetter = new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int index) throws SQLException {
T t = (T) list.get(index);
Field[] fieldArr = cla.getDeclaredFields();
int i = 1;
List param = new ArrayList();
for (Field field : fieldArr) {
String fieldName = field.getName();
if (field.getAnnotation(Column.class) != null) {
String beanid = field.getAnnotation(Column.class).name();
if (!StringUtils.isEmpty(beanid)) {
String meName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
if (seqId) {
if (fieldName.equalsIgnoreCase("ID")) {
continue;
}
}
Method m;
try {
m = cla.getDeclaredMethod(meName);
Object o = m.invoke(t);
param.add(o);
if (o != null) {
ps.setObject(i++, o);
} else {
ps.setObject(i++, null, java.sql.Types.NULL);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// ps.setInt(i++, xsDailyStat.getLastCountSum());
// ps.setInt(i++, xsDailyStat.getAgentId());
// ps.setString(i++, xsDailyStat.getAreaCode());
// ps.setInt(i++, xsDailyStat.getTypeId());
// ps.setInt(i++, dat);
}
public int getBatchSize() {
return list.size();
}
};
try {
jt.batchUpdate(sql, batchPreparedStatementSetter);
} catch (Exception e) {
e.printStackTrace();
}
}
public int excuteInsert(JdbcTemplate jt, String tableName, boolean seqId, Object obj, Class cla) throws Exception {
T t = (T) obj;
Field[] fieldArr = cla.getDeclaredFields();
String colum = "";
String columVal = "";
Map<String, Object> map = new HashMap<String, Object>();
for (Field field : fieldArr) {
String fieldName = field.getName();
if (field.getAnnotation(Column.class) != null) {
String beanid = field.getAnnotation(Column.class).name();
if (!StringUtils.isEmpty(beanid)) {
String meName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
Method m = cla.getDeclaredMethod(meName);
Object o = m.invoke(t);
if (seqId) {
if (fieldName.equalsIgnoreCase("ID")) {
continue;
}
}
map.put(beanid, o);
}
}
}
List param = new ArrayList();
if (map.size() == 0) {
return 0;
}
for (String key : map.keySet()) {
colum += key + ",";
columVal += "?,";
param.add(map.get(key));
}
if (colum.endsWith(",")) {
colum = colum.substring(0, colum.length() - 1);
}
if (columVal.endsWith(",")) {
columVal = columVal.substring(0, columVal.length() - 1);
}
String sql = "insert into " + tableName + "(" + colum.toString() + ")values(" + columVal + ")";
// logger.info(sql);
return jt.update(sql, param.toArray());
}
public static void main(String[] args) throws Exception {
Date d = DateUtil.parseDateString("2011-11-10", "yyyy-MM-dd");
Date now = DateUtil.getYesterdayEnd(new Date());
long l = DateUtil.getBetweenDiffDay(d, now, true);
for (int i = 0; i < l; i++) {
String ddd = DateUtil.formatDate(DateUtil.getAppointDateByOffset(d, 0, (i + 1), 2), "yyyy-MM-dd");
System.out.println(ddd);
}
}
public List<T> queryForList(JdbcTemplate jt, String sql, Class cla) {
// logger.info(sql);
List list = jt.queryForList(sql);
JdbcTemplateTool jdbcTemplateTool = new JdbcTemplateTool<T>();
return jdbcTemplateTool.getObjectList(list, cla);
}
public List<T> queryForList(JdbcTemplate jt, Object[] params, String sql, Class cla) {
// logger.info(sql);
List list = jt.queryForList(sql, params);
JdbcTemplateTool jdbcTemplateTool = new JdbcTemplateTool<T>();
return jdbcTemplateTool.getObjectList(list, cla);
}
public String getObjSqlWhere(List paraList, Object obj, Class cla, String prefix) {
JdbcTemplateTool jdbcTemplateTool = new JdbcTemplateTool<T>();
return jdbcTemplateTool.getObjSqlWhere(paraList, obj, cla, prefix);
}
// public static void main(String[] args){
// Menu menu=new Menu();
// menu.setId(1);
// menu.setName("menu");
// JdbcTemplateUtil<Menu> jdbcTemplateTool=new JdbcTemplateUtil<Menu>();
// System.out.println(jdbcTemplateTool.getObjString(menu));
//
// }
}
class JdbcTemplateTool<T> {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public String getObjSqlWhere(List paraList, Object obj, Class cla, String prefix) {
StringBuffer where = new StringBuffer();
if (paraList == null) {
paraList = new ArrayList();
}
if (obj == null) {
return "";
}
// logger.info(obj.toString());
try {
T t = (T) obj;
Field[] field = cla.getDeclaredFields();
for (Field field2 : field) {
String fieldName = field2.getName();
if (field2.getAnnotation(Column.class) != null) {
String beanid = field2.getAnnotation(Column.class).name();
if (!StringUtils.isEmpty(beanid)) {
String meName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
Method m = cla.getDeclaredMethod(meName);
Object o = m.invoke(t);
if (o != null) {
// System.out.println(o.getClass().getSimpleName());
boolean flag = false;
if (o.getClass().getSimpleName().equals("Integer")) {
if (field2.getAnnotation(Id.class) != null) {
if (((Integer) o).intValue() != 0) {
flag = true;
}
} else {
flag = true;
}
} else if (o.getClass().getSimpleName().equals("String")) {
if (!StringUtils.isEmpty((String) o)) {
flag = true;
}
} else if (o.getClass().getSimpleName().equals("Long")) {
if (field2.getAnnotation(Id.class) != null) {
if (((Long) o).longValue() != 0) {
flag = true;
}
} else {
flag = true;
}
}
if (flag) {
where.append(" AND " + prefix + "." + beanid + "=? ");
paraList.add(o);
}
}
}
}
}
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return where.toString();
}
public List getObjectList(List<LinkedCaseInsensitiveMap> l, Class cla) {
List<T> resList = new ArrayList<T>();
try {
for (LinkedCaseInsensitiveMap map : l) {
T tt = (T) cla.newInstance();
Field[] field = cla.getDeclaredFields();
for (Field field2 : field) {
String fieldName = field2.getName();
if (field2.getAnnotation(Column.class) != null) {
String beanid = field2.getAnnotation(Column.class).name();
if (map.containsKey(beanid)) {
String meName = "set" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
Method m = cla.getDeclaredMethod(meName, field2.getType());
// System.out.println(beanid);
m.invoke(tt, map.get(beanid));
// System.out.println(u.getId()+"");
// return;
}
}
}
resList.add(tt);
}
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resList;
}
}
---excuteInsertByList (JdbcTemplate jt, String tableName, final boolean seqId, final List list, final Class cla)使用说明:
public void run() {
logger.info("消息中心,当日报警统计开始。");
long l1 = System.currentTimeMillis();
try {
String sql = "select * from bmc.ALARM_RECORD where ALARM_AT >='"
+ DateUtil.formatDate(DateUtil.getToday(date, 1), "yyyy-MM-dd HH:mm:ss") + "' and ALARM_AT<='"
+ DateUtil.formatDate(DateUtil.getToday(date, 2), "yyyy-MM-dd HH:mm:ss") + "'";
JdbcTemplateUtil<AlarmRecord> jtu = new JdbcTemplateUtil<AlarmRecord>();
List<AlarmRecord> alarmList = jtu.queryForList(this.jt_bmc, sql, AlarmRecord.class);
// 得到当日报警记录
Map<String, MsgCenterReport> msgMap = new HashMap<String, MsgCenterReport>();
for (AlarmRecord alarm : alarmList) {
if (StringUtils.isNotEmpty(alarm.getMonitor().getPoliceCode())) {// 该场所所属派出所
if (msgMap.containsKey(alarm.getMonitor().getPoliceCode())) {
MsgCenterReport centerReport = msgMap.get(alarm.getMonitor().getPoliceCode());
String statVal = centerReport.getStatValue();
centerReport.setStatValue((new Integer(statVal) + 1) + "");
} else {
MsgCenterReport centerReport = new MsgCenterReport();
centerReport.setAreaCode(alarm.getAreaCode());
centerReport.setPoliceCode(alarm.getMonitor().getPoliceCode());
centerReport.setReportDate(DateUtil.formatDate(date, "yyyy-MM-dd"));
centerReport.setServiceType(1);
centerReport.setType(MsgFinalParamUtil.getMsgType(MsgFinalParamUtil.msg_type_cur_alarm));
centerReport.setStatValue("1");
msgMap.put(alarm.getMonitor().getPoliceCode(), centerReport);
}
}
if (msgMap.containsKey(alarm.getAreaCode())) {
MsgCenterReport centerReport = msgMap.get(alarm.getAreaCode());
String statVal = centerReport.getStatValue();
centerReport.setStatValue((new Integer(statVal) + 1) + "");
} else {
MsgCenterReport centerReport = new MsgCenterReport();
centerReport.setAreaCode(alarm.getAreaCode());
centerReport.setReportDate(DateUtil.formatDate(date, "yyyy-MM-dd"));
centerReport.setServiceType(1);
centerReport.setType(MsgFinalParamUtil.getMsgType(MsgFinalParamUtil.msg_type_cur_alarm));
centerReport.setStatValue("1");
msgMap.put(alarm.getAreaCode(), centerReport);
}
}
logger.info("消息中心,删除当日的报警记录总表数据.");
String deleteMsgCenterSql = "delete from STAT.MSG_CENTER_REPORT where type="
+ MsgFinalParamUtil.getMsgType(MsgFinalParamUtil.msg_type_cur_alarm) + " and REPORT_DATE='"
+ DateUtil.formatDate(date, "yyyy-MM-dd") + "'";
this.jt_stat.execute(deleteMsgCenterSql);
List<MsgCenterReport> msgCenterReportList = new ArrayList<MsgCenterReport>();
msgCenterReportList.addAll(msgMap.values());
logger.info("消息中心,报警记录统计总表完成!共" + msgCenterReportList.size() + "条记录!");
for (MsgCenterReport msg : msgCenterReportList) {
logger.info("消息中心,区域编号:" + msg.getAreaCode() + ".派出所编号:" + msg.getPoliceCode() + ".有"
+ msg.getStatValue() + "条报警记录信息.");
}
try {
JdbcTemplateUtil<MsgCenterReport> jtuStat = new JdbcTemplateUtil<MsgCenterReport>();
jtuStat.excuteInsertByList(this.jt_stat, "STAT.MSG_CENTER_REPORT", true, msgCenterReportList,
MsgCenterReport.class);
logger.info("消息中心,总表报警记录入库完成!");
} catch (Exception e) {
logger.error("消息中心,总表报警记录入库失败!", e);
}
} catch (Exception e) {
logger.error("消息中心,报警记录统计失败!", e);
}
long l2 = System.currentTimeMillis();
logger.info("消息中心,报警记录统计完成!用时:" + (l2 - l1) + "毫秒.");
}
------excuteInsert (JdbcTemplate jt, String tableName, boolean seqId, Object obj, Class cla)使用说明:
public void saveCase(Case cases) throws Exception {
try {
JdbcTemplateUtil<Case> jt = new JdbcTemplateUtil<Case>();
jt.excuteInsert(baseService.getJt(DaoUtil.dao_bmc_f), "BMC.CASE", true, cases, Case.class);
} catch (Exception e) {
logger.error("保存审计失败!", e);
}
}
// 保存审计
@RemoteMethod
public int saveCase(String caseCode, String caseName, String areaCode, String level, String description,
String openFlag, String customCount, String customTime) {
try {
if (StringUtils.isNotEmpty(caseName)) {
List<Case> caseList = this.caseService.getByCaseName(caseName);
if (caseList != null && caseList.size() > 0) {
return 3;
}
}
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Case cases = new Case();
cases.setCode(caseCode);
cases.setName(caseName);
cases.setStatus(new Integer(0));
cases.setLevel(StringUtils.stringToInt(level));
cases.setDescription(description);
cases.setOpenFlag(StringUtils.stringToInt(openFlag));
cases.setCreator(user.getUserName());
cases.setAreaCode(areaCode);
if(user.getLoginType().equals("2")){
cases.setPoliceCode(user.getPoliceCode());
}
cases.setCreateAt(new Date());
if (StringUtils.isNumber(customCount)) {
cases.setCustomCount(new Integer(customCount));
}
if (StringUtils.isNumber(customTime)) {
cases.setCustomTime(new Integer(customTime));
}
this.caseService.saveCase(cases);
} catch (Exception e) {
logger.error(e.getMessage(), e);
return 1;
}
return 0;
}
------queryForList(JdbcTemplate jt, String sql, Class cla) 使用说明:
public List<AttendanceUserConfig> attTimesGonfigList(String inId) {
if (StringUtils.isEmpty(inId)) {
inId = "-1";
}
String sql = "SELECT * FROM FMC.ATTENDANCE_USER_CONFIG WHERE id not in(" + inId + ")";
JdbcTemplateUtil<AttendanceUserConfig> aucJtu = new JdbcTemplateUtil<AttendanceUserConfig>();
List<AttendanceUserConfig> attTimesConfigList = aucJtu.queryForList(this.getJt(DaoUtil.dao_fmc_f), sql,
AttendanceUserConfig.class);
return attTimesConfigList;
}
------queryForList(JdbcTemplate jt, Object[] params, String sql, Class cla) 使用说明:
//通过ID 得到一条数据
public FjInvalidTm getFjInvalidTmById(long id){
List list=new ArrayList();
list.add(id);
String sql="select * from MC.FJ_INVALID_TM where ID =?";
JdbcTemplateUtil<FjInvalidTm> jdbcTemplateUtil = new JdbcTemplateUtil<FjInvalidTm>();
List<FjInvalidTm> list2=jdbcTemplateUtil.queryForList(baseService.getJt(DaoUtil.dao_mc), list.toArray(), sql, FjInvalidTm.class);
if(list2!=null && list2.size()>0){
return list2.get(0);
}else {
return null;
}
}
public SafeInfo isExistNum(String addCertifiCateNum) throws Exception {
List addParam = new ArrayList();
addParam.add(addCertifiCateNum);
SafeInfo safeInfo = null;
String sql = "SELECT * FROM MC.SAFE_INFO WHERE CERTIFICATE_NUM =?";
JdbcTemplateUtil<SafeInfo> jdbcTemplateUtil = new JdbcTemplateUtil<SafeInfo>();
List<SafeInfo> list = jdbcTemplateUtil.queryForList(baseService.getJt(DaoUtil.dao_mc), addParam.toArray(), sql,
SafeInfo.class);
if (list != null || list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
safeInfo = list.get(0);
}
}
return safeInfo;
}