Spring Boot入門(2)使用MySQL資料庫
介紹
本文將介紹如何在Spring專案中連線、處理MySQL資料庫。
該專案使用Spring Data JPA和Hibernate來連線、處理MySQL資料庫,當然,這僅僅是其中一種方式,你也可以使用Spring JDBC或者MyBatis.
Spring Data JPA是Spring Data的一個子專案,主要用於簡化資料訪問層的實現,使用Spring Data JPA可以輕鬆實現增刪改查、分頁、排序等。Spring Data擁有很多子專案,除了Spring Data Jpa外,還有如下子專案。
- Spring Data Commons
- Spring Data MongoDB
- Spring Data Redis
- Spring Data Solr
- Spring Data Gemfire
- Spring Data REST
- Spring Data Neo4j
Hibernate是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,它將POJO與資料庫表建立對映關係,是一個全自動的ORM框架,Hibernate可以自動生成SQL語句,自動執行,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成資料持久化的重任。
本文將介紹如何使用Spring Data JPA和Hibernate來連線、處理MySQL資料庫。
準備
首先我們需要對MySQL做一些準備處理。我們將要在MySQL中建立db_example資料庫,並建立springuser使用者,擁有對db_example資料庫的所有操作許可權。開啟MySQL , 輸入以下命令:
mysql> create database db_example; -- 建立新資料庫db_example
mysql> create user 'springuser'@'localhost' identified by 'pwd123'; -- 建立新使用者springuser,密碼為pwd123
mysql> grant all on db_example .* to 'springuser'@'localhost'; -- 給予springuser使用者對db_example資料庫的所有操作許可權
Spring Boot程式
Step1. 建立專案spring_mysql, 以及專案佈局:
mkdir spring_mysql
cd ./spring_mysql
touch build.gradle
mkdir -p src/main/java
mkdir -p src/main/resources
mkdir -p src/test/java
mkdir -p src/test/resources
Step2 編寫build.gradle
build.gradle程式碼如下:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.0.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
bootJar {
baseName = 'gs-accessing-data-mysql'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
// JPA Data (We are going to use Repositories, Entities, Hibernate, etc...)
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
// Use MySQL Connector-J
compile 'mysql:mysql-connector-java'
testCompile('org.springframework.boot:spring-boot-starter-test')
}
在上述Spring Boot專案中,主要使用spring-boot-starter-web ,spring-boot-starter-data-jpa和mysql:mysql-connector-java來實現在Web端操作MySQL .
Step3 配置屬性檔案
新建src/main/resources/application.properties檔案,配置相關屬性,程式碼如下:
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=pwd123
在上述程式碼中,主要的資料庫操作為新建(create),因為資料庫中實現不存在相應的表格。使用MySQL的localhost伺服器的3306埠的db_example資料庫,並設定使用者名稱和密碼。
Step4 編寫Java檔案
建立src/main/java/hello資料夾(package),在該資料夾下新建User.java,Hibernate會將該entity類自動轉化成資料庫中的表格。User.java的完整程式碼如下:
package hello;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity // This tells Hibernate to make a table out of this class
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String email;
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
在上述資料夾中新建UserRepository.java,其程式碼如下:
package hello;
import org.springframework.data.repository.CrudRepository;
import hello.User;
// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete
public interface UserRepository extends CrudRepository<User, Long> {
}
這是repository介面, 它將會被Spring中的bean中自動執行。
在上述資料夾中新建MainController.java,程式碼如下:
package hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import hello.User;
import hello.UserRepository;
@Controller // This means that this class is a Controller
@RequestMapping(path="/demo") // This means URL's start with /demo (after Application path)
public class MainController {
@Autowired // This means to get the bean called userRepository
// Which is auto-generated by Spring, we will use it to handle the data
private UserRepository userRepository;
@GetMapping(path="/add") // Map ONLY GET Requests
public @ResponseBody String addNewUser (@RequestParam String name
, @RequestParam String email) {
// @ResponseBody means the returned String is the response, not a view name
// @RequestParam means it is a parameter from the GET or POST request
User n = new User();
n.setName(name);
n.setEmail(email);
userRepository.save(n);
return "Saved";
}
@GetMapping(path="/all")
public @ResponseBody Iterable<User> getAllUsers() {
// This returns a JSON or XML with the users
return userRepository.findAll();
}
}
這是Spring應用的新控制器(Controller)。
在上述資料夾中新建Application.java,程式碼如下:
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
這是該Spring Boot專案的主要程式入口。
Step5 建立可執行jar包
cd spring_mysql
gradle build
執行完畢後,會在build/libs資料夾下生成gs-accessing-data-mysql-0.1.0.jar .
執行及測試
使用以下命令啟動該Spring Boot專案
java -jar build/libs/gs-accessing-data-mysql-0.1.0.jar
在瀏覽器端測試,輸入以下網址:
localhost:8080/demo/add?name=Alex&[email protected].com
localhost:8080/demo/add?name=Jclian&[email protected].com
localhost:8080/demo/add?name=Bob&[email protected].com
localhost:8080/demo/add?name=Cook&[email protected].com
localhost:8080/demo/add?name=Mark&[email protected].com
上述程式將會name和email引數的值解析成資料庫中user表中的記錄並儲存,瀏覽器介面如下圖:
在瀏覽器中輸入網址localhost:8080/demo/all,即可剛看我們我們插入到MySQL中的記錄(JSON格式):
最後我們去MySQL中檢視資料是否插入成功,結果如下圖所示:
結束語
本文將介紹如何使用Spring Data JPA和Hibernate來連線、處理MySQL資料庫。
本次分享到此結束,接下來還會繼續更新Spring Boot方面的內容,歡迎大家交流~~