欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jdbc原生

程序员文章站 2022-03-06 18:34:58
...
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") });
		}

	}

}

 

相关标签: jdbc