Spring Cloud + Vue前后端分離-第3章 SpringBoot項目技術整合

Spring Cloud + Vue前后端分離-第3章 SpringBoot項目技術整合

3-1 集成持久層框架Mybatis

ORM:對象關系映射,Hibernate是全自動ORM,Mybatis是半自動ORM,Mybatis可以操作的花樣更多,是首選的持久層框架

System模塊集成Mybatis框架

utf8是三個字節,支持的字符有限。MySQL在5.5.3之后增加了這個utf8mb4的編碼,支持更多字符,例如emoji小表情。

數據庫準備工作2: 創建courseimooc數據庫專用的用戶,用戶名可以叫courseimooc或其他

在實際開發中,我們會創建不同權限的用戶,比如只能查詢數據,或者只能做增刪改查??

生成的sql語句

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Grant Option, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `courseimooc`.* TO `courseimooc`@`localhost`;

修改一下名稱,說明只能本機訪問?

雙擊courseimooc@localhost,這個報錯先不理會

進入courseimooc,新建一張表

現在 關閉連接,再打開,就不會報錯了!

1.集成mybatis框架,啟動成功

Maven父子模塊增加jar包依賴: 先在父pom.xml中增加jar包依賴,再在子pom.xml中增加jar包依賴,子pom.xml中不帶版本號

?

選中這個單詞,Alt + 回車 ,然后點擊Save 'courseimooc' to dictionary?

Alt+Enter可以幫助解決大多數的錯誤報警等

單詞就不會出現波浪線

如果啟動報錯,加上spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Mybatis使用示例

#增加TestMapper.xml,放在 reources/mapper目錄下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.course.system.mapper.TestMapper"><select id="list" resultType="com.course.system.domain.Test">select `id`,`name` from`test`</select>
</mapper>

application.properties

spring.application.name=system
server.servlet.context-path=/system
server.port=9001
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/#增加數據庫連接
spring.datasource.url=jdbc:mysql://localhost:3306/courseimooc?characterEncoding=UTF8&autoReconnect=true
spring.datasource.username=courseimooc
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Drivermybatis.mapper-locations=classpath:/mapper/*.xml

TestController.java

package com.course.system.controller;import com.course.system.domain.Test;
import com.course.system.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.List;@RestController
public class TestController {@Resourceprivate TestService testService;@RequestMapping("/test")public List<Test> test(){return testService.list();}
}

Test.java

?TestMapper.java

package com.course.system.mapper;import com.course.system.domain.Test;import java.util.List;public interface TestMapper {public List<Test> list();
}

TestService.java

package com.course.system.service;import com.course.system.domain.Test;
import com.course.system.mapper.TestMapper;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;
@Service
public class TestService {@Resourceprivate TestMapper testMapper;public List<Test> list(){return testMapper.list();}
}

SystemApplication.java

package com.course.system;import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.core.env.Environment;@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.course.system.mapper")
public class SystemApplication {private static final Logger logger = LoggerFactory.getLogger(SystemApplication.class);public static void main(String[] args) {SpringApplication app = new SpringApplication(SystemApplication.class);Environment env = app.run(args).getEnvironment();logger.info("啟動成功!!");logger.info("System地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));}}

1.mybatis使用示例: http://127.0.0.1:9001/system/test

2.增加了三層結構

3-2 項目優化

idea數據庫插件的使用

1.使用database關聯數據庫

?如果不成功,可能是時區的問題,在Advanced中找到serverTimezone設置為UTC

UTC代表的是全球標準時間,如果要用北京時間,可以填Asia/Shanghai

這樣就說明創建好了

?

2.新增數據庫腳本?

設置了idea關聯數據庫后,所有的腳本都可以在idea直接執行,相當于把開發和運維關聯起來了。

集成熱部署DevTools

idea+DevTools熱部署

第1步:增加devtools依賴

第2步:Ctrl+Alt+S 打開設置窗口,編寫代碼時,自動編譯勾選上

勾選Advanced Settings中的Allow auto-make to start even if developed application is currently running?

?然后自己進行測試一下,應該是已經可以了

熱部署的時間會比正常啟動更快,隨著業務的增加,啟動時間會變長,這個差距會越明顯

優化mybatis日志

3-3 搭建服務模塊-server

業務擴展后,需要對表加一個字段,這時,如果要保持實體類和表結構一致,則所有模塊的實體都要改,費時費力

如果采取的策略是,哪個模塊用到新的字段,就改哪實體類,時間長了,所有的實體類和表都對應不上,并且這種策略不能用mybatis代碼生成器

新建公共模塊-server

<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>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version></parent><groupId>com.course</groupId><artifactId>server</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><dependencies><!-- 熱部署DevTools --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><!-- 集成mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

system集成server模塊

總的pom.xml包下加入server依賴

?

重新啟動

集中配置

server作為jar包被依賴,它的resources下的配置文件會和system下的配置文件沖突

spring默認也會讀resources/config下的配置文件

1.將用的配置移動到server

注:server配置文件的路徑要放在resources/config/application.properties,不能和上層的路徑一樣放在resoures根目錄下

3-4 集成mybatis generator

idea集成mybatis generator生成mybatis代碼

步驟1:父pom.xml里增加mybatis-generator插件

這個插件需要連接數據庫獲得表結構,所以需要加驅動包依賴

步驟2:添加配置文件generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat"><!--反引號``:如果表名或者字段名是mysql的關鍵學比如table,from等,這時可以加上反引號,比如:select `date` from `from`--><property name="beginningDelimiter" value="`"/><property name="endingDelimiter" value="`"/><!-- 生成的實體類添加toString()方法 --><plugin type="org.mybatis.generator.plugins.ToStringPlugin" /><!-- 不生成注釋 --><!-- 默認自動生成的代碼會有一堆英文注釋,大家可以把這段刪除試試--><commentGenerator><property name="suppressAllComments" value="true"/></commentGenerator><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/courseimooc?serverTimezone=Asia/Shanghai"userId="courseimooc"password="courseimooc"></jdbcConnection><!-- domain類的位置 --><javaModelGenerator targetProject="src\main\java"targetPackage="com.course.server.domain"/><!-- mapper xml的位置 --><sqlMapGenerator targetProject="src\main\resources"targetPackage="mapper"/><!-- mapper類的位置 --><javaClientGenerator targetProject="src\main\java"targetPackage="com.course.server.mapper"type="XMLMAPPER" /><!-- type="XMLMAPPER" 有三種生成方式:ANNOTATEDMAPPER(生成的SQL全部在Java中),MIXEDMAPPER (SQL部分在Java中,部分在XML中),XMLMAPPER (生成的SQL全部在XML中)推薦使用: XMLMAPPER,將Java代碼與SQL代碼分離--><table tableName="test" domainObjectName="Test"/></context>
</generatorConfiguration>

步驟3:創建maven啟動命令mybatis-generator:generate -e

generatorConfig.xml是放在server模塊下,所以這里選擇server目錄?

紅色:新文件未交給git管理(未add,未commit);

綠色:已交給git管理未提交(已add,未commit);

藍色:有修改未提交;灰色:已刪除未提交

這些是新生成的

解決mapper.xml重復生成代碼的問題

1.解決mapper.xml重復生成代碼的間題<plugin type="org.mybatis.generator.plugins.UnmergeableXmMappersPlugin”/>

業務擴展,表結構發生變動時,需要重新生成持久層代碼。這對編碼有一個要求:生成器生成的四個文件絕對不可以手動修改。后續會再做說明

低端的解決方法:每次手動刪除xml,再執行生成命令。

更好的方法:

<!--覆蓋生成XML文件-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />

舊版本解決方案:自己寫Java類,用來啟動生成器,而不是用Maven命令啟動。在java類里刪除表xmI文件,再執行生成代碼

原來的xml會被覆蓋,所以絕對不要在生成的xml手動修改代碼,因為下次再生成時,手動修改的代碼會被覆蓋掉

example使用示例

通過Example,可以幫我們寫入where,order by,distinct等,需要熟練掌握,可以極大提高單表的開發效率

啟動EurekaApplication、SystemApplication

小技巧:Ctrl+Alt+V,快速生成個變量

根據id升序asc

根據id降序desc

要按多個條件查詢的話,在表達式的后面繼續.andXXX,后續會再作介紹

??是jdbc占位符,可用于防注入攻擊。mybatis底層也是idbc實現的

使用Example可以快速完成單表的增刪改查,熟練掌握后對代碼開發效率將有一個質的飛躍?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211540.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211540.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211540.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

整數分析 C語言xdoj43

問題描述 給出一個整數n&#xff08;0<n<100000000&#xff09;。求出該整數的位數&#xff0c;以及組成該整數的所有數字中的最大數字和最小數字。 輸入說明 輸入一個整數n&#xff08;0<n<100000000&#xff09; 輸出說明 在一行上依次輸出整數n的位…

Linux內核上游提交完整流程及示例

參考博客文章&#xff1a; 向linux內核提交代碼 - 知乎 一、下載Linux內核源碼 通過git下載Linux內核源碼&#xff0c;具體命令如下&#xff1a; git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 實際命令及結果如下&#xff1a; penghaoDin…

IBM Qiskit量子機器學習速成(六)

量子卷積神經網絡 卷積和池化&#xff1a;卷積神經網絡的必備成分 卷積神經網絡被廣泛應用于圖像和音頻的識別當中&#xff0c;關鍵在于“卷積”操作賦予神經網絡統籌學習數據的能力。 執行卷積操作需要輸入數據與卷積核&#xff0c;卷積核首先與輸入數據左上角對齊&#xf…

【數據庫】簡單連接嵌套查詢

目錄 &#x1f387;簡單查詢 &#x1f387;連接查詢 &#x1f387;嵌套查詢 分析&思考 &#x1f387;簡單查詢 --練習簡單查詢 --select * from classes --select * from student --select * from scores --1.按Schedule表的結構要求用SQL語言創建Schedule表 --字段名…

深度學習之全面了解預訓練模型

在本專欄中&#xff0c;我們將討論預訓練模型。有很多模型可供選擇&#xff0c;因此也有很多考慮事項。 這次的專欄與以往稍有不同。我要回答的問題全部源于 MathWorks 社區論壇&#xff08;ww2.mathworks.cn/matlabcentral/&#xff09;的問題。我會首先總結 MATLAB Answers …

關于Linux Kernel Panic導致重啟的簡單分析步驟

Linux系統Kernel Panic的檢索 如何判斷是否發生Kernel Panic&#xff0c;以下以 CentOS 7.9系統為例 #查看 /var/crash 路徑下是否有生成文件夾&#xff0c;Kernel Panic后會生成文件夾在此路徑表示產生了Kernel Panic ls /var/crash #/var/crash/127.0.0.1-2023-12-04-08\:5…

HarmonyOS應用開發者基礎認證考試(穩過)

判斷題 ??????? 1. Web組件對于所有的網頁都可以使用zoom(factor: number)方法進行縮放。錯誤(False) 2. 每一個自定義組件都有自己的生命周期正確(True) 3. 每調用一次router.pushUrl()方法&#xff0c;默認情況下&#xff0c;頁面棧數量會加1&#xff0c;頁面棧支持的…

linux redis-cluster ipv6方式

配置文件&#xff0c;具體字段的含義&#xff0c;可以參考其他文檔。 1.單個文件的配置信息 redis_36380.conf requirepass Paas_2024port 36380tcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile /data/paas/apps/aicache-redis/redis_36380.p…

【STM32】TIM定時器編碼器

1 編碼器接口簡介 Encoder Interface 編碼器接口 編碼器接口可接收增量&#xff08;正交&#xff09;編碼器的信號&#xff0c;根據編碼器旋轉產生的正交信號脈沖&#xff0c;自動控制CNT自增或自減&#xff0c;從而指示編碼器的位置、旋轉方向和旋轉速度 接收正交信號&#…

黑豹程序員-EasyExcel實現導出

需求 將業務數據導出到excel中&#xff0c;老牌的可以選擇POI&#xff0c;也有個新的選擇EasyExcel。 有個小坑&#xff0c;客戶要求樣式比較美觀&#xff0c;數字列要求千位符&#xff0c;保留2位小數。 可以用代碼實現但非常繁瑣&#xff0c;用模板就特別方便&#xff0c;模…

C++優秀串口庫

serial::Serial Class Reference #include <serial.h> Data Structures class ScopedReadLockclass ScopedWriteLock Public Member Functions公有成員方法&#xff08;編程用的都在這里了&#xff0c;那些私有的如果不開源一般跟我們沒有關系了&#xff09; Serial …

用chatGPT開發項目:我想的無人的智慧樹網站 流量之神 利用人工智能的算法將人吸引住 GPT4是不是越來越難用了,問一下就要證明一下自己是不是人類

廣度發散&#xff1a;讓AI給出時代或今日或你關注的熱點事件 比如采集新聞頭條&#xff0c;根據內容或標題&#xff0c;以不同的角度&#xff0c;或各種人群的角色&#xff0c;生成50篇簡短的文章。一下就能占傳統的搜索引擎。這是AI最擅長的【千人千面&#xff0c;海量生成】…

【中國海洋大學】操作系統隨堂測試6整理

1. IO系統的層次機構包括&#xff1a;IO硬件、中斷處理程序、&#xff08;&#xff09;程序、設備獨立性軟件、用戶層軟件。 答&#xff1a;設備驅動 2. IO設備和控制器之間的接口包括三種類型的信號&#xff1a;數據信號線、控制信號線和&#xff08;&#xff09;&#xff1…

qt反射基礎

最近研究了一下QT的反射機制&#xff0c; Qt的元對象系統除了提供信號/槽機制的特性之外&#xff0c;它還提供了以下特性: QObject::metaObject() 返回關聯的元對象 QMetaObject::className() 在運行時狀態下返回類名 QObject::inherits() 判斷類的繼承關系 QObject::tr()&…

鴻蒙開發之封裝優化

面向對象開發離不開封裝&#xff0c;將重復的可以復用的代碼封裝起來&#xff0c;提高開發效率。 基于之前的List&#xff0c;對代碼進行封裝。 1、抽取component 將List的頭部抽離出來作為一個新的component。可以創建一個新的ArkTS文件&#xff0c;寫我們的頭部代碼 為了…

代理模式:解析對象間的間接訪問與控制

目錄 引言 理解代理模式 不同類型的代理模式 代理模式的應用場景 代理模式的優缺點 優點 缺點 實際案例&#xff1a;Java中的代理模式應用 結語 引言 代理模式是軟件設計模式中的一種結構型模式&#xff0c;旨在為其他對象提供一種代理以控制對這個對象的訪問。它允許你…

消息隊列使用指南

介紹 消息隊列是一種常用的應用程序間通信方法&#xff0c;可以用來在不同應用程序或組件之間傳遞數據或消息。消息隊列就像一個緩沖區&#xff0c;接收來自發送方的消息&#xff0c;并存儲在隊列中&#xff0c;等待接收方從隊列中取出并處理。 在分布式系統中&#xff0c;消…

死鎖問題,4個必要條件+避免死鎖

目錄 引入 死鎖 概念 示例 多把鎖 單鎖 4個必要條件 用途 引入 我們用加鎖的方式保證了多個線程訪問臨界資源時,不會出現數據紊亂的問題 但是,鎖的引入,會導致出現其他的問題 死鎖 概念 在多線程或多進程的并發環境中&#xff0c;兩個或多個進程或線程被永久阻塞&…

esxi全稱“VMware ESXi

esxi全稱“VMware ESXi”&#xff0c;是可直接安裝在物理服務器上的強大的裸機管理系統&#xff0c;是一款虛擬軟件&#xff1b;ESXi本身可以看做一個操作系統&#xff0c;采用Linux內核&#xff0c;安裝方式為裸金屬方式&#xff0c;可直接安裝在物理服務器上&#xff0c;不需…

數據結構算法-希爾排序算法

引言 在一個普通的下午&#xff0c;小明和小森決定一起玩“誰是老板”的撲克牌游戲。這次他們玩的可不僅僅是娛樂&#xff0c;更是要用撲克牌來決定誰是真正的“大老板”。 然而&#xff0c;小明的牌就像剛從亂麻中取出來的那樣&#xff0c;毫無頭緒。小森的牌也像是被小丑擲…