一、前言 前後端分離開發是將項目開發工作前後端交互工作拆分,使前端開發人員能夠專註於頁面開發或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; /** * 用戶真實名稱 */