SpringBootTutorial :: Data :: Jdbc

  • 简介
  • API
    • execute
    • update
    • query
  • 实战
    • 配置数据源
    • 完整示例
  • 引申和引用

简介

Spring Data 包含对 JDBC 的存储库支持,并将自动为 CrudRepository 上的方法生成 SQL。对于更高级的查询,提供了 @Query 注解。

当 classpath 上存在必要的依赖项时,Spring Boot 将自动配置 Spring Data 的 JDBC 存储库。它们可以通过 spring-boot-starter-data-jdbc 的单一依赖项添加到项目中。如有必要,可以通过将 @EnableJdbcRepositories 批注或 JdbcConfiguration 子类添加到应用程序来控制 Spring Data JDBC 的配置。

更多 Spring Data JDBC 细节,可以参考 Spring Data JDBC 官方文档。

API

spring-boot-starter-data-jdbc 引入了 spring-jdbc ,其 JDBC 特性就是基于 spring-jdbc

spring-jdbc 最核心的 API 无疑就是 JdbcTemplate,可以说所有的 JDBC 数据访问,几乎都是围绕着这个类去工作的。

Spring 对数据库的操作在 Jdbc 层面做了深层次的封装,利用依赖注入,把数据源配置装配到 JdbcTemplate 中,再由 JdbcTemplate 负责具体的数据访问。

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

  • execute 方法:可以用于执行任何 SQL 语句,一般用于执行 DDL 语句;
  • update 方法及 batchUpdate 方法:update 方法用于执行新增、修改、删除等语句;batchUpdate 方法用于执行批处理相关语句;
  • query 方法及 queryForXXX 方法:用于执行查询相关语句;
  • call 方法:用于执行存储过程、函数相关语句。

为了方便演示,以下增删改查操作都围绕一个名为 user 的表(该表的主键 id 是自增序列)进行,该表的数据实体如下:

public class User {private Integer id;private String name;private Integer age;// 省略 getter/setter
}

数据实体只要是一个纯粹的 Java Bean 即可,无需任何注解修饰。

execute

使用 execute 执行 DDL 语句,创建一个名为 test 的数据库,并在此数据库下新建一个名为 user 的表。

public void recreateTable() {jdbcTemplate.execute("DROP DATABASE IF EXISTS test");jdbcTemplate.execute("CREATE DATABASE test");jdbcTemplate.execute("USE test");jdbcTemplate.execute("DROP TABLE if EXISTS user");jdbcTemplate.execute("DROP TABLE if EXISTS user");// @formatter:offStringBuilder sb = new StringBuilder();sb.append("CREATE TABLE user (id int (10) unsigned NOT NULL AUTO_INCREMENT,\n").append("name varchar (64) NOT NULL DEFAULT '',\n").append("age tinyint (3) NOT NULL DEFAULT 0,\n").append("PRIMARY KEY (ID));\n");// @formatter:onjdbcTemplate.execute(sb.toString());
}

update

新增数据

public void insert(String name, Integer age) {jdbcTemplate.update("INSERT INTO user(name, age) VALUES(?, ?)", name, age);
}

删除数据

public void delete(String name) {jdbcTemplate.update("DELETE FROM user WHERE name = ?", name);
}

修改数据

public void update(User user) {jdbcTemplate.update("UPDATE USER SET name=?, age=? WHERE id=?", user.getName(), user.getAge(), user.getId());
}

批处理

public void batchInsert(List<User> users) {String sql = "INSERT INTO user(name, age) VALUES(?, ?)";List<Object[]> params = new ArrayList<>();users.forEach(item -> {params.add(new Object[] {item.getName(), item.getAge()});});jdbcTemplate.batchUpdate(sql, params);
}

query

查单个对象

public User queryByName(String name) {try {return jdbcTemplate.queryForObject("SELECT * FROM user WHERE name = ?", new BeanPropertyRowMapper<>(User.class), name);} catch (EmptyResultDataAccessException e) {return null;}
}

查多个对象

public List<User> list() {return jdbcTemplate.query("select * from USER", new BeanPropertyRowMapper(User.class));
}

获取某个记录某列或者 count、avg、sum 等函数返回唯一值

public Integer count() {try {return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM user", Integer.class);} catch (EmptyResultDataAccessException e) {return null;}
}

实战

配置数据源

src/main/resource 目录下添加 application.properties 配置文件,内容如下:

spring.datasource.url = jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver

需要根据实际情况,替换 urlusernamepassword

注入 JdbcTemplate

@Service
public class UserDAOImpl implements UserDAO {private JdbcTemplate jdbcTemplate;@Autowiredpublic UserDAOImpl(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}// ...
}

完整示例

请参考:源码

使用方法:

运行应用或单元测试例前,请先执行 codes/data/sbe-data-jdbc/sql/ddl.sql

引申和引用

引申

  • Spring Boot 教程

参考

  • Spring Boot 官方文档之 boot-features-data-jdbc

转载于:https://www.cnblogs.com/jingmoxukong/p/10251451.html

SpringBoot 数据篇之使用JDBC相关推荐

  1. 【SpringBoot高级篇】SpringBoot集成jasypt 配置脱敏和数据脱敏

    [SpringBoot高级篇]SpringBoot集成jasypt数据脱敏 配置脱敏 使用场景 配置脱敏实践 数据脱敏 pom yml EncryptMethod EncryptField Encry ...

  2. 【SpringBoot框架篇】11.Spring Data Jpa实战

    文章目录 1.简介 1.1.JPA 1.2.Spring Data Jpa 1.3.Hibernate 1.4.Jpa.Spring Data Jpa.Hibernate三者之间的关系 2.引入依赖 ...

  3. 动力节点王鹤SpringBoot3学习笔记——第二章 掌握SpringBoot基础篇

    目录 二.掌控SpringBoot基础篇 2.1 Spring Boot ? 2.1.1 与Spring关系 2.1.2 与SpringCloud关系 2.1.3  最新的Spring Boot3 新 ...

  4. SpringBoot SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 2.2 yaml 文件

    SpringBoot [千锋教育java教程SpringBoot2全套,springboot快速入门到项目实战视频教程] SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 ...

  5. 【SpringBoot新手篇】SpringBoot 集成H2数据库

    [SpringBoot新手篇]SpringBoot 集成H2数据库 概述h2数据库 SpringBoot整合测试 pom yml Embedded 嵌入式 Remote (client/server) ...

  6. 【SpringBoot框架篇】4.集成jta-atomikos实现分布式事务

    文章目录 1.简介 1.1.分布式事务 1.2.JTA 1.3.atomikos 2.引入依赖 3.修改配置文件 4.添加配置读取类 5.创建多数据源,管理事务 6.数据持久化 7.数据库DLL文件 ...

  7. springboot数据访问基本操作步骤

    springboot数据访问基本操作步骤 步骤一:创建一个springboot项目 配置pom.xml依赖(此阶段我没有配置web场景启动器) <?xml version="1.0&q ...

  8. Java JDBC篇1——初识JDBC

    Java JDBC篇1--初识JDBC Java DataBase Connectivity Java 数据库连接(Java语言操作数据库) 1.什么是JDBC 其实是官方定义的一套操作所有关系型数据 ...

  9. SpringBoot数据访问Mybatis注解版,配置版,注解与配置一体版

    SpringBoot数据访问Mybatis注解版,配置版,注解与配置一体版 注解版: 1.改druid 连接池,不改可以跳过这步 添加依赖 <dependency><groupId& ...

最新文章

  1. 【AI】【机器人】AI与机器人的42个终极问题与解答
  2. SAP的成本中心与利润中心的关系
  3. boost::range模块replaced相关的测试程序
  4. c语言火车票管理系统源代码2000行,C语言教务管理系统[2000行代码].doc
  5. 泛型在继承方面的体现与通配符
  6. java验证码限流_Java实现系统限流
  7. C、CPP const 详解
  8. python3.5学习笔记:linux6.4 安装python3 pip setuptools
  9. Openlayers layer 切换底图
  10. Mac Python下载安装教程
  11. word2016自带公式编辑器转换成mathtype类型公式,以及设置公式大小
  12. 【字符编码】Unicode字符集与字符编码方式
  13. 你曾后悔进入 IT 行业吗?
  14. 2019ICPC徐州打铁心得
  15. 哈工大本部2022计算机组成原理期末试题回忆版
  16. View UI——页面右上角添加浮动按钮(设置、退出全屏、进入全屏)
  17. HTML二级下拉菜单常见样式以及常见问题
  18. 如何把catia完全卸载干净_电脑卸载不了catia软件怎么办?电脑彻底卸载catia软件的方法...
  19. Docker下运行Presto访问Redis及BI展示
  20. 四两拨千斤!深度主动学习综述2020

热门文章

  1. 几个ASP.NET小技巧
  2. [转]聚集索引和非聚集索引(sql server索引结构及其使用)
  3. mysql数据库迁徙_Mysql数据迁徙方法工具解析
  4. 工厂模式 — 在项目中的用法
  5. element-ui组件中的input等的change事件中传递自定义参数
  6. Java基础 【Arrays 类的使用】
  7. HNOI2008 GT考试 (KMP + 矩阵乘法)
  8. BZOJ 2460: [BeiJing2011]元素 线性基
  9. #一周五# VS2015 CTP6, TFS2015 CTP1更新,老衣的开发工具汇总,2015 MVP 社区巡讲...
  10. 矩阵经典题目六:poj 3070 Fibonacci