我自己的JdbcTemplate
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import javax.sql.DataSource; import org.apache.catalina.tribes.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSONObject; public class JdbcTemplate {
private static Logger logger = LoggerFactory.getLogger(JdbcTemplate.class);
private DataSource ds; public DataSource getDataSource() {
return ds;
} public void setDataSource(DataSource ds) {
this.ds = ds;
} JdbcTemplate() {
} public JdbcTemplate(DataSource ds) {
setDataSource(ds);
} public List<Map<String, Object>> queryForList(String sql, Object... args) {
Connection con = null;
try {
logger.info(sql);
logger.info(Arrays.toString(args));
con = ds.getConnection();
con.setAutoCommit(false);
PreparedStatement ps = con.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
ResultSet rs = ps.executeQuery();
return convertResult(rs);
} catch (SQLException e) {
logger.error(e.getMessage());
try {
con.close();
} catch (SQLException e1) {
logger.error(e1.getMessage());
}
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
}
}
return null; } public Map<String, Object> queryForMap(String sql, Object... param) {
List<Map<String, Object>> lst = queryForList(sql, param);
return lst != null && lst.size() > 0 ? lst.get(0) : new HashMap<String, Object>();
} public <T> T queryForObject(String sql, Class<T> clazz, Object... param) {
T obj = null;
if (clazz == null) {
return obj;
} else {
Map<String, Object> map = queryForMap(sql, param);
if (map != null && map.size() > 0) {
try {
if (clazz.getName().startsWith("java.util") || clazz.getName().startsWith("java.lang")) {
for (Entry<String, Object> en : map.entrySet()) {
if (en.getValue() == null) {
continue;
} Class<?> c = en.getValue().getClass();
if (c == clazz || c.isAssignableFrom(clazz) || clazz.isAssignableFrom(c)) {
String s = en.getValue().toString();
obj = JSONObject.parseObject(s, clazz);
return obj;
}
}
} else {
obj = JSONObject.parseObject(JSONObject.toJSONString(map), clazz);
return obj;
}
} catch (Exception e) {
logger.error(e.getMessage());
}
}
}
return obj;
} public int queryForUpdate(String sql, Object... args) {
int count = 0;
Connection con = null;
try {
con = ds.getConnection();
con.setAutoCommit(false);
PreparedStatement ps = con.prepareStatement(sql);
if (args != null) {
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
}
count = ps.executeUpdate();
con.commit();
con.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
return count;
} public int queryForBatchUpdate(String sql, String[]... argsArray) {
int count = 0;
Connection con = null;
try {
con = ds.getConnection();
con.setAutoCommit(false);
PreparedStatement ps =con.prepareStatement(sql);
if (argsArray != null) {
for (int i = 0; i < argsArray.length; i++) {
String[] args = argsArray[i];
for (int j = 0; j < args.length; j++) {
ps.setObject(j+ 1, args[j]);
}
ps.addBatch();
}
} int[] arr = ps.executeBatch();
for (int i : arr) {
count += i;
}
con.commit();
con.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
return count;
} public int queryForBatchUpdate(String sql, List<String[]> argsArray) {
int count = 0;
Connection con = null;
try {
con = ds.getConnection();
con.setAutoCommit(false);
PreparedStatement ps =con.prepareStatement(sql);
if (argsArray != null) {
for (int i = 0; i < argsArray.size(); i++) {
String[] args = argsArray.get(i);
for (int j = 0; j < args.length; j++) {
ps.setObject(j + 1, args[j]);
}
ps.addBatch();
}
} int[] arr = ps.executeBatch();
for (int i : arr) {
count += i;
}
con.commit();
ps.close();
con.close();
} catch (SQLException e) {
logger.error(e.getMessage());
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
queryForBatchUpdate(sql, argsArray);
}
return count;
} public static List<Map<String, Object>> convertResult(ResultSet rs) {
List<Map<String, Object>> lst = new LinkedList<>();
if (rs == null)
return lst; try {
// 得到结果集(rs)的结构信息,比如字段数、字段名等
ResultSetMetaData md = rs.getMetaData(); // 返回此 ResultSet 对象中的列数
int columnCount = md.getColumnCount(); Map<String, Object> rowData = new LinkedHashMap<>();
while (rs.next()) {
rowData = new LinkedHashMap<>(columnCount);
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
lst.add(rowData);
}
rs.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
return lst;
}
}
我自己的JdbcTemplate的更多相关文章
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- Spring JdbcTemplate
参考链接: https://my.oschina.net/u/437232/blog/279530 http://jinnianshilongnian.iteye.com/blog/1423897 J ...
- jdbcTemplate批量插入(添加)
public void addSubscibe(List<PermedipUserSubscribeVo> list) { final List<PermedipUserSubscr ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
- Spring MVC篇二、使用JdbcTemplate进行数据库操作
上一篇只是一个简单的Spring MVC框架,接下来添加一些跟数据库的交互. 一.添加jdbc相关配置 在maven中添加相关依赖后,配置数据库访问参数及数据源.数据库参数使用配置文件,代码如下: ...
- 使用Spring JdbcTemplate实现数据库操作
今天我来演示 关于JDBCTemplate实现对数据库的查询和添加 首先是添加 第一步大家都知道 创建一个实体类 然后写一个方法 把实体类当参数传进去 在实现这个接口 JdbcDaoSupport这个 ...
- JdbcTemplate进行查询
1.jdbcTemplate.queryForInt() 和 jdbcTemplate.queryForLong() 例如:下面使用queryForInt()方法传回user表中的记录数: jdbcT ...
- jdbcTemplate之jdbc模板技术
1:为什么要使用jdbcTemplate? 在实际开发中使用jdbc技术太过复杂,为了减少代码冗余,操作简单 步骤一:创建实体类 package beans; public class Book { ...
- Spring JdbcTemplate 方法详解
JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...
- Spring中的JdbcTemplate使用
1.引出SpringJDBC的概念 在学习JDBC编程时我们会感觉到JDBC的操作是多么繁琐,那么当我们学习的Hibernate框架时,我们感觉到数据库的操作也变非常简单,提高了开发效率.但是当使用H ...
随机推荐
- 解决 Genymotion 显示‘unable to start the virtual device’的问题
·解决方案 以管理员身份运行以下命令: bcdedit /set hypervisorlaunchtype off ,然后重启电脑,打开模拟器即可. 注意,一定是以[管理员]的身份运行的[命令提示符] ...
- Zabbix技术分享——snmp异常排查指南
大家好,我是乐乐.在IT运维中,难免会碰上设备snmp不通的情况,那么,当问题出现的时候,运维工程师该如何快速找到问题所在呢?下面让我们一起来看看吧! 1.IP配置检查 首先检查zabbix监控上 ...
- typeorm-model-generator 数据库映射Model 命令 - nest
typeorm-model-generator 数据库映射Model 命令 NestJs中的控制器.路由.Get.Post方法参数装饰器 https://blog.csdn.net/urwddd/ar ...
- 音频信号质量的度量标准--MOS得分的由来
早期语音质量的评价方式是凭主观的,人们在打通电话之后通过人耳来感知语音质量的好坏.1996年国际ITU组织在ITU-T P.800和P.830建议书开始制订相关的评测标准:MOS(Mean Opini ...
- 定义pod的hosts文件(HostAliases)
通过HostAliases 向 Pod /etc/hosts 文件添加条目 当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目, 可以在 Pod 级别覆 ...
- Node.js解压版的环境配置及相关常用命令
下载 进入node.js官网的下载页面node.js下载页面,选择合适的版本进行下载 配置 1.设置环境变量 随便找一个地方,将文件解压出来 复制当前的路径,我的电脑右键,打开属性,左边有个高级系统配 ...
- 【jQuery】(8)---jquery Ajax
jquery ajax 一.AJAX 概述 1.什么是 AJAX? 特点 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使 ...
- 使用 LogProperties source generator 丰富日志
Nuget包 Microsoft.Extensions.Telemetry.Abstractions 包含的新的日志记录source generator,它支持使用[LogProperties]将整个 ...
- 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第2章
本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 出处:2.2.6 Windows内存布局 原文: segment heap:用于Universal Windows Platform程序,它提供了 ...
- IDEA (任意 JetBrains IDE)拆分先前 commit
最近在合并上游代码,遇到了一个问题:某个 commit 杂糅了几个不同的特性修改,这可能会导致 rebase 上游代码时需要再对该 commit 进行额外的代码冲突处理 解决方法:合并上游分支前,拆分 ...