文章目录
- 一 Spring Data简介
- 二 Spring Boot集成JDBC
- 2.1 项目创建步骤
- 2.2 测试的SQL脚本
- 2.3 编写yaml配置文件连接数据库
- 2.4 IDEA连接数据库步骤【非必要的步骤】
- 2.5 测试
- 2.6 运行结果
- 2.7 对运行结果的探究
- 2.8 遇到的错误
- 2.8.1 问题1:jdk编译版本
- 2.8.2 解决方法
- 2.8.3 问题2:spring Boot版本过高
- 2.8.4 解决方法
- 2.9 JdbcTemplate简介
- 2.10 编写Controller测试
- 2.11 遇到的问题
一 Spring Data简介
- Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。
- 对于数据访问层,关系数据库【SQL】、非关系数据库【NOSQL】,Spring Boot底层都是采用Spring Boot进行统一处理。
- Spring Boot官网
- 数据库相关的启动器参考文档
二 Spring Boot集成JDBC
2.1 项目创建步骤
- 选择Spring Initializr生成器,填写相关信息
- 选择Spring Boot版本和需要的项目依赖
- 项目依赖
- Spring Web
- JDBC API
- MYSQL Driver
MYSQL Driver和JDBC API都位于SQL选择下面
2.2 测试的SQL脚本
CREATE TABLE `user` (
`id` int NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
`perms` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into user2 values
(1,'yang','123456'),
(2,'酸梅汤小王子','888888'),
(3,'李五','112233'),
(4,'小明','123456'),
(5,'西瓜姑娘','852963741'),
(6,'阿毛','5211314');
2.3 编写yaml配置文件连接数据库
- 在resources目录下,创建application.xml文件,编写如下代码
spring:
datasource:
username: root
password: xxxx
url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
2.4 IDEA连接数据库步骤【非必要的步骤】
- 打开右侧侧边栏中的数据库
- 点击新打开窗口的左侧+号图标
- 选择数据源类型
- 填写用户名和密码
- 点击测试按钮进行连接测试
- 选择架构,选择使用的数据库,点击确定即可
2.5 测试
- 编写完配置文件后,SpringBoot会默认进行了自动配置
- 在test下的测试中进行测试
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.liquibase.DataSourceClosingSpringLiquibase;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
class Springboot04DataApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//查看一下默认的数据源
System.out.println(dataSource.getClass());
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}
2.6 运行结果
2.7 对运行结果的探究
-
我们并没有手动配置,为什么是
class com.zaxxer.hikari.HikariDataSource
? -
全局搜索一下,找到数据源的所有自动配置都在 :
DataSourceAutoConfiguration
文件 -
可以在
DataSourceAutoConfiguration
文件中看到如下内容【大概在115行左右】
@Import({DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class, DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class, DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class})
protected static class PooledDataSourceConfiguration {
protected PooledDataSourceConfiguration() {
}
}
- 这里导入的类都在 DataSourceConfiguration 配置类下,Spring Boot2.7.6默认使用HikariDataSource 数据源
HikariDataSource 号称 Java WEB 当前速度最快的数据源,相比于传统的 C3P0 、DBCP、Tomcat、jdbc 等连接池更加优秀;
2.8 遇到的错误
2.8.1 问题1:jdk编译版本
spring boot java: 无效的目标发行版: 17
2.8.2 解决方法
- 修正编辑器里的配置
- 修正项目结构中的配置
- 修正pom.xml中的java版本
2.8.3 问题2:spring Boot版本过高
- 61.0的版本对应的是java11
- 52.0对应的是java1.8(java8)
java: 无法访问org.springframework.boot.SpringApplication
错误的类文件: /C:/environment/apache-maven-3.6.3/maven-repo/org/springframework/boot/spring-boot/3.0.2/spring-boot-3.0.2.jar!/org/springframework/boot/SpringApplication.class
类文件具有错误的版本 61.0, 应为 52.0
请删除该文件或确保该文件位于正确的类路径子目录中。
2.8.4 解决方法
- 修改pom.xml中父级spring boot的版本配置
- 这里使用的java版本是1.8,spring boot的版本是2.7.6
作者创建项目时Spring Boot的版本是3.0.2,然后又因为版本问题将其降为2.7.6,然后又更新maven,所以这里说时Spring Boot版本为2.7.6应该是合理的
2.9 JdbcTemplate简介
- 有了数据源
(com.zaxxer.hikari.HikariDataSource)
,然后可以拿到数据库连接(java.sql.Connection)
,然后就可以使用原生的 JDBC 语句来操作数据库。 - 即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC 做了轻量级的封装,即 JdbcTemplate 。
- 数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。
- Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,程序员只需自己注入即可使用
JdbcTemplate
的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的JdbcTemplateConfiguration
类- JdbcTemplate主要提供以下几类方法:
方法名 | 说明 |
---|---|
execute方法 | 可以用于执行任何SQL语句,一般用于执行DDL语句; |
update方法及batchUpdate方法 | update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句; |
query方法及queryForXXX方法 | 用于执行查询相关语句; |
call方法 | 用于执行存储过程、函数相关语句。 |
2.10 编写Controller测试
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* @author 缘友一世
* date 2023/1/21-21:08
*/
@RestController
public class jdbcController {
@Autowired
JdbcTemplate jdbcTemplate;
@RequestMapping("/userList")
public List<Map<String,Object>> userList() {
String sql="select * from user";
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
return list;
}
@GetMapping("/addUser")
public String addUser() {
String sql="insert into mybatis.user(id,name,pwd) values(4,'小明','123456')";
jdbcTemplate.update(sql);
return "update success";
}
@GetMapping("/updateUser/{id}")
public String updateUser(@PathVariable("id") int id) {
String sql="update mybatis.user set name=?,pwd=? where id="+id;
//封装
Object[] objects = new Object[2];
objects[0]="小明2";
objects[1]="xxx";
jdbcTemplate.update(sql,objects);
return "updateUser-ok";
}
@GetMapping("/deleteUser/{id}")
public String deleteUser(@PathVariable("id") int id) {
String sql="delete from mybatis.user where id=?";
jdbcTemplate.update(sql,id);
return "deleteUser success";
}
}
2.11 遇到的问题
- 启动后访问相关页面,找不到页面
This application has no explicit mapping for /error, so you are seeing this as a fallback.
- 原因
- Controller目录创建的位置有误
- 解决方法
- 将Controller层放到SpringbootDataApplication的同目录下
- 将Controller层放到SpringbootDataApplication的同目录下