我们在上一篇文章中已经尝试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