spring boot 連接Mysql介紹



Spring Boot 集成教程


概述

java應用的數據庫接口的層次圖如下

image

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服務器:

image

創建數據庫,在工具欄上點擊創建數據庫按鈕

image

輸入數據庫名:qikegu_demo,選擇字符排序規則,推薦utf8mb4_unicode_ciutf8_general_ci,點擊apply下面的apply按鈕創建。

image

創建成功后,左側出現qikegu_demo數據庫

image

接下來創建數據表,展開qikegu_demo數據庫,右鍵點擊Tables,彈出菜單,選擇:Create Tables...,設置數據表名稱和屬性,添加字段,注意紅圈圈出的地方不要輸錯,點擊apply創建數據表

image

添加數據,左側展開qikegu_demo -> Tables,鼠標點擊user表的編輯按鈕

image

插入用戶數據,輸入nickname, mobile, password,不要輸入id,id由數據庫產生,點擊apply插入數據

image

創建spring boot項目

打開Eclipse,創建spring boot的spring starter project項目,在設置依賴配置時,勾選web, jdbc, mysql,如不清楚怎樣創建spring boot項目,參照教程: spring boot hello world (restful接口)例子

image

創建成功后,項目目錄如下:

image

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

image

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接口)例子),使用瀏覽器訪問,輸出從數據庫中讀取的用戶手機號

image

總結

本文介紹了spring boot連接mysql的過程,使用JdbcTemplate訪問數據庫,驗證數據庫連接成功。

完整代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM