spring-boot-route(七)整合jdbcTemplate操作数据库
在一部分内容中,我们学习了Restful接口的编写,及接口文档的生成。我们需要将接口数据进行持久化存储,这一部分我们主要学习几种持久化框架将数据进行存储。本部分内容中,我们都将使用mysql为例来做为演示数据库。
在刚开始接触数据库操作的时候我们都会使用JDBC来进行数据库操作,但是每次都要创建连接,关闭连接非常麻烦,Spring将JDBC进行了简易的封装成了一个新的框架——JdbcTemplate。
项目搭建
1 添加mysql依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
2. 添加jdbcTemplate依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
3. 配置mysql
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/simple_fast?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&useAffectedRows=true&allowPublicKeyRetrieval=true
username: root
password: root
简单操作数据库
新建一张表student
用来测试JdbcTemplate的常用功能。建表语句如下:
CREATE TABLE `student` (
`student_id` int(30) NOT NULL,
`age` int(1) DEFAULT NULL COMMENT '年龄',
`name` varchar(45) DEFAULT NULL COMMENT '姓名',
`sex` int(1) DEFAULT NULL COMMENT '性别:1:男,2:女,0:未知',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`status` int(1) DEFAULT NULL COMMENT '状态:1:正常,-1:删除',
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='学生表'
对应的实体类如下:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StudentBean implements Serializable {
private static final long serialVersionUID = 4618004018169112427L;
private Integer studentId;
private Integer age;
private String name;
private Integer sex;
private Date createTime;
private Integer status;
}
JdbcTemplate提供了比较完善的数据库操作API,日常开发中比较常用的API主要为两类,分别是
- query与queryXXX
- update与batchUpdate
JdbcTemplate的使用也非常简单,哪儿需要使用注入即可
@Autowired
private JdbcTemplate jdbcTemplate;
1 查询单个实体
public StudentBean getStudent(int status){
String sql = "select * from student where status = ? limit 1";
return jdbcTemplate.queryForObject(sql,new Object[]{status},new BeanPropertyRowMapper<>(StudentBean.class));
}
2 查询List集合
public List<StudentBean> studentBeanList(int status){
String sql = "select * from student where status = ?";
return jdbcTemplate.query(sql,new Object[]{status},new BeanPropertyRowMapper<>(StudentBean.class));
}
3. 删除操作
public int deleteStudent(int status){
String sql = "delete from student where status = 0";
return jdbcTemplate.update(sql);
}
4. 更新操作
public int updateStudent(int studentId,String name){
String sql = "update student set name = ? where student_id = ?";
return jdbcTemplate.update(sql,new Object[]{name,studentId});
}
5. 插入操作
public int addStudent(){
String sql = "insert into student(student_id,age,name,status) values(?,?,?,?)";
return jdbcTemplate.update(sql,new Object[]{30,18,"Java旅途",0});
}
6. 批量插入
JdbcTemplate提供了批量插入的API,为了减少与数据库的操作,提高插入效率,将待插入的数据批量放在缓冲区,一次批量插入多条数据。
public int batchAddStudent(){
// 构造list集合
List<StudentBean> studentBeanList = new ArrayList<>();
StudentBean studentBean = new StudentBean(31, 31, "Java旅途", 1, new Date(), 1);
StudentBean studentBean1 = new StudentBean(32, 32, "javatrip", 1, new Date(), 1);
studentBeanList.add(studentBean);
studentBeanList.add(studentBean1);
String sql = "insert into student values(?,?,?,?,?,?)";
int[] ints = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
StudentBean student = studentBeanList.get(i);
ps.setInt(1, student.getStudentId());
ps.setInt(2, student.getAge());
ps.setString(3, student.getName());
ps.setInt(4, student.getSex());
ps.setDate(5,new java.sql.Date(System.currentTimeMillis()));
ps.setInt(6, student.getStatus());
}
@Override
public int getBatchSize() {
return studentBeanList.size();
}
});
return ints.length;
}
上面只是演示了几个简单的例子,如果需要更详细的用法可以参考官方提供的JdbcTemplate API。JdbcTemplate对于初学者来说是比较容易上手的一个框架,使用起来也非常方便。但是也存在一些缺点,它是将sql硬编码到java代码中,如果需要修改sql,就需要重新编译java代码,不利于维护。
此是spring-boot-route系列的第七篇文章,这个系列的文章都比较简单,主要目的就是为了帮助初次接触Spring Boot 的同学有一个系统的认识。本文已收录至我的github,欢迎各位小伙伴star
!
github:https://github.com/binzh303/spring-boot-route
点关注、不迷路
如果觉得文章不错,欢迎关注、点赞、收藏,你们的支持是我创作的动力,感谢大家。
如果文章写的有问题,请不要吝啬,欢迎留言指出,我会及时核查修改。
如果你还想更加深入的了解我,可以微信搜索「Java旅途」进行关注。回复「1024」即可获得学习视频及精美电子书。每天7:30准时推送技术文章,让你的上班路不在孤独,而且每月还有送书活动,助你提升硬实力!
spring-boot-route(七)整合jdbcTemplate操作数据库的更多相关文章
- Spring Boot项目中使用jdbctemplate 操作MYSQL数据库
不废话,先来代码 pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...
- Spring Boot入门系列(十四)使用JdbcTemplate操作数据库,配置多数据源!
前面介绍了Spring Boot 中的整合Mybatis并实现增删改查.如何实现事物控制.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/c ...
- Spring Boot教程(二十九)使用JdbcTemplate操作数据库
使用JdbcTemplate操作数据库 Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用. 举例:我们在创建User表,包含属性n ...
- Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- 转-Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合
Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合 http://blog.csdn.net/balabalayi/article/detai ...
- JdbcTemplate操作数据库
1.JdbcTemplate操作数据库 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中.同时,为了支 ...
- Spring Boot 2.x整合Redis
最近在学习Spring Boot 2.x整合Redis,在这里和大家分享一下,希望对大家有帮助. Redis是什么 Redis 是开源免费高性能的key-value数据库.有以下的优势(源于Redis ...
- 使用JdbcTemplate操作数据库(二十九)
使用JdbcTemplate操作数据库 Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用. 举例:我们在创建User表,包含属性n ...
- Spring Boot (七): Mybatis极简配置
Spring Boot (七): Mybatis极简配置 1. 前言 ORM 框架的目的是简化编程中的数据库操作,经过这么多年的发展,基本上活到现在的就剩下两家了,一个是宣称可以不用写 SQL 的 H ...
随机推荐
- 原生 JavaScript30 练习 Day 1 (原生JS控制键盘模拟击鼓)
代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- @PostConstruct详解
一.定义: @PostContruct是spring框架的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法. 从Java EE5规范开始,Ser ...
- Java实现IO通信(服务器篇)
Java实现IO通信(服务器篇) 如何利用java实现我们的通信呢?首先我们了解一下什么是通信?通信的机制是怎样的? 首先来讨论一下什么是通信?通信,指人与人或人与自然之间通过某种行为或媒介进行的信息 ...
- Zabbix-4.0-设置钉钉报警脚本
问题:当服务器发生报错时,有一个信息能实现自动发送到我的手机或者应用上,以达到对服务器的实时的监控与处理.邮件与短信不能满足实时性,于是想到了钉钉的通知. 思路:在钉钉里面建一个群,群里面拉个机器人. ...
- 最小生成树MST
定义 在一给定的无向联通带权图\(G = (V, E, W)\)中,\((u, v)\) 代表连接顶点 \(u\) 与顶点 \(v\) 的边,而 \(w(u, v)\) 代表此边的权重,若存在 \(T ...
- C:把算术表达式分成Token
代码: #include "stdafx.h" #include <stdio.h> #include <string.h> #include <st ...
- [LeetCode]287. 寻找重复数(二分)
题目 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 示例 1: 输入: [ ...
- c#中的ReadOnlySequenceSegment<T>和ReadOnlySequenceSegment<T>
关于.net core高性能编程中的Span<T>和Memory<T>网上资料很多,这里就不说了.今天一直在看ReadOnlySequenceSegment<T>和 ...
- spring cloud微服务快速教程之(十二) 分布式ID解决方案(mybatis-plus篇)
0-前言 分布式系统中,分布式ID是个必须解决的问题点: 雪花算法是个好方式,不过不能直接使用,因为如果直接使用的话,需要配置每个实例workerId和datacenterId,在微服务中,实例一般动 ...
- 学习 | css3基本动画之demo篇
移动端使用的框架是zepto,但是zepto的内置对象没有传统的animate这个方法,效果都是需要css3来实现的,zepto也不支持fadeIn和fadeOut等一些基本的动画,基于这一现状,我自 ...