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 ...
随机推荐
- 阿里云服务器Ubuntu 16.04 3安装mysql
.更新系统 apt-get update [注意:要在root用户下] .安装mysql-server apt-get install mysql-serverapt-get install mysq ...
- 1874 Bellman-ford算法 队列优化过的 用于稀疏图,有负权的图
#include<stdio.h> #include<algorithm> #include<iostream> #include<queue> usi ...
- 爬虫——使用ItemLoader维护item
在item的Filed()中设置参数函数,可以用来预处理item字段的数据,另一方面也方便程序代码的管理和重用 item中 from scrapy.loader.processors import M ...
- Codeforces Round #403(div 2)
A =w= B 题意:一个数轴上有n个整点,每个点都有一个速度,选一个点让他们集合,使得时间最少. 分析: 直接三分 C 题意:给定一棵树,任意两个距离小等于二的点不能染相同的颜色,求最小颜色数和染色 ...
- HDUPhysical Examination(贪心)
HDUPhysical Examination(贪心) 题目链接 题目大意:给N个队列,每一个队列在0时刻体检的时候完毕时间是ai.假设超过t(s),那么就是ai + t∗bi.问如何组合才干用最短的 ...
- zoj3605 Find the Marble --- 概率dp
n个杯子.球最開始在s位置.有m次换球操作,看到了k次,看的人依据自己看到的k次猜球终于在哪个位置,输出可能性最大的位置. dp[m][k][s]表示前m次操作中看到了k次球终于在s的频率. #inc ...
- LeetCode 929. Unique Email Addresses (独特的电子邮件地址)
题目标签:String 题目说明 有两个规则针对于 local name. 所以先把local name 和 domain name 分开. 两个规则是: rule 1:'.' 会被去除. (利用re ...
- Linux如何使用cURL分割下载大文件
Linux如何使用cURL分割下载大文件 - 51CTO.COM http://os.51cto.com/art/201508/489368.htm
- apache ua Custom Log Formats
RewriteEngine OnRewriteBase / RewriteCond %{HTTP_USER_AGENT} (android|bb\d+|meego).+mobile|avantgo|b ...
- Android 布局属性大全
常用属性汇总: android:hint 设置EditText为空时输入的提示信息 android:gravity 对该view内容的限定:靠上 下 左 右 andro ...