Spring Boot 集成教程
- Spring Boot 介紹
- Spring Boot 開發環境搭建(Eclipse)
- Spring Boot Hello World (restful接口)例子
- spring boot 連接Mysql
- spring boot配置druid連接池連接mysql
- spring boot集成mybatis(1)
- spring boot集成mybatis(2) – 使用pagehelper實現分頁
- spring boot集成mybatis(3) – mybatis generator 配置
- spring boot 接口返回值封裝
- spring boot輸入數據校驗(validation)
- spring boot rest 接口集成 spring security(1) – 最簡配置
- spring boot rest 接口集成 spring security(2) – JWT配置
- spring boot 異常(exception)處理
- spring boot 環境配置(profile)切換
- spring boot redis 緩存(cache)集成
概述
java應用的數據庫接口的層次圖如下
JDBC
Java應用通過JDBC接口訪問數據庫,JDBC(Java DataBase Connectivity/Java數據庫連接)為各種數據庫,如mysql、oracle等,提供一個統一的接口,應用程序通過JDBC執行各種SQL操作,如select、insert等等。在本文中,我們會通過JDBC訪問數據庫,驗證數據庫是否正常連接。
JPA
JPA(Java Persistence API/Java持久層接口),是ORM(Object Relational Mapping/對象關系映射)的一個標准,ORM的作用是在數據庫表與Java對象之間建立映射,理論上來說有ORM就無需直接通過SQL操作數據庫了,通過Java對象即可,這樣會方便很多,Hibernate是實現JPA標准的一個有名例子。JPA建立在JDBC之上,也是通過JDBC訪問數據庫。
Mybatis
ORM有一些缺點,如過於笨重,比如在多表聯合查詢時相當繁瑣,但直接使用原始的JDBC操作數據庫過於低效,mybatis是現在互聯網項目使用比較多的一個Java持久層庫。雖然mybatis經常被和Hibernate比較,但mybatis不是JPA的一個實現,mybatis可以理解為加強版的SQL,實現了諸如動態SQL、結果集映射等,高效又不失靈活,個人傾向使用mybatis。同樣的,mybatis建立在JDBC之上,通過JDBC訪問數據庫。后面的教程將對mybatis做詳細介紹。
准備數據
在這之前,確保已經正確安裝Mysql,推薦目前主流版本5.7,同時安裝官方圖形客戶端workbench。
sql語句
可以在mysql命令行客戶端直接執行sql語句,創建數據庫和插入數據
創建數據庫
CREATE DATABASE qikegu_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
創建表的sql語句:
CREATE TABLE `qikegu_demo`.`user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`nickname` VARCHAR(50) NULL COMMENT '昵稱',
`mobile` VARCHAR(20) NULL COMMENT '手機號',
`password` CHAR(60) NULL COMMENT '密碼hash值',
`role` VARCHAR(100) NULL DEFAULT 'user' COMMENT '角色,角色名以逗號分隔',
PRIMARY KEY (`id`),
UNIQUE INDEX `mobile_UNIQUE` (`mobile` ASC))
COMMENT = '用戶表';
插入數據的sql語句:
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc1', '13512345678', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc2', '13512345677', '123');
使用workbench創建數據庫和插入數據
打開workbench,連接進入mysql服務器:
創建數據庫,在工具欄上點擊創建數據庫按鈕
輸入數據庫名:qikegu_demo,選擇字符排序規則,推薦utf8mb4_unicode_ci
或utf8_general_ci
,點擊apply下面的apply按鈕創建。
創建成功后,左側出現qikegu_demo數據庫
接下來創建數據表,展開qikegu_demo數據庫,右鍵點擊Tables,彈出菜單,選擇:Create Tables...
,設置數據表名稱和屬性,添加字段,注意紅圈圈出的地方不要輸錯,點擊apply創建數據表
添加數據,左側展開qikegu_demo -> Tables
,鼠標點擊user表的編輯按鈕
插入用戶數據,輸入nickname, mobile, password,不要輸入id,id由數據庫產生,點擊apply插入數據
創建spring boot項目
打開Eclipse,創建spring boot的spring starter project項目,在設置依賴配置時,勾選web, jdbc, mysql,如不清楚怎樣創建spring boot項目,參照教程: spring boot hello world (restful接口)例子
創建成功后,項目目錄如下:
pom.xml由spring boot自動生成,注意已經包含了web, jdbc, mysql的依賴配置
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qikegu</groupId>
<artifactId>mysql-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mysql-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置數據源
打開文件:application.properties,該文件在 src -> main -> resources
目錄,配置數據庫連接:
# 服務器端口,如果不配置默認是8080端口
server.port=8096
# 數據庫設置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/qikegu_demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=你的數據庫密碼
解釋一下spring.datasource.url的配置, 主要下面幾個部分:
- localhost - 主機地址
- 3306 - 數據庫端口
- qikegu_demo - 數據庫名稱
問號之后是一些其他的參數設置,如編碼、時區設置這些...
spring boot現在的默認連接池是Hikari,是號稱性能最好的連接池,如后續要調優連接池參數,可參考官網文檔,現在都使用默認值即可。
訪問數據庫
添加代碼驗證數據庫是否正常連接,添加文件:HelloController.java
HelloController.java的代碼
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
JdbcTemplate jdbcTemplate;
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String index() {
String sql = "SELECT mobile FROM user WHERE id = ?";
// 通過jdbcTemplate查詢數據庫
String mobile = (String)jdbcTemplate.queryForObject(
sql, new Object[] { 1 }, String.class);
return "Hello " + mobile;
}
}
我們使用spring的JdbcTemplate(這正是我們在前面引入spring jdbc依賴的原因),比使用原始的jdbc接口方便。
運行
運行程序(如何運行參照: spring boot hello world (restful接口)例子),使用瀏覽器訪問,輸出從數據庫中讀取的用戶手機號
總結
本文介紹了spring boot連接mysql的過程,使用JdbcTemplate訪問數據庫,驗證數據庫連接成功。