spring-boot-starter-jdbc这个依赖包中一共分成四个部分。

  • core,JdbcTemplate等相关核心接口和类
  • datasource,数据源相关的辅助类
  • object,将基本的jdbc操作封装成对象
  • support,错误码等其他辅助工具

这里对JdbcTemplate这个类进行描述。JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。

JdbcTemplate提供的方法

在JdbcTemplate中执行SQL语句的方法大致分为3类。

  • execute,可以执行所有的sql语句,一般用来执行ddl语句
  • update,用于执行insert、update、delete等dml语句
  • queryXXX,用于DQL数据查询语句

execute方法

    @GetMapping("/api/jdbc-oper/createTable")
public void createTable() {
String sql = "create table product (id int primary key auto_increment,name varchar(64),description varchar(128))";
jdbcTemplate.execute(sql);
}

update方法

  @GetMapping("/api/jdbc-oper/addData")
public void addData() {
String sql = "insert into product(name) values(?)";
Arrays.asList("Java编程思想", "Spring boot in action", "spark")
.forEach(p -> {
jdbcTemplate.update(sql, p);
});
} @GetMapping("/api/jdbc-oper/updateData")
public void updateData() {
String sql = "update product set description='这是Java编程思想' where name ='Java编程思想'";
jdbcTemplate.update(sql);
} @GetMapping("/api/jdbc-oper/deleteData")
public void deleteData() {
String sql = "";
jdbcTemplate.update(sql);
}

queryXXX方法

查询一个字段的场景

    @GetMapping("/api/jdbc-oper/queryForInt")
public void queryForInt() {
String sql = "select count(*) from product";
Integer totalNum = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(totalNum);
}

查询一个普通列表的场景

    @GetMapping("/api/jdbc-oper/queryName")
public void queryName() {
String sql = "select name from product";
List<String> names = jdbcTemplate.queryForList(sql, String.class);
System.out.println(names);
}

查询一个对象列表的场景

   @GetMapping("/api/jdbc-oper/queryProduct")
public void queryProduct() {
String sql = "select * from product";
List<Product> productList = jdbcTemplate.query(sql, new RowMapper<Product>() {
@Nullable
@Override
public Product mapRow(ResultSet resultSet, int i) throws SQLException {
return Product.builder()
.id(resultSet.getInt(1))
.name(resultSet.getString(2))
.build();
}
});
productList.forEach(product -> log.info("product:{}", product)); }

批量操作的方法

 @GetMapping("/api/jdbc-oper/batchInsert")
public void batchInsert() {
String sql = "insert into product (name) values (?)";
List<String> products = Arrays.asList("product1", "product2", "product3");
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
preparedStatement.setString(1, products.get(i));
}
@Override
public int getBatchSize() {
return products.size();
}
}); }

Springboot使用JdbcTemplate的使用的更多相关文章

  1. springboot之JdbcTemplate

    springboot可以使用JdbcTemplate进行数据库访问,代码如下 添加pom文件 <parent> <groupId>org.springframework.boo ...

  2. SpringBoot使用JdbcTemplate

    前言 本文是对SpringBoot使用JdbcTemplate操作数据库的一个介绍,,提供一个小的Demo供大家参考. 操作数据库的方式有很多,本文介绍使用SpringBoot结合JdbcTempla ...

  3. springboot 整合jdbcTemplate

    springboot 整合jdbcTemplate 〇.搭建springboot环境(包括数据库的依赖) 一.添加依赖 如果导入了jpa的依赖,就不用导入jdbctemplete的依赖了jpa的依赖: ...

  4. springboot使用jdbcTemplate连接数据库

    springboot使用jdbcTemplate连接数据库 1.pom.xml: <?xml version="1.0" encoding="UTF-8" ...

  5. 【使用篇二】SpringBoot使用JdbcTemplate操作数据库(12)

    Spring对数据库的操作在jdbc上面做了深层次的封装,提供了JdbcTemplate模板. 在SpringBoot使用JdbcTemplate很简单: 引入数据库驱动包(mysql或oracle) ...

  6. Springboot 使用JdbcTemplate

    Springboot 使用JdbcTemplate book package com.draymonder.book.jdbc; public class Book { private Integer ...

  7. 关于SpringBoot集成JDBCTemplate的RowMapper问题

    JdbcTemplate 是Spring提供的一套JDBC模板框架,利用AOP 技术来解决直接使用JDBC时大量重复代码的问题.JdbcTemplate虽然没有MyBatis 那么灵活,但是直接使用J ...

  8. SpringBoot整合JdbcTemplate连接Mysql

    import java.io.IOException; import javax.sql.DataSource; import org.apache.ignite.IgniteSystemProper ...

  9. springboot集成jdbcTemplate

    这里使用springboot自带的jdbcTemplate连接mysql数据库 1. 添加依赖包 <!-- jdbc --> <dependency> <groupId& ...

  10. SpringBoot(四) SpringBoot整合JdbcTemplate

    一.数据准备CREATE TABLE `tb_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `username` varchar ...

随机推荐

  1. MVC + EFCore 项目实战 - 数仓管理系统3 - 完成整体样式风格配置

    上次课程我们新建了管理员的模板页. 本次我们就完善这个模板页,顺便加入样式和一些基本的组件,配置好整个项目的UI风格.   一.引入 共用的css和js文件 后端库用nuget, 前端库用libman ...

  2. True Liars POJ - 1417

    True Liars After having drifted about in a small boat for a couple of days, Akira Crusoe Maeda was f ...

  3. [HCTF 2018]admin

    前言: 最近在BUUCTF刷题,参照师傅们wp后复现一下 0x01 拿到题目后进去如下界面 发现有登录和注册界面,相比是要登录后才能查看想要的信息. 查看页面源代码,看看有没有上面提示,界面如下 提示 ...

  4. Scala 基础(十四):Scala 模式匹配(二)

    1 匹配数组 1)Array(0) 匹配只有一个元素且为0的数组. 2)Array(x,y) 匹配数组有两个元素,并将两个元素赋值为x和y.当然可以依次类推Array(x,y,z) 匹配数组有3个元素 ...

  5. Django- 开发通用且万能的的权限框架组件

    本节内容 需求讨论 权限设计 代码设计 自定义权限钩子 业务场景分析 假设我们在开发一个培训机构的 客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下 客户管理销售人 ...

  6. POJ 1057 File Mapping 最详细的解题报告

    题目来源:POJ 1057 File Mapping 题目大意:像我的电脑那样显示文件夹和文件信息,其中在同一级目录内,文件夹排在文件的前面并且文件夹的顺序不变,同一级目录中文件按字母序排列.文件以‘ ...

  7. 大牛聊Java并发编程原理之 线程的互斥与协作机制

    可能在synchronized关键字的实现原理中,你已经知道了它的底层是使用Monitor的相关指令来实现的,但是还不清楚Monitor的具体细节.本文将让你彻底Monitor的底层实现原理. 管程 ...

  8. Mysql---搭建简单集群,实现主从复制,读写分离

    参考博客:https://blog.csdn.net/xlgen157387/article/details/51331244 A. 准备:多台服务器,且都可以互相随意访问root用户,都可以随意进行 ...

  9. javascript兼容问题 : let降级到var 遇到的闭包问题的解决方法

    我用  for(let x in y) 循环一个图片元素数组. for (let x in arr) { arr[x].onload = function(){ /* ... */ } } 这样写是没 ...

  10. 从安全的角度看待DNS

    以前对DNS(Domain Name System)认识就大概的知道是一个提供域名解析服务,作为互联网的基础设施,任何一个IT人员都会或多或少都接触到DNS,随着我最近的接触不断提高,我发现DNS还是 ...