SpringBoot2.x系列教程27--使用SQL数据库

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 前言在前面的章节中,壹哥 给大家讲解了SpringBoot对Web模块的支持,但是我们开发时还有另一个重头戏,那就是进行数据库的操作。所以从本章开始,我会带大家学习在Spring Boot中实现数据库的操作。我这里说的数据库,不仅仅有关系型数据库,比如MySQL,还包括非关系型数据库,比如Redis等。我们现在进行关系型数据库操作时,可以选择的技术框架其实有很多,比如原生的Jdbc,还有Mybatis、JPA等开源框架,接下来我会分别针对这几个技术进行讲解,今天我先讲解在SpringBoot中利用JdbcTemplate实现数据库的CRUD操作。一. JdbcTemplate在开

前言

在前面的章节中,壹哥 给大家讲解了SpringBoot对Web模块的支持,但是我们开发时还有另一个重头戏,那就是进行数据库的操作。所以从本章开始,我会带大家学习在Spring Boot中实现数据库的操作。

我这里说的数据库,不仅仅有关系型数据库,比如MySQL,还包括非关系型数据库,比如Redis等。

我们现在进行关系型数据库操作时,可以选择的技术框架其实有很多,比如原生的Jdbc,还有Mybatis、JPA等开源框架,接下来我会分别针对这几个技术进行讲解,今天我先讲解在SpringBoot中利用JdbcTemplate实现数据库的CRUD操作。

一. JdbcTemplate

在开始代码实操之前,我们先来了解一些理论内容。

1. JdbcTemplate简介

JDBC虽然能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库的资源,如获取PreparedStatement,设置SQL语句参数,关闭连接等操作,使用起来非常的麻烦。

所以为了简化对JDBC的操作,Spring为数据库JDBC做了深层次的封装。它利用DI注入功能,把DataSource注入到了JdbcTemplate之中,从而得到了JdbcTemplate操作模板类。JdbcTemplate的出现,使得JDBC的操作更加简单易用。

2. JdbcTemplate的作用

JdbcTemplate可以帮助我们处理资源的建立和释放,运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果;并且也可以使我们避免一些常见的错误,比如忘记关闭数据库连接。

3. JdbcTemplate依赖包介绍

JdbcTemplate位于spring-jdbc-xxx.jar包中,其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemplate还需一个spring-tx-xxx.jar依赖包,该包包含了事务和异常控制。

4. JdbcTemplate的核心方法

在JdbcTemplate中有哪些核心方法供我们调用呢? 我们常用的重要方法有如下几类:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法:update方法用于执行INSERT、UPDATE、DELETE等DML语句;
  • batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行DQL查询相关语句;
  • call方法:用于执行存储过程、函数相关语句。

5. JdbcTemplate使用步骤

那么JdbcTemplate到底该怎么使用呢?

  • 导入数据库相关依赖包,比如jpa或者jdbc;
  • 获取所需的某个DataSource数据源连接池对象;
  • 创建JdbcTemplate对象,传入到连接池中;
  • 调用execute、update、queryXxx等方法。

二. Spring Boot整合JdbcTemplate

接下来我就带各位利用JdbcTemplate实现CRUD操作,看看都需要做哪些事情吧。

1. 准备工作

我们要注意自己的开发环境,尽量要满足如下要求:

  • SpringBoot 2.x
  • JDK 1.8
  • Maven 3.0
  • Intellij Idea
  • MySQL

2. 创建一个web项目(略)

首先我创建一个SpringBoot的Web项目,具体创建过程请参考我们之前的章节。最终的项目结构如下图所示:

3. pom.xml文件中添加依赖

在项目的pom.xml文件中添加jdbc、mysql、druid数据源的依赖包。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- 引入Druid依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

4. 配置application.yml文件

然后我们创建一个application.yml文件,并在其中配置自己的数据库信息。

spring:  datasource:    url: jdbc:mysql://127.0.0.1:3306/db5?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=true
    username: root
    password: syc
    driver-class-name: com.mysql.cj.jdbc.Driver #mysql6.0之后推荐使用这个驱动包

注意:

  • mysql-connector-java版本6.0以前使用的是com.mysql.jdbc.Driver,6.0以后的使用com.mysql.cj.jdbc.Driver。

5. 创建一个数据库配置类

因为本案例中使用的Druid作为数据源,所以我在这里封装一个配置类,把application.yml文件中的信息读取进来。

packagecom.yyg.boot.config;
importcom.alibaba.druid.pool.DruidDataSource;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.ComponentScan;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.core.env.Environment;
importjavax.sql.DataSource;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description 第一种配置方式*/@ComponentScan@ConfigurationpublicclassDbConfig {
@AutowiredprivateEnvironmentenv;
@BeanpublicDataSourcegetDataSource() {
DruidDataSourcedataSource=newDruidDataSource();
dataSource.setUrl(env.getProperty("spring.datasource.url"));
dataSource.setUsername(env.getProperty("spring.datasource.username"));
dataSource.setPassword(env.getProperty("spring.datasource.password"));
returndataSource;
    }
}

除了可以使用上面的方法读取application.yml文件中的配置信息之外,我们也可以采用第2种配置方式进行填充配置,代码如下:

packagecom.yyg.boot.config;
importcom.alibaba.druid.pool.DruidDataSource;
importlombok.Data;
importorg.springframework.boot.context.properties.ConfigurationProperties;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.ComponentScan;
importorg.springframework.context.annotation.Configuration;
importjavax.sql.DataSource;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description 第二种配置数据源的方式*/@Data@ComponentScan@Configuration@ConfigurationProperties(prefix="spring.datasource")
publicclassSecondDbConfig {
privateStringurl;
privateStringusername;
privateStringpassword;
@BeanpublicDataSourcegetDataSource() {
DruidDataSourcedataSource=newDruidDataSource();
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
returndataSource;
    }
}

6. 创建Users实体类

这里我们封装一个Users实体类,用于封装数据库中的信息。

packagecom.yyg.boot.domain;
importlombok.Data;
importlombok.ToString;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/@Data@ToStringpublicclassUsers {
privateIntegerid;
privateStringusername;
privateStringpassword;
}

7. 创建Dao层代码

接下来我会在dao层包中,创建一个IUserDao接口,内部封装数据库的增删改查方法。

7.1 dao层的IUserDao接口

packagecom.yyg.boot.dao;
importcom.yyg.boot.domain.Users;
importjava.util.List;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/publicinterfaceIUserDao {
intadd(Usersstudent);
intupdate(Usersstudent);
intdelete(intid);
UsersfindUserById(intid);
List<Users>findUserList();
}

7.2 dao层的UserDaoImpl接口实现

编写一个UserDaoImpl实现类,实现上面的IUserDao接口,在这个类中利用原生的SQL语句实现数据库的CRUD操作。

packagecom.yyg.boot.dao.impl;
importcom.yyg.boot.dao.IUserDao;
importcom.yyg.boot.domain.Users;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.jdbc.core.BeanPropertyRowMapper;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.stereotype.Repository;
importjava.util.List;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/@RepositorypublicclassUserDaoImplimplementsIUserDao {
@AutowiredprivateJdbcTemplatejdbcTemplate;
@Overridepublicintadd(Usersuser) {
returnjdbcTemplate.update("insert into users(username, password) values(?, ?)",
user.getUsername(),user.getPassword());
    }
@Overridepublicintupdate(Usersuser) {
returnjdbcTemplate.update("UPDATE  users SET username=? ,password=? WHERE id=?",
user.getUsername(),user.getPassword(),user.getId());
    }
@Overridepublicintdelete(intid) {
returnjdbcTemplate.update("DELETE from TABLE users where id=?",id);
    }
@OverridepublicUsersfindUserById(intid) {
// BeanPropertyRowMapper 使获取的 List 结果列表的数据库字段和实体类自动对应List<Users>list=jdbcTemplate.query("select * from users where id = ?", newObject[]{id}, newBeanPropertyRowMapper(Users.class));
returnlist.size()>0?list.get(0):null;
    }
@OverridepublicList<Users>findUserList() {
// 使用Spring的JdbcTemplate查询数据库,获取List结果列表,数据库表字段和实体类自动对应,可以使用BeanPropertyRowMapperList<Users>list=jdbcTemplate.query("select * from users", newObject[]{}, newBeanPropertyRowMapper(Users.class));
returnlist.size()>0?list:null;
    }
}

8. 创建Service层代码

根据3层架构,我们会有dao层、service层、web层,所以这里我再创建service层的核心业务代码,调用dao层接口。

8.1 创建service层的IUserService接口

packagecom.yyg.boot.service;
importcom.yyg.boot.domain.Users;
importjava.util.List;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/publicinterfaceIUserService {
intadd(Usersuser);
intupdate(Usersuser);
intdelete(intid);
UsersfindUserById(intid);
List<Users>findUserList();
}

8.2 创建service层的UserServiceImpl接口实现

packagecom.yyg.boot.service.impl;
importcom.yyg.boot.dao.IUserDao;
importcom.yyg.boot.domain.Users;
importcom.yyg.boot.service.IUserService;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Service;
importjava.util.List;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/@ServicepublicclassUserServiceImplimplementsIUserService {
@AutowiredprivateIUserDaouserDao;
@Overridepublicintadd(Usersuser) {
returnuserDao.add(user);
    }
@Overridepublicintupdate(Usersuser) {
returnuserDao.update(user);
    }
@Overridepublicintdelete(intid) {
returnuserDao.delete(id);
    }
@OverridepublicUsersfindUserById(intid) {
returnuserDao.findUserById(id);
    }
@OverridepublicList<Users>findUserList() {
returnuserDao.findUserList();
    }
}

9. 创建Web层的Controller

然后我们再编写一个Controller,在这里定义几个RESTful风格的URL接口。

packagecom.yyg.boot.web;
importcom.yyg.boot.domain.Users;
importcom.yyg.boot.service.IUserService;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.*;
importjava.util.List;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/@RestController@RequestMapping("/user")
publicclassUserController {
@AutowiredprivateIUserServiceiUserService;
@PostMapping("")
publicintaddUser(@RequestBodyUsersuser){
returniUserService.add(user);
    }
@PutMapping("/{id}")
publicStringupdateUser(@PathVariableIntegerid, @RequestBodyUsersuser){
UsersoldUser=newUsers();
oldUser.setId(id);
oldUser.setUsername(user.getUsername());
oldUser.setPassword(user.getPassword());
intt=iUserService.update(oldUser);
if (t==1){
returnuser.toString();
        }else {
return"更新学生信息错误";
        }
    }
@GetMapping("/{id}")
publicUsersfindUserById(@PathVariableIntegerid){
returniUserService.findUserById(id);
    }
@GetMapping("/list")
publicList<Users>findUserList(){
returniUserService.findUserList();
    }
@DeleteMapping("/{id}")
publicintdeleteUserById(@PathVariableIntegerid){
returniUserService.delete(id);
    }
}

10. 创建启动类

最后我们再编写一个启动类。

packagecom.yyg.boot;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/@SpringBootApplicationpublicclassJdbcApplication {
publicstaticvoidmain(String[] args){
SpringApplication.run(JdbcApplication.class,args);
    }
}

11. 完整项目结构

完整的项目结构如下,各位可以参考创建。

12. 接口测试

启动项目后,我们可以在浏览器或者postman中测试刚才创建的接口。

其他接口我就不再一一测试了,都是可以正常使用的!

结语

至此,我就用JdbcTemplate实现了MySQL数据库的增删改查,整体会有点麻烦,代码实现比Mybatis麻烦一些,更没有JPA简单。对于JdbcTemplate这种技术,各位简单了解即可,现在开发时很少用了。

今日小作业:

思考在SpringBoot中如何整合Mybatis?

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
SQL 数据库 Windows
sql数据库安装过程,SQL数据库的安装过
本文概述了安装SQL Server数据库的步骤:准备硬件和软件环境,运行安装程序,选择安装类型,接受许可协议,设定安装路径和组件,配置实例和服务账户,选择身份验证模式,配置其他设置,然后安装并完成。安装后需检查验证SQL Server是否正常工作。确保遵循步骤以顺利完成安装。
38 3
|
4天前
|
Java 关系型数据库 MySQL
Servlet 教程 之 Servlet 数据库访问 2
本教程讲解如何在Servlet中实现数据库访问。首先确保了解JDBC并配置MySQL驱动(如mysql-connector-java-5.1.39-bin.jar),在Eclipse Web项目中需将驱动放入Tomcat的lib目录。创建名为`websites`的数据库表,插入测试数据。之后展示了一个Servlet示例,该示例连接到数据库,执行SQL查询以获取`websites`表中的`id`、`name`和`url`,并将结果输出到HTML响应中。要运行Servlet,需在web.xml中配置并访问指定URL。
12 4
|
4天前
|
XML Java 数据库连接
Springboot整合mybatisPlus操作数据库
MyBatis-Plus是MyBatis的增强工具,简化开发、提高效率。它提供官网文档,便于集成到SpringBoot项目中。集成步骤包括添加mybatis-plus-boot-starter和数据库驱动依赖,配置数据源,扫描Mapper类包。Mapper接口继承BaseMapper即可使用基本的CRUD操作。示例代码展示了Service层的增删改查实现。MyBatisPlus还支持逻辑删除、自动填充等功能,同时可与Mybatis XML配合使用,通过调整配置指定XML映射文件位置。
|
4天前
|
Java 关系型数据库 MySQL
springboot业务开发--springboot一键生成数据库文档
Screw是一个数据库文档生成工具,能自动化根据数据库表结构生成文档,减轻开发人员工作负担,支持MySQL、MariaDB、TiDB等多种数据库和HTML、Word、Markdown等格式。它依赖HikariCP数据库连接池和Freemarker模板引擎。通过在Spring Boot项目中添加相关依赖并配置,可以用代码或Maven插件方式生成文档。示例代码展示了如何在JUnit测试中使用Screw生成HTML文档。
|
5天前
|
SQL 关系型数据库 MySQL
利用 SQL 注入识别数据库方法总结
利用 SQL 注入识别数据库方法总结
|
5天前
|
SQL Oracle Java
SQL 注入神器:jSQL Injection 保姆级教程
SQL 注入神器:jSQL Injection 保姆级教程
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL】:探秘主流关系型数据库管理系统及SQL语言
【MySQL】:探秘主流关系型数据库管理系统及SQL语言
12 0
|
6天前
|
Java 关系型数据库 MySQL
Java基础教程(20)-Java连接mysql数据库CURD
【4月更文挑战第19天】MySQL是流行的关系型数据库管理系统,支持SQL语法。在IDEA中加载jar包到项目类路径:右击项目,选择“Open Module Settings”,添加库文件。使用JDBC连接MySQL,首先下载JDBC驱动,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。执行CRUD操作,例如创建表、插入数据和查询,使用`Statement`或`PreparedStatement`,并确保正确关闭数据库资源。
|
8天前
|
存储 Java 数据库
SpringBoot使用jasypt实现数据库配置加密
这样,你就成功地使用Jasypt实现了Spring Boot中的数据库配置加密,确保敏感信息在配置文件中以加密形式存储,并在应用启动时自动解密。
34 2
|
10天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
11 0