日期:2014-05-16 浏览次数:20512 次
? 贴一个很好用的 JdbcTemplate的封装~
? 总有人说Hibernate在特殊情况下多不好用多不好用~
? 只是我认为,一个系统中 jdbc 和 Orm 共存是必要滴。
?
? 分享分享~代码非我所写。 我的第一个导师 czp 写的。
? 现在他已经不在这里干了,据说是念博去了 ~
? 只是我知道那不太现实,他可能是做的不爽就闪人了吧.
?
? 纪念我的 志平~ 。
?
? 欢迎 直接copy走,不过copy的时候,帮我祝福下志平~
?
?
package com.cnc.erp.jdbc;
import java.sql.Blob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet;
import org.springframework.util.Assert;
import com.cnc.erp.cfg.Globals;
import com.cnc.erp.jdbc.permission.RecordPermissionChecker;
import com.cnc.erp.jdbc.support.QueryObject;
import com.cnc.erp.jdbc.support.QueryParam;
import com.cnc.erp.jdbc.support.QuerySqlParser;
import com.cnc.erp.jdbc.support.QueryWebParameter;
import com.cnc.erp.jdbc.support.QueryWebUtils;
import com.cnc.erp.util.Log;
import com.cnc.erp.util.SqlUtil;
import com.cnc.erp.util.StringUtil;
/**
* 基于spring NamedParameterJdbcTemplate封装的jdbc操作
*
* 待补充的功能:TODO 1)、中间需要增加sql 函数的转换;日志、异常的处理 <br>
* 2)、另外结合实际需要直接给出xml数据格式
*
* @author 陈志平 chenzp
* @desc CriteriaPage.java
*
* @说明: web 应用基础平台
* @date Aug 1, 2006 4:57:47 PM
* @版权所有: All Right Reserved 2006-2008
*/
public class JdbcDAOImpl extends NamedParameterJdbcDaoSupport implements
IJdbcDAO {
// protected Log log = LogFactory.getLog(getClass());
public JdbcDAOImpl() {
}
public JdbcOperations getJdbcOperations() {
return getNamedParameterJdbcTemplate().getJdbcOperations();
}
/**
* 直接执行一条sql
*
* @param sql
*/
public void execute(String sql) {
Assert.hasText(sql, "sql must be not null");
getJdbcOperations().execute(sql);
}
/**
* 可直接运行的sql语句数组
*
* @param sql
* update ca_user set a ='newea' ,b=3 where c = 5
* @return
*/
public int[] batchUpdate(String[] sql) {
return getJdbcOperations().batchUpdate(sql);
}
/**
* 注意:这里的sql不支持 命名参数,只能用 ? 代替
*
* @param sql
* update ca_user set a =? ,b=? where c = ?
* @param dataSet
* List<String[]>
* @return
*/
public int[] batchUpdate(String sql, final List<String[]> dataSet) {
BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter() {
public int getBatchSize() {
return dataSet.size();
}
public void setValues(PreparedStatement psmt, int i) {
String[] obj = dataSet.get(i);
try {
for (int j = 0; j < obj.length; j++) {
psmt.setString(j + 1, obj[j]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
return getJdbcOperations().batchUpdate(sql, setter);
}
/**
* 更新sql语句的执行,没有参数的情况
*
* @param sql
* @return 受影响的行数
*/
public boolean update(String sql) {
Assert.hasText(sql, "sql must be not null");
return getJdbcOperations().update(sql) > 0;
}
/**
* 只有一个参数更新语句执行
*
* @param sql:更新语句
* @param paramMap:命名参数
* @return 受影响的行数
*/
public boolean update(String sql, String namedParam, Object value) {
Map<String, Object> paramMap = new HashMap<String, Object>(1);
paramMap.put(StringUtil.strnull(namedParam), value);
return update(sql, paramMap);
}
/**
* 更新语句执行
*
* @param sql:更新语句
* @param p