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&useUnicode=true&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:oracle:thin 连接问题
-
eclipse-求助!jdbc连接mysql的问题!
-
HTML5实战与剖析之原生拖拽(三dataTransfer对象)
-
jdbc连接hive0.14
-
【微信原生支付】——服务商,小微商户专属接口:小微商户新增对应APPID关联API,使用注意
-
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
-
微软努力打造原生Win10浏览器:Edge 80原生支持ARM64
-
移除IOS下按钮的原生样式_html/css_WEB-ITnose
-
原生javascript实现图片轮播效果代码_javascript技巧
-
JDBC数据库操作