本文介绍在 Spring Boot 项目中,如何使用 JdbcTemplate 读取 Microsoft SQL Server 中的数据,实现一个 Restful Web Services。
实现一个 Restful Web Services ,请求后输出从 SQL Server 数据库 Products 表获取到的某些数据。例如,
http://localhost:7425/one
输出纯文本:星巴克咖啡http://localhost:7425/getById/2
根据指定 id 输出 JSON : { “id” : 2 , “name” : “蓝山咖啡” }http://localhost:7425/getAll
输出 JSON List:
[{ “id” : 1 , “name” : “星巴克咖啡” },{ “id” : 2 , “name” : “蓝山咖啡” },{ “id” : 3 , “name” : “猫屎咖啡” }]
根据 Restful 风格,采取的是 getById/2
这种的地址方式获取参数,而不是传统的 getById?id=2
问号加参数的方式。在 Spring 中采用 @PathVariable
对参数进行标记。
使用 Spring Tool Suite 创建一个 Spring Starter Project ,添加 HelloHooyes.java,Products.java 文件 ,创建好的目录必要的结构:
在 application.properties 中修改调试 server 的端口为7425,配置 Microsoft SQL Server 数据库地址。
server.port=7425
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=hooyesDB
spring.datasource.username=hooyes
spring.datasource.password=hooyes.net
在 pom.xml 中添加 MS SQL Server Driver 、Spring Web 、Spring Data JDBC 。
以下仅列出本文关键的依赖项。
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
...
在这个文件里,实现 Restful Web Services ,使用 JdbcTemplate 读取 Products 数据。
package net.hooyes.shop;
import net.hooyes.shop.Model.*;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.jdbc.core.JdbcTemplate;
@RestController
public class HelloHooyes {
@Autowired
JdbcTemplate jt;
// 读取一个产品名称
@GetMapping("/one")
public String one() {
String sql = "select name from Products where id = 1";
String name = jt.queryForObject(sql, String.class);
return name;
}
// 通过ID读取一个产口,返回JSON
@GetMapping("/getById/{id}")
public Products getbyId(@PathVariable Integer id) {
String sql = "select id,name from Products where id= ?";
return jt.queryForObject(sql, new Object[] { id },
(rs, n) -> new Products(rs.getInt("id"),
rs.getString("name")));
}
// 读取所有产品,返回JSON 列表
@GetMapping("/getAll")
public List<Products> getAll() {
String sql = "select id,name from Products";
return jt.query(sql,
(rs, n) -> new Products(rs.getInt("id"),
rs.getString("name")));
}
}
以上代码获取 Microsoft SQL Server 数据都是直接通过 SQL 语句,如何执行存储过程呢?稍做改动即可执行存储过程。
创建好一个叫 Get_Products
的存储过程。
CREATE PROCEDURE [Get_Products] @ID INT = 0
AS
SELECT ID ,
Name
FROM Products P
WHERE ( @ID = 0 OR ID = @ID )
RETURN 0
对 Java 代码稍做修改执行 Microsoft SQL Server 存储过程
@GetMapping("/getById/{id}")
public Products getbyId(@PathVariable Integer id) {
// 根据参数 id,执行存储过程获取数据
String sql = "execute Get_Products ?";
return jt.queryForObject(sql, new Object[] { id },
(rs, n) -> new Products(rs.getInt("id"),
rs.getString("name")));
}
@GetMapping("/getAll")
public List<Products> getAll() {
// 默认参数,执行存储过程获取数据
String sql = "execute Get_Products";
return jt.query(sql,
(rs, n) -> new Products(rs.getInt("id"),
rs.getString("name")));
}
package net.hooyes.shop.Model;
public class Products {
private Integer id;
private String name;
public Products(Integer id, String name) {
setId(id);
setName(name);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这个文件是 Spring Boot 项目的入口文件
package net.hooyes.shop;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ShopApplication {
public static void main(String[] args) {
SpringApplication.run(ShopApplication.class, args);
}
}
这个文件也是一个标准的用法,让我们的 Spring Boot 项目除了独立运行,还可以跑在 Tomcat 等 Server 里。
package net.hooyes.shop;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ShopApplication.class);
}
}
1、在 Microsoft SQL Server 数据库中添加几条数据
insert into Products(ID,Name) VALUES(1,'星巴克咖啡')
insert into Products(ID,Name) VALUES(2,'蓝山咖啡')
insert into Products(ID,Name) VALUES(3,'猫屎咖啡')
2、运行 Server
3、在浏览器中打开 http://localhost:7425/getById/3
输出 { "id" : 3 , "name" : "猫屎咖啡" }
完成目标。
如果想布署到 Tomcat 中运行,命令行进入此项根目录,执行命令 mvn package
编译打包成功后,将 target
目录中的 .war
文件复制到 Tomcat 的 webapps
中即可。
这里是本篇文章完整的,完全可运行的源代码。
Online
https://github.com/hooyes/hooyes/tree/master/java/shop
Git
$ git clone https://github.com/hooyes/hooyes.git
$ cd hooyes/java/shop
$ welcome to hooyes.net
[INFO] ------------------------------o-
[INFO] Author : HOOYES
[INFO] Site : https://hooyes.net
[INFO] Page : https://hooyes.net/p/spring-restful-jdbctemplate
[INFO] Last build : 2023-07-31 09:16:20 +0000
[INFO] -0------------------------------