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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...