【Java】如何在Eclipse 2023中访问Spring Boot + SQL Server
首先
数十年前创建的公司内部系统(使用Struts + Tomcat + Hibernate + SQL Server),当时运行在Windows Server 2003 R2 + SQL Server 2005上。去年我们终于将服务器升级至Windows Server 2016,但数据库仍保持SQL Server 2005。我们试图升级至SQL Server 2014,但遇到了”com.microsoft.sqlserver.jdbc.SQLServerException: 不支持该服务器版本”的错误,导致无法访问数据库。问题出在使用了sqljdbc.jar,需要将其更换为sqljdbc4.jar,但仅仅更换文件并不足以使系统正常运行,甚至无法进行环境配置。
在废弃旧环境并重新建立新环境时,这对于公司内部系统来说是一个好主意,但我们不能花太多时间。最重要的是,我目前对Java的知识还不够。
学习Java
我只在维护工作中做了一些更改类的工作,对于环境搭建和框架周边的知识基本停留在古老的状态。
为了安装 Eclipse 2023,并成功运行 Web 框架和访问 SQL Server,经过一番努力,我决定尝试了下面网站上的项目。
使用Spring Boot访问数据库(SQL Server)的方法
环境
请提供更多上下文以便更好地进行翻译。
-
- Windows 11 Home
-
- Eclipse 2023
-
- SQL Server 2022(開発者向けの無料エディション)
-
- Microsoft SQL Server Management Studio
-
- Java 17
-
- Maven
-
- Spring Boot 3.1.0
-
- Spring Data JPA 3.1.0
-
- Spring Thymleaf 3.1.0
-
- Lombok 1.18.26
- mssql-jdbc 11.2.3
解释
-
- Mavenは、JavaプログラムをビルドするためのツールでC言語だとmakeのようなもの、pom.xmlに依存関係を記述すればSpring Bootなどのフレームワークのダウンロードなど自動でしてくれます。読み方は「メイヴェン」です。
-
- Spring bootは、環境設定を簡略化しJavaによる開発を効率化できるフレームワークです。今回はWebアプリケーションの開発をサポートするフレームワークとして使用する。Strutsの代替と思えばいい。
-
- Spring Data JPAは、Spring BootのO/RマッパーでJavaクラスとDBテーブルをつなぎ合わせてくれるHibernate(ハイバーネート)ライブラリを内部実装している。
-
- Spring Thymleafは、テンプレートエンジンの1つで表示に関する処理しか記述できません、読み方は「タイムリーフ」です。
- Lombokは、 アノテーションによってセッターやゲッター、コンストラクターなどのクラスの機能を自動生成するためのライブラリです。読み方は「ロンボック」または「ロンボク」です。
项目创建
-
- Spring Boot DevTools
-
- Lombok
-
- Spring Data JPA
-
- MS SQL Server Driver
-
- Thymleaf
- Spring Web
源代码
根据环境的适应性,对下面网站的内容进行部分修改。
使用Spring Boot访问数据库(SQL Server)的方法。
设置DB连接信息
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testdb;encrypt=true;trustServerCertificate=true
spring.datasource.username=sa
spring.datasource.password=password
模特
由于javax.persistence会导致错误,因此进行了替换为jakarta.persistence。
package com.example.model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "weather")
public class Weather {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private Integer temperature;
private Integer humidity;
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;
}
public Integer getTemperature() {
return temperature;
}
public void setTemperature(Integer temperature) {
this.temperature = temperature;
}
public Integer getHumidity() {
return humidity;
}
public void setHumidity(Integer humidity) {
this.humidity = humidity;
}
}
仓库
package com.example.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.model.Weather;
@Repository
public interface WeatherRepository extends JpaRepository<Weather, Integer> {
}
服务
package com.example.services;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.model.Weather;
import com.example.repository.WeatherRepository;
@Service
public class WeatherService {
@Autowired
WeatherRepository weatherRepository;
/**
* レコードを全件取得する。
*
* @return
*/
public List<Weather> findAllWeatherData() {
return weatherRepository.findAll();
}
}
控制器
package com.example;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.model.Weather;
import com.example.services.WeatherService;
@Controller
public class HelloSqlServerController {
@Autowired
WeatherService weatherService;
@RequestMapping("/")
public String hello(Model model) {
model.addAttribute("title", "SQL Serverから取得したデータ");
// 気象データの取得
List<Weather> weatherDataList = weatherService.findAllWeatherData();
model.addAttribute("weatherDataList", weatherDataList);
return "index";
}
}
模板
将其创建在src/main/resource文件夹下的template文件夹。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<p>
<span th:text="${title}">Hello World!</span>
</p>
<table>
<tr th:each="data : ${weatherDataList}" th:object="${data}">
<td th:text="*{id}"></td>
<td th:text="*{name}"></td>
<td th:text="*{temperature}"></td>
<td th:text="*{humidity}"></td>
</tr>
</table>
</body>
</html>
最终项目
创建数据库
创建数据库
在使用Microsoft SQL Server Management Studio连接到服务器之后,我们将创建一个名为”testdb”的新数据库。
创建表格
create table weather (
id int NOT NULL IDENTITY (1, 1) primary key, -- ID
name varchar(20), -- 地名
temperature int, -- 気温
humidity int, -- 湿度
);
添加数据
insert into weather (name, temperature, humidity) values
('稚内', 1, 55),
('盛岡', 6, 53),
('前橋', 10, 40),
('名古屋', 12, 65),
('佐賀', 14, 67),
('那覇', 22, 69);
认证模式
最初我试图使用Windows身份验证,但由于需要安装mssql-jdbc_auth(以前的sqljdbc_auth.dll),变得麻烦了,所以我选择了直接使用SQL Server身份验证模式。
执行
请在浏览器中打开以下链接:
http://localhost:8080/
最后
我以某种方式成功地实现了与Spring Boot + SQL Server的连接。为了尽量不花费太多时间将现有公司内部系统移植,我们需要使JSP能够运行。我将在另一篇文章中详细介绍这个过程。
我在休息日在家里测试后,尝试在公司执行同样的事情,但遇到了问题。在公司中,“创建Spring启动器项目”出现了“没有可用的内容”,使用Maven会出现下载错误等情况,甚至无法创建项目,解决这个问题可是一番努力。原因与安全有关,需要使用keytool注册证书。我也想另外写一篇关于这个的文章。