Spring Boot 整合JDBC 實現後端項目開發

来源:https://www.cnblogs.com/niaonao/archive/2018/07/29/9386705.html
-Advertisement-
Play Games

一、前言 前後端分離開發是將項目開發工作前後端交互工作拆分,使前端開發人員能夠專註於頁面開發或APP 開發,後端開發人員專註與介面開發、業務邏輯開發。 此處開發後端項目,給前端或者APP 端提供介面。不涉及複雜的業務邏輯,通過簡單的增刪改查來演示後端開發項目。 環境介紹: 開發工具:IDEA JDK ...


一、前言

二、新建Spring Boot 項目

三、Spring Boot 整合JDBC 與MySQL 交互

3.1 新建數據表skr_user 

3.2 Jdbcproject 項目結構如下

3.3 搭建文件結構

    3.3.1 創建package 

    3.3.2 創建開發環境配置文件

3.4 新建工具類

    3.4.1 加密工具類MD5Util.java

    3.4.2 單據編號生成工具類GenerateIdUtil.java

3.5 新建實體類

    3.5.1 數據表對應用戶實體類SkrUser.java

    3.5.2 請求參數封裝實體類RequsetEntity.java

    3.5.3 後臺響應結果封裝實體類ResultEntity.java

3.6 完善持久層和業務層代碼

    3.6.1 新建持久層介面SkrUserDao.java

    3.6.2 新建持久層實現類SkrUserDaoImpl.java

    3.6.3 新建業務介面SkrUserService.java

    3.6.4 新建業務實現類SkrUserServiceImpl.java

四、後端項目對外介面開發

4.1 新建Controller 控制層類

4.2 項目最終結構圖如下

五、後端開發項目測試 


 

 一、前言

    前後端分離開發是將項目開發工作前後端交互工作拆分,使前端開發人員能夠專註於頁面開發或APP 開發,後端開發人員專註與介面開發、業務邏輯開發。

    此處開發後端項目,給前端或者APP 端提供介面。不涉及複雜的業務邏輯,通過簡單的增刪改查來演示後端開發項目。

    環境介紹:

  • 開發工具:IDEA
  • JDK: 1.7 及以上
  • Spring Boot: 2.0 及以上
  • Maven: 3.0 及以上

二、新建Spring Boot 項目

    通過功能菜單File - New - Project 新建Spring Initializr 項目,Project SDK 選擇Java 1.8.0,其他預設即可Next 下一步。

圖2-1、新建Spring Initializr 項目

    坐標Group 填寫pers.niaonao,坐標Artifact 填寫jdbcproject,項目Name 為jdbcproject,Package 包名為pers.niaonao.jdbcproject。

圖2-2、Project Metadata 圖

    項目依賴選擇Web、JDBC、MySQL 然後Next 下一步。

圖2-3、選擇項目依賴圖

圖2-4、完成項目創建

    你可以另外配置Maven 也可以使用預設的Maven,我這裡是自己配置的Maven 3.5 

圖2-5、Maven 配置圖

三、Spring Boot 整合JDBC 與MySQL 交互

3.1 新建數據表skr_user 

-- ----------------------------
-- Table structure for skr_user
-- ----------------------------
DROP TABLE IF EXISTS `skr_user`;
CREATE TABLE `skr_user` (
  `id` int(5) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `user_id` varchar(20) NOT NULL COMMENT '用戶ID',
  `user_nick_name` varchar(10) DEFAULT NULL COMMENT '用戶昵稱',
  `user_real_name` varchar(10) DEFAULT NULL COMMENT '用戶名稱',
  `user_phone` varchar(11) DEFAULT NULL,
  `user_password` varchar(32) DEFAULT NULL,
  `user_address` varchar(32) DEFAULT NULL,
  `user_gender` int(1) DEFAULT NULL COMMENT '性別: 0/1 - 男/女',
  `user_card` varchar(20) DEFAULT NULL COMMENT '身份證',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of skr_user
-- ----------------------------
INSERT INTO `skr_user` VALUES ('1', '2018072910221899540', 'kecun', '柯純', '15728287364', 'E10ADC3949BA59ABBE56E057F20F883E', 'hpu松7', '0', '340824199202010355');
INSERT INTO `skr_user` VALUES ('2', '2018072910221067312', 'huangza', '皇子昂', '15746938428', 'E10ADC3949BA59ABBE56E057F20F883E', '安徽省安慶市潛山縣', '0', '340824198102115159');
INSERT INTO `skr_user` VALUES ('3', '2018072910221030545', 'guosb', '郭淑白', '15647338496', 'E10ADC3949BA59ABBE56E057F20F883E', '廣東省江門市鶴山市', '1', '440784198602241121');
INSERT INTO `skr_user` VALUES ('4', '2018072910221012658', 'gongcj', '龔才俊', '15746938428', 'E10ADC3949BA59ABBE56E057F20F883E', '海南省三亞市萬寧市', '0', '340824199808213429');
INSERT INTO `skr_user` VALUES ('5', '2018072910221060270', 'chenh', '陳鴻禎', '13857288463', 'E10ADC3949BA59ABBE56E057F20F883E', '江蘇省淮陰市金湖縣', '0', '460006197201070474');
INSERT INTO `skr_user` VALUES ('6', '2018072910221209445', 'lie', '李爾', '12094847738', 'E10ADC3949BA59ABBE56E057F20F883E', '河北省邢台市沙河市', '0', '513427199812291899');
INSERT INTO `skr_user` VALUES ('7', '2018072910221053415', 'guxz', '顧興朝', '17461937475', 'E10ADC3949BA59ABBE56E057F20F883E', '西藏自治區日喀則地區', '0', '320831199707251836');
INSERT INTO `skr_user` VALUES ('8', '2018072910221052908', 'taohh', '陶鴻暉', '11537495365', 'E10ADC3949BA59ABBE56E057F20F883E', '山西省忻州地區定襄縣', '0', '130582197910124575');
INSERT INTO `skr_user` VALUES ('9', '2018072910221189175', 'qincc', '秦痴春', '15377464838', 'E10ADC3949BA59ABBE56E057F20F883E', '雲南省昆明市呈貢縣', '0', '142222197709186791');
INSERT INTO `skr_user` VALUES ('10', '2018072910221068870', 'long', '龍偉兆', '11827629283', 'E10ADC3949BA59ABBE56E057F20F883E', '廣西壯族自治區南寧市', '0', '542300199409116469');
INSERT INTO `skr_user` VALUES ('11', '2018072910221053349', 'qian', '錢逸明', '15847562672', 'E10ADC3949BA59ABBE56E057F20F883E', '陝西省安康地區', '0', '530121197909145993');
INSERT INTO `skr_user` VALUES ('12', '2018072910221041169', 'weih', '韋巨集曠', '18484575399', 'E10ADC3949BA59ABBE56E057F20F883E', '安徽省安慶市潛山縣', '0', '45010019710713799X');
INSERT INTO `skr_user` VALUES ('13', '2018072910221654738', 'songms', '宋妙松', '18494737626', 'E10ADC3949BA59ABBE56E057F20F883E', '西藏自治區日喀則地區日喀則市', '0', '15212719921025705X');
INSERT INTO `skr_user` VALUES ('14', '2018072910221025795', 'zhanghc', '張巨集暢', '15122321464', 'E10ADC3949BA59ABBE56E057F20F883E', '安徽省安慶市樅陽縣', '0', '612400199301127581');
INSERT INTO `skr_user` VALUES ('15', '2018072910221079179', 'fangxq', '方新晴', '15253545293', 'E10ADC3949BA59ABBE56E057F20F883E', '遼寧省葫蘆島市興城市', '1', '542301199907030111');
INSERT INTO `skr_user` VALUES ('16', '2018072910221091637', 'linz', '林芷天', '15847372626', 'E10ADC3949BA59ABBE56E057F20F883E', '四川省涼山彞族自治州寧南縣', '1', '21148119971204138X');
INSERT INTO `skr_user` VALUES ('17', '2018072910221022477', 'qianyw', '錢陽文', '12828474795', 'E10ADC3949BA59ABBE56E057F20F883E', '河北省石家莊市贊皇縣', '0', '513427198007131419');
INSERT INTO `skr_user` VALUES ('18', '2018072910221766265', 'panyq', '潘雅琴', '15748237348', 'E10ADC3949BA59ABBE56E057F20F883E', '河南省濮陽市市區', '1', '430412199410027117');
INSERT INTO `skr_user` VALUES ('19', '2018072910221022477', 'hanyh', '韓宇航', '12582738394', 'E10ADC3949BA59ABBE56E057F20F883E', '湖南省衡陽市南嶽區', '0', '130129198810294762');
INSERT INTO `skr_user` VALUES ('20', '2018072910221066822', 'luth', '盧天華', '15943732827', 'E10ADC3949BA59ABBE56E057F20F883E', '安徽省安慶市潛山縣', '0', '410902199204160559');

3.2 Jdbcproject 項目結構如下

圖3-1、項目初始結構圖

    添加JSON 依賴,pom.xml 文件如下

<?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>

    <groupId>pers.niaonao</groupId>
    <artifactId>jdbcproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>jdbcproject</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--1.JDBC 依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--2.Web 依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--3.MySQL 依賴-->
        <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>

        <!--4.JSON依賴-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.8</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

    此處添加了JSON 依賴,前後端數據的傳輸格式統一為JSON 類型。引入依賴。

圖3-2、引入Maven 依賴圖

3.3 搭建文件結構

    在pers.niaonao.jdbcproject 下新建package 包

  • dao: 存放持久層介面
  • entity: 存放實體類
  • service: 存放業務層相關介面
  • util: 存放工具類
  • web: 存放Controller 控制層相關類

    在資源路徑resources 新建application.yml 和application-dev.yml 文件。

  • application.yml: 和application.properties 配置文件一樣,只是文件格式不一樣。Spring Boot 推薦使用yaml 格式配置文件。
  • application-dev.yml: 作為開發環境配置文件。(一個項目的開發一般有正式環境application-master.yml,開發環境application-dev.yml,測試環境application-feature.yml)

圖3-3、搭建文件結構圖

    application.xml 文件如下

spring:
  profiles:
    active: dev

    application-dev.xml 文件如下

#develop environment
#埠
server:
  port: 8082
#資料庫
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/yonyou_nc
    username: root
    password: root

3.4 新建工具類

    在util 包下新建加密工具類MD5Util.java,新建id 生成工具類。

    加密工具類MD5Util.java

package pers.niaonao.jdbcproject.util;

import java.security.MessageDigest;

/**
 * @Author: niaonao
 * @Date: Created in 15:21 2018/7/29
 * @Description :md5加密工具類
 */
public class MD5Util {
    /**
     * 生成md5
     *
     * @param message
     * @return
     */
    public static String getMD5(String message) {
        String md5str = "";
        try {
            // 1 創建一個提供信息摘要演算法的對象,初始化為md5演算法對象
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 2 將消息變成byte數組
            byte[] input = message.getBytes("UTF-8");

            // 3 計算後獲得位元組數組,這就是那128位了
            byte[] buff = md.digest(input);

            // 4 把數組每一位元組(一個位元組占八位)換成16進位連成md5字元串
            md5str = bytesToHex(buff);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5str;
    }

    /**
     * 二進位轉十六進位
     *
     * @param bytes
     * @return
     */
    public static String bytesToHex(byte[] bytes) {
        StringBuffer md5str = new StringBuffer();
        // 把數組每一位元組換成16進位連成md5字元串
        int digital;
        for (int i = 0; i < bytes.length; i++) {
            digital = bytes[i];

            if (digital < 0) {
                digital += 256;
            }
            if (digital < 16) {
                md5str.append("0");
            }
            md5str.append(Integer.toHexString(digital));
        }
        return md5str.toString().toLowerCase();
    }
}

GenerateIdUtil.java

package pers.niaonao.jdbcproject.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @Author: niaonao
 * @Date: Created in 15:21 2018/7/29
 * @Desprition: 實體類ID 生成工具類
 */
public class GenerateIdUtil {

    /** 預設用戶分表位 */
    private static final String DEFAULT_USER_PARTITION  = "1";

    /** 預設替代位 */
    private static final String DEFAULT_REPLACE = "0";

    /** 預設橫線 */
    private static final String DEFAULT_LINE = "-";

    /**
     * 生成 id 方法
     * 一般項目會有多個實體類(數據表)
     * 此處生成id 添加四位標記碼可以區分不同的數據表,且能夠降低出現重覆的id
     * @param tableBizCode 數據表標記碼
     * @return
     */
    public static String generateId(String tableBizCode){
        //獲取當前日期字元串
        String dateString = getPartition(new Date());
        //獲取隨機生成十四位數字
        String ranString = String.valueOf(new Random().nextLong()).substring(0,6);
        //如果當前隨機數第一位是-,則用0代替
        if (ranString.contains(DEFAULT_LINE)){
            ranString = ranString.replace(DEFAULT_LINE,DEFAULT_REPLACE);
        }
        //iD規則:當前日期字元串 +       1 +         數據表標記碼 + 6位隨機數字元串
        return dateString + DEFAULT_USER_PARTITION + tableBizCode + ranString;
    }

    /**
     * 日期轉換
     * @param date   當前時間
     * @return       日期字元串
     */
    public static String getPartition(Date date) {
        //前8位yyyyMMdd格式
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        return dateFormat.format(date);
    }

    public static void main(String args[]){
        //生成數據格式:2018072910221899540
        System.out.println(generateId("0221"));
    }
}

3.5 新建實體類

    在entity 包下新建實體類SkrUser.java、RequestEntity.java、ResultEntity.java

    數據表對應用戶實體類SkrUser.java

package pers.niaonao.jdbcproject.entity;

/**
 * @Author: niaonao
 * @Date: Created in 16:24 2018/7/29
 * @Desprition: 用戶實體類
 */
public class SkrUser {

    /**
     * 用戶ID
     */
    private String userId;
    /**
     * 用戶註冊昵稱
     */
    private String userNickName;
    /**
     * 用戶真實名稱
     */
   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有的時候,我們會在JS框架中看到這行 (function(window, undefined) {})(window) ,它是做什麼用的,我們來分析下它 首先這就是一個匿名函數,立即執行它 為這麼要這樣寫,有什麼作用 對js進行壓縮的時候 均可以替換成其他簡寫字元,從而減少文件大小,因為他們被視為局 ...
  • webpack4.x css壓縮,optimize-css-assets-webpack-plugin mini-css-extract-plugin ...
  • 1、 JavaScript(弱類型語言):是一種描述性語言,也是一種基於對象(Object)和事件驅動(Event Driven)的,並具有安全性能的腳本語言。 特點:1、主要用來在HTML頁面中添加交互行為。 2、是一種腳本語言,語法和Java類似。 3、一般用於編寫客戶端的腳本。 4、是一種解釋 ...
  • 因為項目有可能用到, 所以學習了一下,做此筆記,圖截自慕課網,侵刪。 一、基本圖形 1、矩形 x,y定義矩形的左上角坐標; width,height定義矩形的長度和寬度; rx,ry定義矩形的圓角半徑長度,這裡註意,如果rx給值了ry沒給值,ry沿用rx的值,反之同理; 2、圓形 cx與cy定義圓心 ...
  • 在移動端使用時間選擇器的時候,選擇了一個時間轉換為時間戳,谷歌瀏覽器以及安卓手機使用 new Dare( 選擇的時間 ).getTime() 都能夠拿到時間戳, 但是在ios手機上會出現出現NAN 查閱資料後發現是因為ios不能解析 2018-7-26 這種格式的時間字元串,只能解析 2018/7/ ...
  • 日常中工作中我並沒有對kafka接觸很多,但瞭解到很多的框架都和kafka有著緊密的關係。比如rockmetmq是參考了kafka的設計,neflix的緩存組件ehcache是用kafka做數據的同步。同時kafka在大數據方面通常和spark,hadoop,storm一起使用,所以我對kafka也 ...
  • 用歷史觀來看一種技術的演進,稱之為“技術血脈”。 十年前,靜兒做的是傳統軟體的項目,都是企業定製的項目,系統安裝在企業的機器上,通過硬體來做物理隔離。系統的安全訪問控制靠操作系統來保證。 在互聯網大潮中,B/S逐漸流行,對於這類從傳統軟體轉化來的項目,一般採用的是用戶名密碼登陸的鑒權方式。為了對用戶 ...
  • Python gRPC 概述: gRPC 是谷歌開源的一個rpc(遠程程式調用)框架,可以輕鬆實現跨語言,跨平臺編程,其採用gRPC協議(基於HTTP2)。 rpc: remote procedure call, 翻譯過來就是是遠程程式調用。具體來說,就是客戶端c1需要調用伺服器s1上的某個方法(函 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...