Spring JDBC
概念
Spring的JDBC模块负责数据库资源管理和错误处理,简化了开发人员对数据库的操作。
Spring JDBC通过配置数据源和JDBC模板来配置。
针对数据库操作,Spring框架提供了JdbcTemplate
类,它是Spring框架数据抽象层的基础,是Spring JDBC的核心类。
JdbcAccessor
提供了访问数据库使用的公共属性,例如Data Source,DataSource主要功能是获取数据库连接,还可以引入对数据库连接的缓冲池和分布式事务的支持;JdbcOperations
定义了可以使用的操作集合,例如增删改查(CURD)。
Spring JDBC模块由4个包组成:
下面我们真正来用一下。
Spring JDBC实践
数据库创建
首先我们在MySQL中创建一个数据库,由于我是Mac环境,所以我直接在终端中执行SQL语句来完成。
如果你没有修改过密码,执行以下命令
mysql -uroot
如果修改过密码请执行以下命令,根据提示输入密码,输入的时候看不见
mysql -u root -p
如果你是Windows可以通过sqlyog
连接。
以下部分通用:
执行SQL语句创建数据库
CREATE DATABASE db_javaee;
我们接下来为这个数据库创建一个单独的用户来管理它,用户名为db_javaee
,密码是dbjavaeepassword
。
CREATE USER 'db_javaee'@'localhost' IDENTIFIED BY 'dbjavaeepassword';
这里有必要说明下,如果数据库与你开发环境在同一台机器上,这里可写'localhost'
,如果是远程的数据库要改为'%'
,即(以下同理)
CREATE USER 'db_javaee'@'%' IDENTIFIED BY 'dbjavaeepassword';
给这个用户授予权限,如果是远程别忘了改成'%'
GRANT ALL ON db_javaee.* TO 'db_javaee'@'localhost';
刷新权限
flush privileges;
这里有个问题得注意下,如果你的MySQL版本是5.7到这里就没啥问题了。如果是MySQL8.0以及更高,则加密算法由原来的sha256_password改成了caching_sha2_password,导致连接新版本数据库报错。
新版本用户需要追加
ALERT USER 'db_javaee'@'localhost' IDENTIFIED WITH mysql_native_password by 'dbjavaeepassword';
如果你root用户登陆不上也有可能是因为这个原因,这时候你就要像Mac用户一样到终端里连接,并将此处的db_javaee
改为root
才能在旧版sqlyog
里或者navcat
里连接。
项目创建
我们还是创建一个Maven项目,名称为top.cairbin.test3
,然后在pom.xml
里添加依赖包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.5.RELEASE</version>
<scope>test</scope>
</dependency>
注意这里的mysql-connector-java
请用较新的,我之前用5.1.47
会报错。
同样创建与src
平级的resources
目录并use as source folder
,在里面创建app.xml
(跟我们之前的AppCtx.xml
一样,名称不固定随你便,不过在main中的必须与这里的文件名一致),并写入如下内容
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 指定需要扫描的包,使注解生效 -->
<context:component-scan
base-package="top.cairbin.test3" />
<!-- 配置dataSource -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--数据库驱动 -->
<property name="driverClassName"
value="com.mysql.jdbc.Driver" />