我们在上一篇文章中已经尝试Spring Boot中使用MongoDB数据库,本章来尝试Spring Boot中使用mysql数据库。
Spring Boot中使用MongoDB数据库
我们在Spring Boot现有的项目上增加mysql的访问,使用方案为Spring data jpa
官网参考如下:
https://spring.io/guides/gs/accessing-data-mysql/
步骤如下:
引入maven包
在pom.xml中
<dependencies></dependencies>
新增引入如下:
<!-- JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Use MySQL Connector-J -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
完整的pom.xml如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.biologic</groupId>
<artifactId>biologic</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 编译版本为JDK 1.8 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<ms.version>1.0-SNAPSHOT</ms.version>
</properties>
<!-- Spring Boot 核心jar包 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<dependencies>
<!-- JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Use MySQL Connector-J -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>com.mofang</groupId>
<artifactId>23mofang-domain</artifactId>
<version>2.15.1-RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
新建数据库表格和用户密码授权
对mysql的操作可以通过可视化客户端工具mysql-front等,或者登录到mysql服务中。
我们登录到mysql服务创建数据库和用户名密码使用命令如下:
sudo mysql --password
mysql> create database db_example;
mysql> create user 'springuser'@'localhost' identified by 'ThePassword';
mysql> grant all on db_example.* to 'springuser'@'localhost';
mysql> flush privileges;
关于表格的创建,如果会有数据的首次写入,则Spring data jpa会自动创建表和字段。
如果只涉及到读取以及需要对 表和字段的类型进行比较严格的管理时,则可以先用命令行创建表格。
CREATE TABLE IF NOT EXISTS `auth_user`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`password` varchar(128) NOT NULL,
`last_login` datetime(6) DEFAULT NULL,
`is_superuser` tinyint(1) NOT NULL,
`username` varchar(30) NOT NULL,
`first_name` varchar(30) NOT NULL,
`last_name` varchar(30) NOT NULL,
`email` varchar(254) NOT NULL,
`is_staff` tinyint(1) NOT NULL,
`is_active` tinyint(1) NOT NULL,
`date_joined` datetime(6) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
创建配置文件
如果没有配置文件,需要新增配置文件,比如创建文件src/main/resources/application.properties。
如果已经有可用的环境变量文件可以直接在上面新增,在配置好的环境变量文件中新增如下,ip端口数据库名和账号名密码需要与自己创建的对应,
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword
spring.jpa.hibernate.ddl-auto参数有以下配置:none, update, create, create-drop,含义如下:
none 这个是默认参数,不改版数据库结构。
update Hibernate会改变数据库的结构根据我们的java实体。
create 可创建数据库,但不会删除它。
create-drop 创建数据库,每次断开连接时自动删除。
# 创建对应的实体
新建文件如下:
src/main/java/mysql/AuthUser.java
内容如下:
package mysql;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name= "auth_user")
public class AuthUser {
private int id;
private String password;
private Date last_login;
private Date date_joined;
private int is_superuser;
private String username;
private String first_name;
private String last_name;
private String email;
private int is_staff;
private int is_active;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getLast_login() {
return last_login;
}
public void setLast_login(Date last_login) {
this.last_login = last_login;
}
public Date getDate_joined() {
return date_joined;
}
public void setDate_joined(Date date_joined) {
this.date_joined = date_joined;
}
public int getIs_superuser() {
return is_superuser;
}
public void setIs_superuser(int is_superuser) {
this.is_superuser = is_superuser;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getIs_staff() {
return is_staff;
}
public void setIs_staff(int is_staff) {
this.is_staff = is_staff;
}
public int getIs_active() {
return is_active;
}
public void setIs_active(int is_active) {
this.is_active = is_active;
}
}
实体字段名称和类型需要与表格中的对应如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCFT1VOi-1574152488796)(http://image.525.life/FnyLDYHoy27MADY6y3P-o-uuXXXO)]
需要注意的是AuthUser.java需要与Spring Boot的启动文件Application.java同一层级路径或者子集路径。否则会报错识别不到bean。
创建接口
我们需要创建一个操作AuthUser实体的接口,可以继承CrudRepository。
创建接口文件路径为src/main/java/mysql/AuthUserRepository.java
CrudRepository包含了基本的CRUD操作。
代码如下:
package mysql;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Service;
@Service
public interface AuthUserRepository extends CrudRepository<AuthUser, Long> {
}
需要注意的是AuthUserRepository.java需要与Spring Boot的启动文件Application.java同一层级路径或者子集路径。否则会报错识别不到bean。
创建访问路由作为测试
我们已经有了可以访问mysql数据库的接口AuthUserRepository,那么就可以开始进行测试了。
新建一个路由文件,文件路径如下:
src/main/java/mysql/MainController.java
内容如下:
package mysql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import mysql.AuthUserRepository;
import mysql.AuthUser;
@Controller
@RequestMapping(path="/demo")
public class MainController {
@Autowired
private AuthUserRepository authUserRepository;
@GetMapping(path="/add") // Map ONLY GET Requests
public @ResponseBody String addNewUser (@RequestParam String username
, @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
AuthUser n = new AuthUser();
n.setUsername(username);
n.setEmail(email);
n.setDate_joined(new Date());
n.setFirst_name("joe");
n.setLast_login(new Date());
n.setLast_name("adrian");
n.setPassword("testPassword");
authUserRepository.save(n);
return "Saved";
}
@GetMapping(path="/all")
public @ResponseBody Iterable<AuthUser> getAllUsers() {
// This returns a JSON or XML with the users
return authUserRepository.findAll();
}
}
需要注意的是 MainController需要与Spring Boot的启动文件Application.java同一层级路径或者子集路径。
如果不清楚的可以参考文章:
SpringBoot简介项目创建和运行使用
使用以下链接在浏览器访问新建AuthUser
http://localhost:8080/demo/add?username=test&email=someemail@someemailprovider.com
界面上会输出
Saved
查看数据库已经新存入一条记录。
使用以下链接访问返回所有的AuthUser
http://localhost:8080/demo/all