JdbcTemplate主要提供以下五类方法:

execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

query方法及queryForXXX方法:用于执行查询相关语句;

call方法:用于执行存储过程、函数相关语句。

JdbcTemplate类支持的回调类:

预编译语句及存储过程创建回调:用于根据JdbcTemplate提供的连接创建相应的语句;

PreparedStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的PreparedStatement;

CallableStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的CallableStatement;

预编译语句设值回调:用于给预编译语句相应参数设值;

PreparedStatementSetter:通过回调获取JdbcTemplate提供的PreparedStatement,由用户来对相应的预编译语句相应参数设值;

BatchPreparedStatementSetter:;类似于PreparedStatementSetter,但用于批处理,需要指定批处理大小;

自定义功能回调:提供给用户一个扩展点,用户可以在指定类型的扩展点执行任何数量需要的操作;

ConnectionCallback:通过回调获取JdbcTemplate提供的Connection,用户可在该Connection执行任何数量的操作;

StatementCallback:通过回调获取JdbcTemplate提供的Statement,用户可以在该Statement执行任何数量的操作;

PreparedStatementCallback:通过回调获取JdbcTemplate提供的PreparedStatement,用户可以在该PreparedStatement执行任何数量的操作;

CallableStatementCallback:通过回调获取JdbcTemplate提供的CallableStatement,用户可以在该CallableStatement执行任何数量的操作;

结果集处理回调:通过回调处理ResultSet或将ResultSet转换为需要的形式;

RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs, int rowNum)来完成将每行数据转换为相应的类型。

RowCallbackHandler:用于处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理,在该回调方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理即可。

ResultSetExtractor:用于结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集;

1: JdbcTemplate

1.1 query

单个对象

/**
* 处理单个对象
*/
@Test
public void test_1() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from student where id=1"; Student student = jdbcTemplate.query(sql, new ResultSetExtractor<Student>() {
@Override
public Student extractData(ResultSet res) throws SQLException, DataAccessException {
Student student = null;
while (res.next()) {
int id = res.getInt("id");
String name = res.getString("name");
boolean gender = res.getBoolean("gender");
Date birthday = res.getDate("birthday");
student = new Student(id, name, gender, birthday);
}
return student;
}
});
System.out.println(student);
}
@Test
public void test_2() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from student where id=1";
// 这里演示RowCallbackHandler 上面也可以使用函数式写法 不能返回
jdbcTemplate.query(sql, (res)-> {
String name = res.getString("name");
System.out.println(name);
});
}
@Test
public void test_3() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from student where id=1";
Student stu = jdbcTemplate.query(sql, (res)->{
Student student = null;
while (res.next()) {
int id = res.getInt("id");
String name = res.getString("name");
boolean gender = res.getBoolean("gender");
Date birthday = res.getDate("birthday");
student = new Student(id, name, gender, birthday);
}
return student;
});
System.out.println(stu);
}
//聚集函数
@Test
public void test_4() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select count(*) from student";
Integer inx = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(inx);
} @Test
public void test_5() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select id from student";
List<Integer> list = jdbcTemplate.queryForList(sql, Integer.class);
}

List Map

    /**
* 处理单个对象
*/
@Test
public void test_1() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from student where id=1"; Student student = jdbcTemplate.query(sql, new ResultSetExtractor<Student>() {
@Override
public Student extractData(ResultSet res) throws SQLException, DataAccessException {
Student student = null;
while (res.next()) {
int id = res.getInt("id");
String name = res.getString("name");
boolean gender = res.getBoolean("gender");
Date birthday = res.getDate("birthday");
student = new Student(id, name, gender, birthday);
}
return student;
}
});
System.out.println(student);
}
@Test
public void test_2() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from student where id=1";
// 这里演示RowCallbackHandler 上面也可以使用函数式写法 不能返回
jdbcTemplate.query(sql, (res)-> {
String name = res.getString("name");
System.out.println(name);
});
}
@Test
public void test_3() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from student where id=1";
Student stu = jdbcTemplate.query(sql, (res)->{
Student student = null;
while (res.next()) {
int id = res.getInt("id");
String name = res.getString("name");
boolean gender = res.getBoolean("gender");
Date birthday = res.getDate("birthday");
student = new Student(id, name, gender, birthday);
}
return student;
});
System.out.println(stu);
}
//聚集函数
@Test
public void test_4() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select count(*) from student";
Integer inx = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(inx);
} @Test
public void test_5() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select id from student";
List<Integer> list = jdbcTemplate.queryForList(sql, Integer.class);
}

1.2 upadte  

@Test
public int insertUser(Student stu) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "insert into student values(null,?,?,?)";
return jdbcTemplate.update(sql, new Object[] { stu.getName(), stu.isGender(), stu.getBirthday() });
} @Test
public int delete(int id) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "delete from student where id=?";
return jdbcTemplate.update(sql, 1);
}

2:NamedParameterJdbcTemplate

  使用与JdbcTemplate 最大的区别就是 使用命名符号来代表占位符? 使SQl 容易理解  但是 代码量增加了,取舍在于个人

    @Test
public void findById() {
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(JDBCUtils.getDataSource());
String sql="select * FROM student where name like (:regxp)";
/*
* jdbctemplate 用?站位
* NamedParameterJdbcTemplate : 使用:xxx 站位 通过hashmap 写入参数
* map:
* String:参数名称
* Object:参数值
*/
HashMap<String, Object> paMap = new HashMap<>();
paMap.put("regxp", "%");
BeanPropertyRowMapper<Student> rowMapper = new BeanPropertyRowMapper<>(Student.class);
List<Student> list = template.query(sql,paMap, rowMapper);
System.out.println(list);
} @Test
public void insert_Stu() {
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(JDBCUtils.getDataSource());
String sql="insert into student(name,gender,birthday) values(:name,:gender,:birthday)";
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("name", "如来佛祖");
paramMap.put("gender", "1");
paramMap.put("birthday", "2019-2-2");
if(template.update(sql, paramMap)>0) {
System.out.println("true");
}
}

Spring提供JdbcTemplate&NamedParameterJdbcTemplate的更多相关文章

  1. spring3: 对JDBC的支持 之 Spring提供的其它帮助 SimpleJdbcInsert/SimpleJdbcCall/SqlUpdate/JdbcTemplate 生成主键/批量处理

    7.4  Spring提供的其它帮助 7.4.1  SimpleJdbc方式 Spring JDBC抽象框架提供SimpleJdbcInsert和SimpleJdbcCall类,这两个类通过利用JDB ...

  2. 开涛spring3(7.4) - 对JDBC的支持 之 7.4 Spring提供的其它帮助

    7.4  Spring提供的其它帮助 7.4.1  SimpleJdbc方式 Spring JDBC抽象框架提供SimpleJdbcInsert和SimpleJdbcCall类,这两个类通过利用JDB ...

  3. spring: 使用Spring提供的JDBC模板(使用profiles选择数据源/使用基于JDBC驱动的数据源)

    Spring提供的JDBC框架负责管理资源和异常处理,从而可以简化开发者的JDBC代码.开发者只需要编写写入和读取数据库相关的代码即可. 正如在之前的小节中论述过的,Spring将数据库访问过程中的模 ...

  4. Spring利用JDBCTemplate实现批量插入和返回id

    1.先介绍一下java.sql.Connection接口提供的三个在执行插入语句后可取的自动生成的主键的方法: //第一个是 PreparedStatement prepareStatement(St ...

  5. spring使用jdbcTemplate和jdbcdaosupport和namedparameter

    jdbcTemplate: 首先连接数据库 <!-- 导入外部文件 --> <context:property-placeholder location="classpat ...

  6. spring和jdbctemplate

    1.spring与jdbc整合应用 a.增删改 -获取connection -获取statement -设置sql中?参数 -执行sql操作 -释放connection b.查询 -获取connect ...

  7. Spring之JDBCTemplate学习

    一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...

  8. spring+spring mvc+JdbcTemplate 入门小例子

    大家使用这个入门时候 最好能够去 搜一下 spring mvc 的 原理,我放一张图到这里,自己琢磨下,后面去学习就容易了 给个链接 (网上一把,千万不能懒)    https://www.cnblo ...

  9. spring 学习(四): spring 的 jdbcTemplate 操作

    spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...

随机推荐

  1. centos安装Redis和设置远程访问

    记录下步骤以后用到时翻一翻. 一.下载官方的文件包和编译 在centos下载依赖库: yum install gcc tcl 在redis官网的下载页面,这里可以选择离线包或在线下载. 我选择在线的, ...

  2. centos8 yum 安装 rabbitmq

    进入/etc/yum.repos.d/ 文件夹创建rabbitmq-erlang.repo 文件内容如下[rabbitmq-erlang] name=rabbitmq-erlangbaseurl=ht ...

  3. 【使用篇二】SpringBoot的日志体系及如何开启logback日志(15)

    抄自:https://blog.csdn.net/liujun03/article/details/82684209 Java应用中,日志一般分为以下5个级别(从高到低): ERROR 错误信息 WA ...

  4. java之模板方法设计模式

    抽象类体现的就是一种模板模式的设计.抽象类作为多个子类的通用模板.子类在抽象类的基础上进行扩张和改造,但子类总体上会保留抽象类的行为方式. 解决的问题: 当功能内部一部分实现是确定的,一部分实现是不确 ...

  5. flask的模板引擎jinja入门教程 包含一个通过网络实时传输Video视频流的示例

    本文首发于个人博客https://kezunlin.me/post/1e37a6/,欢迎阅读最新内容! tutorial to use python flask jinja templates and ...

  6. Python抓取妹子图,内含福利

    目标抓取全站妹子封面图片全部爬下来以图片标题命名 分析网页数据结构   妹子图首页 接下来找张图片右击点击检查   想要数据 拿到图片链接直接用浏览器可以访问,但是程序下载有反爬虫,图片直接下载不了需 ...

  7. Python 爬虫从入门到进阶之路(四)

    之前的文章我们做了一个简单的例子爬取了百度首页的 html,我们用到的是 urlopen 来打开请求,它是一个特殊的opener(也就是模块帮我们构建好的).但是基本的 urlopen() 方法不支持 ...

  8. 以太坊智能合约开发 Solidity学习

    1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...

  9. idea搜索不到任何插件

    今天在idea安装插件的时候,突然发现,什么都搜索不到了?? 解决方案: 完活.

  10. C#函数(构造函数)的重载

    using System; namespace test { class Program { static void Main(string[] args) { Cat cat = new Cat() ...