`

jdbc原生

阅读更多
package com.jdbctemplate;

import java.util.List;
import java.util.Map;

public interface JdbcTemplateDao {

	/**
	 * 原生插入
	 */
	public int insert(String sql);

	/**
	 * 原生插入+参数,采用问号占位符
	 */
	public int insert(String sql, final Object... args);

	/**
	 * 批量插入,参数为一个LIST包含了多个数组
	 */
	public int[] batchInsert(String sql, final List<Object[]> args);

	/**
	 * 批量更新或删除,参数为一个LIST包含了多个数组
	 */
	public int[] batchUpdateOrDelete(String sql, final List<Object[]> args);

	/**
	 * 原生更新或删除
	 */
	public int updateOrDelete(String sql);

	/**
	 * 原生更新或删除+参数,采用问号占位符
	 */
	public int updateOrDelete(String sql, final Object... args);

	/**
	 * 原生查询,返回LIST包含了多个MAP
	 */
	public List<Map<String, Object>> execute(String sql);

	/**
	 * 原生查询+参数,返回LIST包含了多个MAP
	 */
	public List<Map<String, Object>> execute(String sql, Object... args);

	// public Object executeForObject(String sql);

	// public Object executeForObject(String sql, Object... args);
	/**
	 * 原生查询单个实例,返回一个MAP,采用key+value方式
	 */
	public Map<String, Object> executeForMap(String sql);

	/**
	 * 原生查询单个实例+参数,返回一个MAP,采用key+value方式
	 */
	public Map<String, Object> executeForMap(String sql, Object... args);

	/**
	 * 原生分页查询
	 */
	public Map<String, Object> executeForPageList(String sql, int curNum, int pageSize, boolean count);

	/**
	 * 原生分页查询+参数
	 */
	public Map<String, Object> executeForPageList(String sql, int curNum, int pageSize, Object[] params, boolean count);

	/**
	 * 原生查总数,返回一个Long型
	 */
	public Long getCount(String sql);

	/**
	 * 原生查总数+参数,返回一个Long型
	 */
	public Long getCount(String sql, Object... args);

}

 

package com.jdbctemplate.impl;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.stereotype.Repository;

import com.hesc.urp.Constants;
import com.jdbctemplate.JdbcTemplateDao;

/**
 * 
 * @Title JdbcTemplateDaoImpl.java
 * @Description TODO(JdbcTemplate操作,替代mybaits,使用无pojo类的方式)
 */
@Repository
public class JdbcTemplateDaoImpl implements JdbcTemplateDao {
	private static final Logger logger = Logger.getLogger(JdbcTemplateDaoImpl.class);
	@Autowired
	private JdbcTemplate jdbcTemplate;

	/**
	 * 
	 * @Description (insert+sql)
	 * @param sql
	 * @return
	 * @date 2017年11月28日
	 */
	public int insert(String sql) {
		return insert(sql, new Object[] {});
	}

	/**
	 * 
	 * @Description (insert+sql+args,避免sql注入)
	 * @param sql
	 * @param args
	 * @return
	 * @date 2017年11月28日
	 */
	public int insert(final String sql, final Object... args) {
		logger.info("***sql=[" + sql + "]");
		// return updateOrDelete(sql, new Object[] {});
		long starttime = System.currentTimeMillis();
		int affectedLine = 0;
		affectedLine = jdbcTemplate.update(sql, new PreparedStatementSetter() {
			public void setValues(PreparedStatement ps) throws SQLException {
				if (args != null && args.length > 0) {
					for (int i = 0, len = args.length; i < len; i++) {
						ps.setObject(i + 1, args[i]);
					}
				}
			}
		});
		long endtime = System.currentTimeMillis();
		logger.info("insert耗时:" + (endtime - starttime) + "ms");
		return affectedLine;
	}

	/**
	 * 
	 * @Description (updateOrDelete+sql)
	 * @param sql
	 * @return
	 * @date 2017年11月28日
	 */
	public int updateOrDelete(String sql) {
		return updateOrDelete(sql, new Object[] {});
	}

	/**
	 * 
	 * @Description (updateOrDelete+sql+args,避免sql注入)
	 * @param sql
	 * @param args
	 * @return
	 * @date 2017年11月28日
	 */
	public int updateOrDelete(String sql, final Object... args) {
		logger.info("***sql=[" + sql + "]");
		long starttime = System.currentTimeMillis();
		int affectedLine = 0;
		// if (args.length > 0) {
		// affectedLine = jdbcTemplate.update(sql, args);
		// } else {
		// affectedLine = jdbcTemplate.update(sql);
		// }
		affectedLine = jdbcTemplate.update(sql, new PreparedStatementSetter() {
			public void setValues(PreparedStatement ps) throws SQLException {
				if (args != null && args.length > 0) {
					for (int i = 0, len = args.length; i < len; i++) {
						ps.setObject(i + 1, args[i]);
					}
				}
			}
		});
		long endtime = System.currentTimeMillis();
		logger.info("updateOrDelete耗时:" + (endtime - starttime) + "ms");
		return affectedLine;
	}

	/**
	 * 
	 * @Description (batchInsert+sql+args)
	 * @param sql
	 * @param args
	 * @return
	 * @date 2017年11月29日
	 */
	public int[] batchInsert(String sql, final List<Object[]> args) {
		logger.info("***sql=[" + sql + "]");
		if (args != null && args.size() > 0) {
			long starttime = System.currentTimeMillis();
			int[] affectline = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
				@Override
				public void setValues(PreparedStatement ps, int i) throws SQLException {
					Object[] objs = args.get(i);
					if (args != null && objs.length > 0) {
						for (int j = 0, len = objs.length; j < len; j++) {
							ps.setObject(j + 1, objs[j]);
						}
					}
				}

				@Override
				public int getBatchSize() {
					return args.size();
				}
			});
			long endtime = System.currentTimeMillis();
			logger.info("batchInsert耗时:" + (endtime - starttime) + " ms");
			return affectline;
		} else {
			logger.info("args数组不可为空!");
			return new int[] {};
		}

	}

	/**
	 * 
	 * @Description (batchUpdateOrDelete+sql+args)
	 * @param sql
	 * @param args
	 * @return
	 * @date 2017年11月29日
	 */
	public int[] batchUpdateOrDelete(String sql, final List<Object[]> args) {
		logger.info("***sql=[" + sql + "]");
		if (args != null && args.size() > 0) {
			long starttime = System.currentTimeMillis();
			int[] affectline = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
				@Override
				public void setValues(PreparedStatement ps, int i) throws SQLException {
					Object[] objs = args.get(i);
					if (args != null && objs.length > 0) {
						for (int j = 0, len = objs.length; j < len; j++) {
							ps.setObject(j + 1, objs[j]);
						}
					}
				}

				@Override
				public int getBatchSize() {
					return args.size();
				}
			});
			long endtime = System.currentTimeMillis();
			logger.info("batchUpdateOrDelete耗时:" + (endtime - starttime) + " ms");
			return affectline;
		} else {
			logger.info("args数组不可为空!");
			return new int[] {};
		}
	}

	/**
	 * 
	 * @Description (execute+sql)
	 * @param sql
	 * @return
	 * @date 2017年11月28日
	 */
	public List<Map<String, Object>> execute(String sql) {
		return execute(sql, new Object[] {});
	}

	/**
	 * 
	 * @Description (execute+sql+args)
	 * @param sql
	 * @param args
	 * @return
	 * @date 2017年11月28日
	 */
	public List<Map<String, Object>> execute(String sql, Object... args) {
		logger.info("***sql=[" + sql + "]");
		long starttime = System.currentTimeMillis();
		List<Map<String, Object>> map = null;
		if (args.length > 0) {
			map = jdbcTemplate.queryForList(sql, args);
		} else {
			map = jdbcTemplate.queryForList(sql);
		}
		long endtime = System.currentTimeMillis();
		logger.info("execute耗时:" + (endtime - starttime) + "ms");
		return map;
	}

	/**
	 * 
	 * @Description (executeForObject+sql)
	 * @param sql
	 * @return
	 * @date 2017年11月29日
	 */
	public Object executeForObject(String sql) {
		return executeForObject(sql, new Object[] {});
	}

	/**
	 * 
	 * @Description (executeForObject+sql+args)
	 * @param sql
	 * @param args
	 * @return
	 * @date 2017年11月29日
	 */
	public Object executeForObject(String sql, Object... args) {
		logger.info("***sql=[" + sql + "]");
		long starttime = System.currentTimeMillis();
		Object obj = null;
		if (args.length > 0) {
			obj = jdbcTemplate.queryForObject(sql, args, Object.class);
		} else {
			obj = jdbcTemplate.queryForObject(sql, Object.class);
		}
		long endtime = System.currentTimeMillis();
		logger.info("executeForObject耗时:" + (endtime - starttime) + "ms");
		return obj;
	}

	/**
	 * 
	 * @Description (executeForMap+sql)
	 * @param sql
	 * @return
	 * @date 2017年11月29日
	 */
	public Map<String, Object> executeForMap(String sql) {
		return executeForMap(sql, new Object[] {});
	}

	/**
	 * 
	 * @Description (executeForMap+sql+args)
	 * @param sql
	 * @param args
	 * @return
	 * @date 2017年11月29日
	 */
	public Map<String, Object> executeForMap(String sql, Object... args) {
		logger.info("***sql=[" + sql + "]");
		long starttime = System.currentTimeMillis();
		Map<String, Object> map = null;
		if (args.length > 0) {
			map = jdbcTemplate.queryForMap(sql, args);
		} else {
			map = jdbcTemplate.queryForMap(sql);
		}
		long endtime = System.currentTimeMillis();
		logger.info("executeForMap耗时:" + (endtime - starttime) + "ms");
		return map;
	}

	/**
	 * 
	 * @Description (executeForPageList+sql+curNum+pageSize)
	 * @param sql
	 * @param curNum
	 * @param pageSize
	 * @return
	 * @date 2017年11月29日
	 */
	public Map<String, Object> executeForPageList(String sql, int curNum, int pageSize, boolean count) {
		return executeForPageList(sql, curNum, pageSize, new Object[] {}, count);
	}

	/**
	 * 
	 * @Description (executeForPageList+sql+curNum+pageSize+args)
	 * @param sql
	 * @param curNum
	 * @param pageSize
	 * @param args
	 * @return
	 * @date 2017年11月30日
	 */
	public Map<String, Object> executeForPageList(String sql, int curNum, int pageSize, Object[] args, boolean count) {
		logger.info("***sql=[" + sql + "]");
		long starttime = System.currentTimeMillis();
		Map<String, Object> map = new HashMap<String, Object>();
		long totalrecord = 0;
		if (count) { // 是否count查询,默认false
			// 记录统计
			totalrecord = getCount(sql, args).longValue();
		}
		// 2. sql封装
		int start = pageSize * (curNum - 1);
		// int end = pageSize * curNum;
		String searchsql = sql + " limit " + start + " , " + pageSize;
		List<Map<String, Object>> mapList = null;
		if (args.length > 0) {
			mapList = jdbcTemplate.queryForList(searchsql, args);
		} else {
			mapList = jdbcTemplate.queryForList(searchsql);
		}
		// 5.统一返回map封装数据
		map.put("totalrecord", totalrecord);
		map.put("list", mapList);
		// 计时
		long endtime = System.currentTimeMillis();
		logger.info("executeForPageList耗时:" + (endtime - starttime) + "ms");
		return map;
	}

	/**
	 * 
	 * @Description (getCount+sql)
	 * @param sql
	 * @return
	 * @date 2017年11月28日
	 */
	public Long getCount(String sql) {
		return getCount(sql, new Object[] {});
	}

	/**
	 * 
	 * @Description (getCount+sql+args)
	 * @param sql
	 * @param args
	 * @return
	 * @date 2017年11月28日
	 */
	public Long getCount(String sql, Object... args) {
		logger.info("***sql=[" + sql + "]");
		long starttime = System.currentTimeMillis();
		// sql = sql.toLowerCase();
		// int whereIndex = sql.indexOf("from");
		// String whereSql = sql.substring(whereIndex);
		// int orderIndex = whereSql.indexOf("order by");
		// if (orderIndex > 0) {
		// whereSql = whereSql.substring(0, orderIndex - 1);
		// }
		String countSQL = "select count(*) count from (" + sql + ") a";
		long countSum = 0;
		if (args != null && args.length > 0) {
			countSum = jdbcTemplate.queryForObject(countSQL, args, Long.class);
		} else {
			countSum = jdbcTemplate.queryForObject(countSQL, Long.class);
		}
		long endtime = System.currentTimeMillis();
		logger.info("getCount耗时:" + (endtime - starttime) + "ms");
		return countSum;
	}

	public static void main(String[] args) {
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl(
				"jdbc:mysql://127.0.0.1:3306/db?rewriteBatchedStatements=true&amp;useUnicode=true&amp;characterEncoding=utf-8");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");

		// 创建jdbcTemplate对象
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

		String sql = "SELECT id, username FROM `urp_user` where createtime= 1540000000000";
		List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql);

		for (Map<String, Object> map : mapList) {
			// 处理
			String updateSql = "update `urp_user` set `password` = ? where id = ? ";
			String username = map.get("username").toString();
			System.out.println(username+"="+username.substring(username.length()-4));
			String password = new Md5Hash("rmtj"+username.substring(username.length()-4), ByteSource.Util.bytes(Constants.HESCSALT), 2).toHex();
			
			jdbcTemplate.update(updateSql, new Object[] { password, map.get("id") });
		}

	}

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics