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
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问解决部分mybatis或者hibernate不支持的数据库,例informix。通过pool连接池提高性能,并将...
原生实现jsp+servlet的增删改查,通过JDBC连接数据库。没有框架内容,适合初学者使用。代码结构清晰注释很详细,直接下载就可以放到环境中跑起来
这个小项目是以前学习servlet的时候写的,前端用的是bootstrap框架,脚本都是用的JQuery,后台用的是原生的servlet和JDBC,只对JDBC做了初步的封装,对想要了解servlet与后台交互基层只是和JDBC原生样式有一些帮助,...
java基于原生的MySql的JDBC分页组件,我没有做jsp页面,我感觉那样很low,基本上可以套用我的分页组件,对于初学者帮助很大
原包存在一个bug,请下载该版本 boolean delete(java.lang.String sql) 删除单条记录的方法,适用于简单的sql语句 boolean delete(java.lang.String sql, java.util.Map,java.lang.Object> elements) ...
jdbc原生代码详解 及 注释 解决方案
NULL 博文链接:https://superjavason.iteye.com/blog/255423
例如说jdbc,dbutil+C3p0,hibernate,jdbcTemplate等等【这五个都会总结】,到后面的话使用一些高级的框架去操作数据库,比如hibernate。但是底层操作数据库是重要的,高级框架也是也底层为基础搭建的,所以这里还是...
非常小巧的基于c3p0数据源和纯java的jdbc原生写的数据源框架,支持多数据源连接,mysql,oracle,sqlserver等等。方便小巧,侵入性低,与任何框架都易于集成和使用。
使用java原生jdbc完成数据的增删改查
原生jdbc超市订单管理系统,适合新手来试炼,里面是一个完整的java Web项目
DBleper类,简化链接数据库,简化增删改查代码,非常实用。
现在的数据层的开发,大多会使用...但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: ...
基于jsp+js+servlet+jdbc+mysql开发产品后台管理系统,实现用户增删改查、分页,登录,注册,图片上传等功能。 包括以下5个功能: 1、登录 用户默认主页index.jsp,可选择【登录】功能,若登录成功,则进入产品管理中...
设备维修管理系统源码+项目说明(JavaWeb 项目,使用原生servlet 和 JDBC).zip设备维修管理系统源码+项目说明(JavaWeb 项目,使用原生servlet 和 JDBC).zip设备维修管理系统源码+项目说明(JavaWeb 项目,使用...
java 通过 jdbc 连接 数据库的jar包
java课程设计基于原生servlet和jdbc的学生信息管理系统 使用原生 servlet作为后端进行开发 后端采用纯servlet进行开发,同时搭配原生的jdbc,整个架构没有使用任何框架,可以说是非常原始了; 验证码工具类可以返回...
适合入门了解,或者对源码不熟悉的人练手。
测试jdbc连接sql server 2005 是否成功,采用sa和windows身份两种认证方式