通过 Jdbc 、C3P0 、Druid 的使用我们会发现即使我们做了工具的封装,但重复性的代码依旧很多。我们可以通过 JdbcTemplate 即 Jdbc 模板来使我们的代码更加简洁,逻辑更加清晰。 JdbcTemplate是Spring对JDBC的封装。我们可以将其理解为使用Java通过JDBC操作数据库的固定套路写法。使开发人员对数据库操作只关注:

  1. 数据的请求(sql)

  2. 请求的响应(查询返回)


一.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模板和数据库元数据的更多相关文章

  1. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Spring JDBC模板类—org.springframework.jdbc.core.JdbcTemplate(转)

    今天看了下Spring的源码——关于JDBC的"薄"封装,Spring 用一个Spring JDBC模板类来封装了繁琐的JDBC操作.下面仔细讲解一下Spring JDBC框架. ...

  3. JDBC(二)之JDBC处理CLOB和BLOB及事务与数据库元数据获取

    前面大概介绍了JDBC连接数据库的过程,以及怎么操作数据库,今天给大家分享JDBC怎么处理CLOB和BLOB存储图片的事情,以及JDBC怎么去处理事务.怎么在插入数据的时候生成主键返回值 一.JDBC ...

  4. OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa

    元数据最本质.最抽象的定义为:data about data (关于数据的数据).它是一种广泛存在的现象,在许多领域有其具体的定义和应用. JDBC中的元数据,有数据库元数据(DatabaseMeta ...

  5. JDBC中的元数据——1.数据库元数据

    package metadata; import java.sql.Connection; import java.sql.DatabaseMetaData; import javax.sql.Dat ...

  6. 开涛spring3(7.2) - 对JDBC的支持 之 7.2 JDBC模板类

    7.2  JDBC模板类 7.2.1  概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDB ...

  7. spring框架总结(04)----介绍的是Spring中的JDBC模板

    1.1  Jdbc模板概述 它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装.spring框架为我们提供了很多的操作模板类,入下图所示: 我们今天的主角在spring-jd ...

  8. JDBCTemplate与模板设计方法(二)

    前言:上一篇博客介绍了模板方法模式,并且给出了一个小demo,简单对模板方法进行了实现,接下来我们把目光转向spring的源码JDBCTemplate,看一看spring是如何对jdbc进行高度封装的 ...

  9. Spring中的JDBC模板类入门

    1.Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 2.提供了JDBC模板,Spring框架提供的 *JdbcTemplate类 3.Spring框架可以整合Hib ...

随机推荐

  1. 从“菜鸟”码农到“资深”架构师,我到底经历了什么?--------http://baijiahao.baidu.com/s?id=1585813883835208757&wfr=spider&for=pc

    http://baijiahao.baidu.com/s?id=1585813883835208757&wfr=spider&for=pc

  2. POJ 1019 数学题

    #include <cstdio> #include <cstring> using namespace std; ]; //sum[i]表示尾数为i的组最大可达到的数字个数 ...

  3. noip模拟赛 花

    [问题描述]商店里出售n种不同品种的花.为了装饰桌面,你打算买m支花回家.你觉得放两支一样的花很难看,因此每种品种的花最多买1支.求总共有几种不同的买花的方案?答案可能很大,输出答案mod p的值. ...

  4. NetCore +EFCore+SqlServer根据数据库生成实体类到项目中

    转载自:https://www.cnblogs.com/yangjinwang/p/9516988.html 1.点击“工具”->“NuGet包管理器”->“程序包管理器控制台” 分别安装 ...

  5. Android: 帮助找出内存泄漏的工具

    1. Intellij Idea的Memory Monitor 通过Memory Monitor,我们可以知道哪个页面哪些操作会占用比较多的内存.如果需要更详细的信息,可以导出heap,通过MAT来分 ...

  6. Android MTP 文件浏览Demo

    本apk实现了MTP文件浏览的简单功能. 通过Demo apk能够浏览连接到当前设备上的MTP设备上的文件. Demo路径:http://download.csdn.net/detail/sailin ...

  7. linux命令:find命令

    http://blog.csdn.net/pipisorry/article/details/39831419 linux find命令语法 find [起始文件夹] 寻找条件 操作 find PAT ...

  8. JavaScript Patterns 2.1 Writing Maintainable Code

    Revisiting the code after some time has passed requires: • Time to relearn and understand the proble ...

  9. YTU 2732:3798-Abs Problem

    2732: 3798-Abs Problem 时间限制: 1 Sec  内存限制: 128 MB  Special Judge 提交: 167  解决: 60 题目描述 Alice and Bob i ...

  10. 7.2 高速缓冲存储器-Cache

    高速缓冲存储器:Cache.Cache的功能是提高CPU数据的输入和输出的速率.CPU的速度与主存的速度之间有巨大的差异.主存的存取时间.存取速度要比CPU的速度要慢了很多倍.为了调和它们之间的巨大速 ...