通过 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. layui laypage 当前页刷新问题

    困扰了好几天的问题,终于找到答案了 在执行完代码后添加下面的代码实现当前页的刷新 $(".layui-laypage-btn").click(); 在解决问题的过程中,其实已经注意 ...

  2. App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计

    一.为什么需要注册和登录? 是否需要注册和登录的关键取决于产品形态. 如果用户注册登录对于用户需求.产品功能.商业模式本身带不来任何价值的话,就没必要设计这样的功能.比如一些实用工具类的产品:计算器. ...

  3. https://blog.csdn.net/zhi_sheng/article/details/78910082----mybatis写当天 当月的数据 时间段数据

    https://blog.csdn.net/zhi_sheng/article/details/78910082---- mybatis写当天 当月的数据 时间段数据

  4. [luoguP1373] 小a和uim之大逃离(DP)

    传送门 题解 代码 #include <cstdio> #include <iostream> #define N 802 #define mod 1000000007 int ...

  5. 次小生成树 判断 unique MST

    Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...

  6. 项目中应用到的框架和技术之三——echarts

    echarts是效果丰富的图表库,当时考虑怎么炫怎么来就引入了这个库来做图表展示,官网:http://echarts.baidu.com 项目里用的比较浅,估且一看吧 代码: this.toChart ...

  7. Neo4j教程 Neo4j视频教程 Neo4j 图数据库视频教程

    课程发布地址 地址: 腾讯课堂<Neo4j 图数据库视频教程> https://ke.qq.com/course/327374?tuin=442d3e14 作者 庞国明,<Neo4j ...

  8. SIGSEGV 和 SIGBUS & gdb看汇编

    参考这篇文章: http://blog.chinaunix.net/uid-24599332-id-2122898.html SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误信 ...

  9. 在Ubuntu平台上创建Cordova Camera HTML5应用

    在这篇文章中,我们将具体介绍怎样使用Cordova Camera HTML5 应用.很多其它关于Cordova的开发指南,开发人员能够參考文章"the Cordova Guide" ...

  10. HBase无法连接ZooKeeper问题

    上次搭建HBase环境后,运行登陆server时,报以下的错误: hadoop@gpmaster logs]$ hbase shell SLF4J: Class path contains multi ...