通过 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. Maven学习总结(29)——Maven项目的pom.xml中log4j2配置

        <dependency>         <groupId>org.apache.logging.log4j</groupId>         <a ...

  2. JavaSE 学习笔记之正则表达式(二十五)

    正则表达式:其实是用来操作字符串的一些规则. 好处:正则的出现,对字符串的复杂操作变得更为简单. 特点:将对字符串操作的代码用一些符号来表示.只要使用了指定符号,就可以调用底层的代码对字符串进行操作. ...

  3. 写给对<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">迷惑不解的小伙伴

    1.X-UA-Compatible X-UA-Compatible是自从IE8新加的一个设置,对于IE8以下的浏览器是不识别的. 通过在meta中设置X-UA-Compatible的值,可以指定网页的 ...

  4. Ubuntu 16.04安装汇编编译器NASM

    NASM支持intel语法. 安装过程: 1.通过二进制包方式 下载: http://www.nasm.us/pub/nasm/releasebuilds/2.13/ 如果要下载其它版本可以把地址靠前 ...

  5. systemtap --diskio

    http://blog.163.com/digoal@126/blog/static/1638770402013101993142404

  6. 大家好 这个事我的BLOG 站点 欢迎大家 訪问和公布文章技术的 和评论 交流技术使用

    地址 http://microlmj.gotoip3.com/blog/article!showAllArticleForPageTest.action ssh+mysql+java+tomcat+b ...

  7. Flume NG源代码分析(二)支持执行时动态改动配置的配置模块

    在上一篇中讲了Flume NG配置模块主要的接口的类,PropertiesConfigurationProvider提供了基于properties配置文件的静态配置的能力,这篇细说一下PollingP ...

  8. Java---15---单例设计模式:---饿汉式和懒汉式

    概念: 单例模式确保某个类仅仅有一个实例.并且自行实例化并向整个系统提供这个实例.   单例模式有下面特点: 1.单例类仅仅能有一个实例 2.单例类必须自己给自己创建自己的唯一实例 3.单例类必须给全 ...

  9. LeetCode 961. N-Repeated Element in Size 2N Array (重复 N 次的元素)

    题目标签:HashMap 题目给了我们一个size 为 2N 的int array,其中有 N + 1 个唯一的 数字,让我们找出那个重复的数字. 利用hashset,把每一个数字存入,一旦发现有重复 ...

  10. 假期(MySQL相关)

    """ 一.初始数据库: - 数据库管理软件的由来 四个字:存储数据(简单暴力) - 数据库概述 :什么是数据:简单的说就是描述事物的记录称为数据:可以是数字,文字,图片 ...