JdbcTemplate:Jdbc模板和数据库元数据
通过 Jdbc 、C3P0 、Druid 的使用我们会发现即使我们做了工具的封装,但重复性的代码依旧很多。我们可以通过 JdbcTemplate 即 Jdbc 模板来使我们的代码更加简洁,逻辑更加清晰。 JdbcTemplate是Spring对JDBC的封装。我们可以将其理解为使用Java通过JDBC操作数据库的固定套路写法。使开发人员对数据库操作只关注:
数据的请求(sql)
请求的响应(查询返回)
一.JdbcTemplate使用步骤:
1.导入Jar包
2.创建JdbcTemplate对象
// 传入连接池对象,JdbcTemplate会自动维护连接池
JdbcTemplate jdbcTemplate =
new JdbcTemplate(MyJdbcUtils.getDataSource());
3.编写sql语句
// 依旧使用预编译对象的格式
String sql = "insert into user values(null,?,?) ";
4.执行并返回结果
增删改:
// 用于执行INSERT、UPDATE、DELETE等DML语句
// sql: 要执行的sql语句
// args: sql执行时需要的参数|数组
public int update(final String sql,Object... args)
查询:
//1.queryForObject返回一个指定类型**
String sql = "select pname from product where id = ?";
String pname = template.queryForObject(sql, String.class, 3);
//2.queryForMap返回一个Map集合对象
String sql = "select * from product where id = ?";
Map<String, Object> map = template.queryForMap(sql, 4);
//3.queryForList返回一个List集合对象,集合对象存储Map类型数据
String sql = "select * from product where id in (3,4)";
List<Map<String, Object>> list = template.queryForList(sql,3,4);
//4. query使用BeanPropertyRowMapper做映射返回对象
String sql = "select * from product where id = ? ";
Product product = template.queryForObject
(sql, new BeanPropertyRowMapper<>(Product.class), 4);
// 上面为单条记录(对象实体) 下面为多条记录(对象实体)
String sql = "select * from product";
List<Product> list = jdbcTemplate.query
(sql, new BeanPropertyRowMapper<>(Product.class));
Tips:
在做查询时第四种方法使用最多,需要保证实体类的属性名称及数据类型和数据库表中的字段名称类型要保持一致。当然也可以进行自行的查询实体封装:
String sql = "select * from product ";
// 执行sql并接收结果集 参数1: sql语句
// 参数2: rowMapper: 本条记录,自行封装
List<Product> list = template.query(sql, new RowMapper<Product>(){
@Override // resultSet: 被遍历到的本条记录 i: 索引值
public Product mapRow(ResultSet rs, int i)throws SQLException{
Product pro = new Product();
pro.setId(rs.getInt("id"));
pro.setPname(rs.getString("pname"));
pro.setPrice(rs.getDouble("price"));
return pro;
}
});
二.数据库元数据:
元数据:数据库、表、列的定义信息。
ParameterMetaData
作用:
获取PreparedStatement所编译的sql语句中 ? 的个数和类型
String sql = "select *
from user where username = ? and password = ? ";
PreparedStatement pst = conn.PrepareStatement(sql);
API
PreparedStatement. getParameterMetaData();
//int getParameterCount()
//获取PreparedStatement的SQL语句参数?的个数
//int getParameterType(int param)
//获取指定参数的SQL类型。
//不是所有的数据库都支持,mysql不支持
ResultSetMetaData
作用:
可用于获取有关 ResultSet 对象中列的类型和属性的信息。
ResultSetMetaData
//如何获取 ResultSetMetaData
//ResultSet.getMetaData()
//int getColumnCount()
//返回此 ResultSet 对象中的列数
//String getColumnName(int column)
//获取指定列的名称
//String getColumnTypeName(int column)
//获取指定列的数据库特定类型名称
关注微信公众号,随时随地学习

JdbcTemplate:Jdbc模板和数据库元数据的更多相关文章
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring JDBC模板类—org.springframework.jdbc.core.JdbcTemplate(转)
今天看了下Spring的源码——关于JDBC的"薄"封装,Spring 用一个Spring JDBC模板类来封装了繁琐的JDBC操作.下面仔细讲解一下Spring JDBC框架. ...
- JDBC(二)之JDBC处理CLOB和BLOB及事务与数据库元数据获取
前面大概介绍了JDBC连接数据库的过程,以及怎么操作数据库,今天给大家分享JDBC怎么处理CLOB和BLOB存储图片的事情,以及JDBC怎么去处理事务.怎么在插入数据的时候生成主键返回值 一.JDBC ...
- OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
元数据最本质.最抽象的定义为:data about data (关于数据的数据).它是一种广泛存在的现象,在许多领域有其具体的定义和应用. JDBC中的元数据,有数据库元数据(DatabaseMeta ...
- JDBC中的元数据——1.数据库元数据
package metadata; import java.sql.Connection; import java.sql.DatabaseMetaData; import javax.sql.Dat ...
- 开涛spring3(7.2) - 对JDBC的支持 之 7.2 JDBC模板类
7.2 JDBC模板类 7.2.1 概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDB ...
- spring框架总结(04)----介绍的是Spring中的JDBC模板
1.1 Jdbc模板概述 它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装.spring框架为我们提供了很多的操作模板类,入下图所示: 我们今天的主角在spring-jd ...
- JDBCTemplate与模板设计方法(二)
前言:上一篇博客介绍了模板方法模式,并且给出了一个小demo,简单对模板方法进行了实现,接下来我们把目光转向spring的源码JDBCTemplate,看一看spring是如何对jdbc进行高度封装的 ...
- Spring中的JDBC模板类入门
1.Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 2.提供了JDBC模板,Spring框架提供的 *JdbcTemplate类 3.Spring框架可以整合Hib ...
随机推荐
- BZOJ 4819 Luogu P3705 [SDOI2017]新生舞会 (最大费用最大流、二分、分数规划)
现在怎么做的题都这么水了.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4819 (luogu) https://ww ...
- noip模拟赛 abcd
[问题描述]有4个长度为N的数组a,b,c,d.现在需要你选择N个数构成数组e,数组e满足a[i]≤e[i]≤b[i]以及 并且使得 最大.[输入格式]输入文件名为abcd.in.输入文件共 N+1 ...
- noip模拟赛 兔子
[问题描述]在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子窝 ...
- [UOJ48] 核聚变反应强度
QUQ 思路 求出a1的所有约数,与a1.ai放入同一数组: 求出gcd(a1,ai): 枚举约数,得出ans; 代码实现 #include<cmath> #include<cstd ...
- (12)GrabCut前景提取
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('opencv-python-foregr ...
- 【Tomcat】tomcat配置多域名和虚拟路径
当我们用浏览器在访问网页的时候,如访问www.baidu.com,一般都认为会在DNS服务器上找这个域名对应的IP,然后向这个IP发送请求 并响应,其实在DNS服务器解析之前,本机会先在你的系统配置文 ...
- PatentTips - Hamming distance comparison
BACKGROUND INFORMATION In a typical data processing environment, data may be transmitted in multiple ...
- 洛谷——P2910 [USACO08OPEN]寻宝之路Clear And Present Danger
P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 题目描述 Farmer John is on a boat seeking fabled treasur ...
- 几道splay
hdu 1890 题意:每次将第i位到第i小数字所在的位置之间的位置翻转,每次输出第i小数字所在的位置 分析: 简单的splay处理区间翻转问题 有三点需要注意: 1.区间是1~n+2 2.此题里的查 ...
- 【基础练习】【高速幂】codevs3285 转圈游戏题解
转载请注明出处 来自CSDN用户ametake 题目来自NOIP2013TGD1T1 题目描写叙述 Description n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.依照顺时针方向给 n ...