數據持久化技術——MP

文章目錄

  • 1 環境搭建
    • 1.1 創建一個maven的project
    • 1.2 pom.xml文件導入web開發依賴
    • 1.3 創建SpringBoot項目的主程序入口
  • 2 代碼生成器
  • 3 配置數據庫
  • 4 導入前端頁面
  • 5 開始前端控制器的編碼
    • 5.1 wrapper構造器

??mybatis-plus(簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

1 環境搭建

1.1 創建一個maven的project

在這里插入圖片描述

1.2 pom.xml文件導入web開發依賴

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.6</version>
</parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

1.3 創建SpringBoot項目的主程序入口

@SpringBootApplication
public class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class, args);}
}

2 代碼生成器

??顧名思義,代碼生成器就是用來直接生成代碼的一個程序。首先導入相關依賴

<!--Mybatis-Plus生成器依賴-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1.tmp</version>
</dependency><!--freemarker 模板引擎(沒有用原生的模板引擎)-->
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version>
</dependency>

??生成的代碼需要使用lombok簡化實體類開發導入相關依賴

<!--lombok簡化實體類開發,如果之前沒有下載過依賴的同名插件的話需要下載安裝,然后重啟一下idea-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

??創建utils包,拷貝代碼生成器,需要修改的兩個地方:數據庫連接的數據庫名、項目目錄名。運行main方法,報錯java.lang.ClassNotFoundException:com.mysql.jdbc.Driver,沒有驅動,需要導入數據庫連接依賴

<!--數據庫連接驅動-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version>
</dependency>

??生成成功之后,mapper層的接口上加@mapper注解或者在主程序入口出添加,簡單說一下service的方法都從哪里來,也就是Ctrl進源碼看他繼承方法內部又實現的接口里定義了后面需要使用到的所有方法。

3 配置數據庫

導入mybatis-plus的場景啟動器

<!--mybatis-plus的場景啟動器 內置了jdbc的啟動器無需重復引用-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version>
</dependency>

resources目錄下創建配置文件application.yml,配置數據庫的相關信息

server:# 修改后端項目運行時的端口號信息port: 8888spring:# 配置數據源信息datasource:url: jdbc:mysql://localhost:3306/musicusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource

??上面使用到了pool(池子),數據庫連接池也就是數據源,所謂的數據庫連接池從字面意思上翻譯就是將數據庫連接放到一個池子里。相比之前的好處就是只需要創建一次連接,后面的都直接用不用一次次創建。數據源使用到了Druid的,需要導入Druid的依賴

<!--整合druid的數據源-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.17</version>
</dependency>

4 導入前端頁面

??resources目錄下創建templates文件夾,將前端頁面導入。由于SpringBoot默認的打包方式是jar包,但是JSP不支持在jar包(一種壓縮包)中編譯,所以SpringBoot默認不支持JSP,于是我們需要引入第三方的模板引擎技術——Thymeleaf實現頁面的渲染。
導入thymeleaf引擎的場景啟動器

<!--thymeleaf引擎的場景啟動器-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

5 開始前端控制器的編碼

復制controller層的框架整體,和前端進行交互的頁面

@RequestMapping("/queryAll")
public List<Singer> queryAll() {// 先演示普通的查詢,再逆序查詢return null;
}@RequestMapping("/queryByName")
public List<Singer> queryByName(String name) {// 使用lambdaQueryWrapper 的like方法模糊查詢// list方法查詢到所有的符合條件值并返回return null;
}@PostMapping("/save")
public String save(HttpServletRequest request) {Singer singer = new Singer();singer.setName(request.getParameter("name")).setSex(Integer.parseInt(request.getParameter("sex"))).setPic(request.getParameter("pic")).setBirth(new Date()).setLocation(request.getParameter("location")).setIntroduction(request.getParameter("introduction"));// 調用save方法,并判斷返回值的正誤,返回前端對應的字符串return null;
}@RequestMapping("/update")
public String update(int id, String introduction) {// 使用eq和set去設置條件構造器// 調用update傳入條件構造器,并判斷返回值的正誤,返回前端對應的字符串return null;
}@RequestMapping("/delete")
public String delete(Integer id) {// 調用removeById方法直接刪return null;
}

??SQL語句是數據持久化技術的核心,jdbc使用String字符串拼接SQL語句;mybatis使用xml映射文件在標簽里編寫SQL語句;但是,MP無需使用SQL語句(一些復雜的業務可以使用SQL語句來完成),直接調用方法即可在框架的底層實現SQL語句的拼接和執行。
??在這里來查看一下mp的官方開發文檔,大概講一下幾個方法的大概用處,然后摁住Ctrl查看源碼,知道為什么可以使用這些方法完成相應的功能。

首先是注入SingerService對象

@Autowired
private SingerService service;

??這里的用法是spring框架的控制反轉,即將設計好的類對象注冊進spring的IOC容器中將對象的控制權交給容器,當需要使用的時候就使用@Autowired注解讓容器創建一個對象出來使用。完成的作用相當于使用new的方式調用類的構造器創建一個對象

查詢所有的記錄

@RequestMapping("/queryAll")
public List<Singer> queryAll() {List<Singer> singers = service.list();return singers;
}

??逆序查詢的話就需要在SQL語句拼接order by id desc,這個拼接條件的功能就需要使用wrapper構造器來完成了

5.1 wrapper構造器

在這里插入圖片描述??總而言之,wrapper構造器的作用就是用來拼裝where,order by等條件語句的作用,如果你的增刪改查無需條件的話,可以不用wrapper,但凡需要使用SQL語句需要拼接條件的話就需要使用wrapper。更加具體的wrapper案例分析參考博客wrapper構造器的簡要案例分析

逆序查詢所有記錄的方法

逆序查詢所有
http://localhost:8888/singer/queryAll
@RequestMapping("/queryAll")
public List<Singer> queryAll() {LambdaQueryWrapper<Singer> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.orderByDesc(Singer::getId);List<Singer> singers = service.list(lambdaQueryWrapper);return singers;
}

按照id查詢

按照id查詢
http://localhost:8888/singer/queryByName?name=王
@RequestMapping("/queryByName")
public List<Singer> queryByName(String name) {LambdaQueryWrapper<Singer> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.like(Singer::getName,name);List<Singer> singers = service.list(lambdaQueryWrapper);return singers;
}

編寫添加記錄的方法

@PostMapping("/save")
public String save(HttpServletRequest request) {Singer singer = new Singer();singer.setName(request.getParameter("name")).setSex(Integer.parseInt(request.getParameter("sex"))).setPic(request.getParameter("pic")).setBirth(new Date()).setLocation(request.getParameter("location")).setIntroduction(request.getParameter("introduction"));boolean save = service.save(singer);String result = save == true ? "添加成功" : "添加失敗";return result;}

修改方法

修改
http://localhost:8888/singer/update?id=64&introduction=歌聲甜美
@RequestMapping("/update")
public String update(int id, String introduction, HttpServletRequest request) {LambdaUpdateWrapper<Singer> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();lambdaUpdateWrapper.eq(Singer::getId,id).set(Singer::getIntroduction,introduction);boolean update = service.update(lambdaUpdateWrapper);String result = update == true ? "修改成功" : "修改失敗";return result;
}

刪除方法

刪除
http://localhost:8888/singer/delete?id=64
@RequestMapping("/delete")
public String delete(Integer id) {boolean remove = service.removeById(id);String result = remove == true ? "刪除成功" : "刪除失敗";return result;}

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

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

相關文章

win7無法連接打印機拒絕訪問_如何解決局域網無法訪問SQL Server 2008 無法連接到(local)...

初次安裝使用SQL server 2008時&#xff0c;可能會遇到無法連接到(local)的情況。那么&#xff0c;如何解決此問題&#xff1f;工具/原料: SQL server 2008方法/步驟1. 打開SQL server 配置管理器-->SQL server 網絡配置-->實例名的協議(我的實例名為SQLEXPRESS)。2. 將S…

windows進程管理器_任務管理器就能搞定9成的電腦問題?方法在這里!

90% 對于電腦的不滿&#xff0c;都逃不出這幾個方面&#xff1a;電腦狀態無法隨時監測、運行卡頓、開機時間長、莫名黑屏、電池關鍵時刻不扛使(筆記本電池怎么保養&#xff1f;能不能一直插電源充電&#xff1f;可以戳這里→)&#xff0c;很多小伙伴就選擇安裝第三方軟件來解決…

三維網格精簡算法java版_ISMAR 2020 | 商湯提出手機端實時單目三維重建系統

導讀&#xff1a;商湯研究院和浙江大學CAD&CG國家重點實驗室合作研發了一個手機端實時單目三維重建系統Mobile3DRecon。與現有的基于RGBD的在線三維重建或離線生成表面網格的系統不同&#xff0c;該系統結合前端位姿跟蹤結果&#xff0c;允許用戶使用單目攝像頭在線重建場景…

【分類匯總】idea快捷鍵、idea配置、常用插件

寫在前面 千萬別看目錄很長就感覺本篇博客很絮叨繁瑣&#xff0c;里面多是配置的講解貼了很多的圖片方便大家了解&#xff0c;配置成功一次之后就可以一直使用了。 快捷鍵的使用建議大家先看&#xff0c;后續敲代碼的時候刻意的使用快捷鍵&#xff0c;相信經過兩三天的使用就可…

win10設置默認輸入法_個性化設置技巧

個性化設置技巧子墨居士前言本次內容主要是win10系統自帶的功能&#xff0c;不是用第三方軟件優化桌面的情況下&#xff0c;讓自己的電腦桌面能更美觀、更舒服。系統自身的個性化設置主要是下圖中的幾個。鼠標右擊->個性化設置。 第三方軟件的效果會更好&#xff0c;畢竟是專…

什么叫組網_家庭wifi,如何組網最合適

wifi信號通過電磁波在空中傳播的&#xff0c;屬于微波通信的一種&#xff0c;因為微波本身及發射功率的限制&#xff0c;導致wifi的穿透能力比較差&#xff0c;北方比較厚的承重強&#xff0c;鐵門、家具等對都會對wifi信號有較強的削弱作用。穿過的障礙物越多&#xff0c;這種…

java輸入輸出、數組初始化

&#x1f4a1;涉及的知識點速通&#x1f6eb; 關于輸入輸出你都知道啥?&#x1f6eb; 關于控制路程都需要注意啥?&#x1f6eb; 關于數組的問題你能答對幾道&#xff1f;&#x1fa82; 數組初始化的小細節你都知道嗎?&#x1fa82; 這些Arrays的常見API你都掌握了嗎?&#…

linux rm 命令刪除文件恢復_Linux之恢復誤刪除文件

前言每當我們在生產環境服務器上執行rm命令時&#xff0c;總是提心吊膽的&#xff0c;因為一不小心執行了誤刪&#xff0c;然后就要準備跑路了&#xff0c;畢竟人不是機器&#xff0c;更何況機器也有 bug。那么如果真的刪除了不該刪除的文件&#xff0c;比如數據庫、日志或執行…

ac2100 反彈shell無法粘貼_記一次突破反彈shell

背景某天閑著無聊&#xff0c;小伙伴發來一個某網站&#xff0c;說只能執行命令&#xff0c;不能反彈shell。測試對著目標站點一頓測試。發現確實存在shiro反序列化&#xff0c;并且存在可以利用的gadget。利用發現確實可以執行命令&#xff0c;但是我們執行反彈的時候。反彈不…

java三大特征 重載與重寫的區別

&#x1f4a1;涉及的知識點速通&#x1f6eb; OOP的三大特征都是什么?&#x1fa82; 什么是封裝?&#x1fa82; 什么是繼承?&#x1fa82; 什么是多態?&#x1f6eb; 關于構造器你都知道什么?&#x1f6eb; 關于類的源文件都需要知道什么?&#x1f6eb; 重載和重寫都是什…

發生身份驗證錯誤_Python MySQL8.0 錯誤

Python MySQL8.0 錯誤&#xff1a;authentication plugin calling_sha2_password is not supported.Python3 進行到 python3 mysql(mysql-connector)&#xff0c;然后安裝mysql-8.0.16&#xff0c;照著示例程序運行 python&#xff0c;遇到這個大大的問題&#xff1a;authentic…

vue 獲取當前元素的父元素_react獲取觸發元素的屬性 e.target.dataset

我的react項目中一個應用場景就是在點擊一個元素的時候想要獲取到這個元素的屬性。代碼如下&#xff1a;renderyear()>{return(<div><div data-value"年初">年初</div> </div>);}//點擊標簽的時候觸發的函數 TagClick(e)>{console.log…

為什么要學Redis(NoSQL數據庫)

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站尚硅谷的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&…

centos常用命令_二、Docker鏡像是什么?Docker常用命令

科技奇聞 關注讓你我共同進步文章來源&#xff1a;CSDN作者&#xff1a;IronmanJayDocker常用命令1.幫助命令docker version #查看版本號docker info #顯示Docker系統信息&#xff0c;包括鏡像和容器數docker --help #查看Docker有哪些命令…

實現定時中斷_無線傳感器網絡實驗報告(二)Timer定時應用實驗

實驗二&#xff1a; Timer定時應用實驗2.1實驗目的1. 認識并了解 CC2530 定時器&#xff1b; 2. 學習定時器的基本配置與應用&#xff1b; 3. 在 ZigBee 模塊上運行定時器程序。2.2實驗原理根據數據手冊可知 CC2530 總共有 4 個定時器&#xff0c;但是定時器 2 被系統占用&…

詳析java中的關鍵字和權限修飾

&#x1f4a1;涉及的知識點速通&#x1f6eb; 關于關鍵字你都知道什么?&#x1fa82; this和super關鍵字&#x1fa82; instanceof關鍵字&#x1fa82; static關鍵字&#x1fa82; final關鍵字&#x1f6eb; 權限修飾符的作用范圍知多少?各位小伙伴們大家好&#xff0c;歡迎來…

JQ 全選后獲取選中的值_Filecoin如何創建賬戶錢包并獲取FIL測試幣

昨天"猩動力節點"加入了fielcoin的測試網絡&#xff0c;對用戶或者礦工來說&#xff0c;如何獲取代幣&#xff0c;創建錢包保護好自己的資產&#xff0c;每一個用戶來說都很關心。下面我們一起來學習如何創建賬戶錢包&#xff0c;并獲取FIL 測試代幣。在創建賬戶錢包…

Redis中 字符串的常用命令

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站尚硅谷的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&…

mac wmware 無網絡_無線網絡中常用的技術名詞

1、LAN&#xff1a;即局域網&#xff1a;是路由和主機組成的內部局域網&#xff0c;一般為有線網絡。2、WAN&#xff1a;即廣域網&#xff1a;是外部一個更大的局域網。3、WLAN(Wireless LAN&#xff0c;即無線局域網)&#xff1a;前面我們說過LAN是局域網&#xff0c;其實大多…

python界面開發webview_python在webview和activity混合頁面下怎么定位

展開全部 genymotion 模擬器&#xff1a;android 5.0.0 python 2.7 appium 1.4.16.1 1、app原生元素定位&#xff08;常用&#xff09; driver.find_element_by_id(“resourse-id”32313133353236313431303231363533e59b9ee7ad9431333363393662) driver.find_element_by_name(“…