SpringBoot 数据篇之使用JDBC
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
需要根据实际情况,替换 url
、username
、password
。
注入 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相关推荐
- 【SpringBoot高级篇】SpringBoot集成jasypt 配置脱敏和数据脱敏
[SpringBoot高级篇]SpringBoot集成jasypt数据脱敏 配置脱敏 使用场景 配置脱敏实践 数据脱敏 pom yml EncryptMethod EncryptField Encry ...
- 【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.引入依赖 ...
- 动力节点王鹤SpringBoot3学习笔记——第二章 掌握SpringBoot基础篇
目录 二.掌控SpringBoot基础篇 2.1 Spring Boot ? 2.1.1 与Spring关系 2.1.2 与SpringCloud关系 2.1.3 最新的Spring Boot3 新 ...
- SpringBoot SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 2.2 yaml 文件
SpringBoot [千锋教育java教程SpringBoot2全套,springboot快速入门到项目实战视频教程] SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 ...
- 【SpringBoot新手篇】SpringBoot 集成H2数据库
[SpringBoot新手篇]SpringBoot 集成H2数据库 概述h2数据库 SpringBoot整合测试 pom yml Embedded 嵌入式 Remote (client/server) ...
- 【SpringBoot框架篇】4.集成jta-atomikos实现分布式事务
文章目录 1.简介 1.1.分布式事务 1.2.JTA 1.3.atomikos 2.引入依赖 3.修改配置文件 4.添加配置读取类 5.创建多数据源,管理事务 6.数据持久化 7.数据库DLL文件 ...
- springboot数据访问基本操作步骤
springboot数据访问基本操作步骤 步骤一:创建一个springboot项目 配置pom.xml依赖(此阶段我没有配置web场景启动器) <?xml version="1.0&q ...
- Java JDBC篇1——初识JDBC
Java JDBC篇1--初识JDBC Java DataBase Connectivity Java 数据库连接(Java语言操作数据库) 1.什么是JDBC 其实是官方定义的一套操作所有关系型数据 ...
- SpringBoot数据访问Mybatis注解版,配置版,注解与配置一体版
SpringBoot数据访问Mybatis注解版,配置版,注解与配置一体版 注解版: 1.改druid 连接池,不改可以跳过这步 添加依赖 <dependency><groupId& ...
最新文章
- 【AI】【机器人】AI与机器人的42个终极问题与解答
- SAP的成本中心与利润中心的关系
- boost::range模块replaced相关的测试程序
- c语言火车票管理系统源代码2000行,C语言教务管理系统[2000行代码].doc
- 泛型在继承方面的体现与通配符
- java验证码限流_Java实现系统限流
- C、CPP const 详解
- python3.5学习笔记:linux6.4 安装python3 pip setuptools
- Openlayers layer 切换底图
- Mac Python下载安装教程
- word2016自带公式编辑器转换成mathtype类型公式,以及设置公式大小
- 【字符编码】Unicode字符集与字符编码方式
- 你曾后悔进入 IT 行业吗?
- 2019ICPC徐州打铁心得
- 哈工大本部2022计算机组成原理期末试题回忆版
- View UI——页面右上角添加浮动按钮(设置、退出全屏、进入全屏)
- HTML二级下拉菜单常见样式以及常见问题
- 如何把catia完全卸载干净_电脑卸载不了catia软件怎么办?电脑彻底卸载catia软件的方法...
- Docker下运行Presto访问Redis及BI展示
- 四两拨千斤!深度主动学习综述2020
热门文章
- 几个ASP.NET小技巧
- [转]聚集索引和非聚集索引(sql server索引结构及其使用)
- mysql数据库迁徙_Mysql数据迁徙方法工具解析
- 工厂模式 — 在项目中的用法
- element-ui组件中的input等的change事件中传递自定义参数
- Java基础 【Arrays 类的使用】
- HNOI2008 GT考试 (KMP + 矩阵乘法)
- BZOJ 2460: [BeiJing2011]元素 线性基
- #一周五# VS2015 CTP6, TFS2015 CTP1更新,老衣的开发工具汇总,2015 MVP 社区巡讲...
- 矩阵经典题目六:poj 3070 Fibonacci