日期:2014-05-16 浏览次数:20420 次
? 贴一个很好用的 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