赞
踩
Spring Boot 底层针对于MySQL 、Oracle 等数据库都提供了良好的支持,通过 Spring Boot 提供的场景启动器就能够看出来。
Java 程序在进行与 MySQL 的连接时需要通过 JDBC 来实现,JDBC 全称为 Java Data Base Connectivity(Java 数据库连接),主要由接口组成,是一种用于执行 SQL 语句的 Java API,各个数据库厂家基于它各自实现了自己的驱动程序(Driver),如下图所示:
Java程序在获取数据库连接时,需要以URL方式指定不同类型数据库的Driver,在获得特定的Connection连接后,可按照JDBC规范对不同类型的数据库进行数据操作,代码如下所示:
// 第一步,注册驱动程序 Class.forName("数据库驱动的完整类名"); // 第二步,获取一个数据库的连接 Connection conn = DriverManager.getConnection("数据库地址","用户名","密码"); // 第三步,创建一个会话 Statement stmt=conn.createStatement(); // 第四步,执行SQL语句 stmt.executeUpdate("SQL 语句"); // 或者查询记录 ResultSet rs = stmt.executeQuery("查询记录的SQL语句"); // 第五步,对查询的结果进行处理 while(rs.next()){ // 操作 } // 第六步,关闭连接 rs.close(); stmt.close(); conn.close();
上面几行代码读者并不陌生,这是在初学JDBC连接时的代码。虽然现在可能用了一些数据层ORM框架(比如MyBatis或者Hibernate ),但是底层实现依然和这里的代码一样。通过使用JDBC,开发人员可以直接使用Java程序来对关系型数据库进行操作。接下来将对Spring Boot如何使用JDBC进行实例演示。
1.首先,需要在项目中引入相应的场景启动器,也就是引入依赖的jar包,添加的内容如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
在添加完相关依赖之后,需要启动MySQL数据库并在新建的Spring Boot项目中配置数据库连接的地址和账号密码,这样才能正确连接到数据库。在application.properties配置文件中添加如下配置代码:
spring.datasource.name=newbee-mall-datasource spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useUnicode=true&serverTimezone=GMT&characterEncoding=utf8&autoReconnect=true&useSSL=false spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=123456
Spring Boot 操作数据库实践
Spring Boot 默认没有集成相关的 ORM 框架,而是提供了 JdbcTemplate 对象来简化开发者对于数据库的操作。
JdbcTemplate 是 Spring 对 JDBC 的封装,目的是使 JDBC 更加易于使用,更为关键的一点是,JdbcTemplate 对象也是通过自动配置机制注册到 IOC 容器中的,JdbcTemplate 的自动配置类是 JdbcTemplateAutoConfiguration。在 DataSourceAutoConfiguration 自动配置之后,会使用 IOC 容器中的 dataSource 对象作为构造参数创建一个 JdbcTemplate 对象并注册到 IOC 容器中。
在正确配置数据源之后,开发者们可以直接在代码中使用 JdbcTemplate 对象进行数据库操作。
使用 JdbcTemplate 进行数据库的增删改查
接下来进行编码操作来完成使用 JdbcTemplate 进行数据库的增删改查操作。
首先在数据库中创建一张测试表,建表语句如下:
DROP TABLE IF EXISTS `jdbc_test`;
CREATE TABLE `jdbc_test` (
`ds_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`ds_type` varchar(100) DEFAULT NULL COMMENT '数据源类型',
`ds_name` varchar(100) DEFAULT NULL COMMENT '数据源名称',
PRIMARY KEY (`ds_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8;
/*Data for the table `jdbc_test` */
insert into `jdbc_test`(`ds_id`,`ds_type`,`ds_name`) values (1,'com.zaxxer.hikari.HikariDataSource','hikari数据源'),(2,'org.apache.commons.dbcp2.BasicDataSource','dbcp2数据源');
为了演示方便,在 controller 包中新建 JdbcController 类直接注入 JdbcTemplate 对象。之后创建四个方法,分别实现根据传入的参数向 jdbc_test 表中新增数据、修改 jdbc_test 表中的数据、删除 jdbc_test 表中的数据、查询jdbc_test 表中的数据,实现代码如下:
package ltd.newbee.mall.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
public class JdbcController {
//已经自动配置,因此可以直接通过 @Autowired 注入进来 @Autowired JdbcTemplate jdbcTemplate; // 新增一条记录 @GetMapping("/insert") public String insert(String type, String name) { if (StringUtils.isEmpty(type) || StringUtils.isEmpty(name)) { return "参数异常"; } jdbcTemplate.execute("insert into jdbc_test(`ds_type`,`ds_name`) value (\"" + type + "\",\"" + name + "\")"); return "SQL执行完毕"; } // 删除一条记录 @GetMapping("/delete") public String delete(int id) { if (id < 0) { return "参数异常"; } List<Map<String, Object>> result = jdbcTemplate.queryForList("select * from jdbc_test where ds_id = \"" + id + "\""); if (CollectionUtils.isEmpty(result)) { return "不存在该记录,删除失败"; } jdbcTemplate.execute("delete from jdbc_test where ds_id=\"" + id + "\""); return "SQL执行完毕"; } // 修改一条记录 @GetMapping("/update") public String update(int id, String type, String name) { if (id < 0 || StringUtils.isEmpty(type) || StringUtils.isEmpty(name)) { return "参数异常"; } List<Map<String, Object>> result = jdbcTemplate.queryForList("select * from jdbc_test where ds_id = \"" + id + "\""); if (CollectionUtils.isEmpty(result)) { return "不存在该记录,无法修改"; } jdbcTemplate.execute("update jdbc_test set ds_type=\"" + type + "\", ds_name= \"" + name + "\" where ds_id=\"" + id + "\""); return "SQL执行完毕"; } // 查询所有记录 @GetMapping("/queryAll") public List<Map<String, Object>> queryAll() { List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from jdbc_test"); return list; }
}
在 Spring Boot 项目中操作数据库,仅仅需要几行配置代码即可完成数据库的连接操作,并不需要多余的设置,再加上 Spring Boot 自动配置了 jdbcTemplate 对象,开发者可以直接上手进行数据库的相关开发工作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。