后端之路第三站(Mybatis)——入門配置

一、Mybatis是啥?

就是一個用java來操控數據庫的框架語言

之前學的datagrip或者navicat這些軟件里我們操作數據庫,原理是我們編寫完的操作語句發送到服務器傳送到數據庫系統,然后數據庫執行完之后再發送給服務器返回給datagrip或者navicat顯示

那么Mybatis的邏輯也是一樣,只不過是變成從java發送給服務器再到數據庫,然后數據庫返回給服務器返回給java

二、配置Mabatis項目

提示:新建Spring Initializr模塊可以把【服務器 URL】換成阿里云的:http://start.aliyun.com

因為原URL是訪問spring.io官網去下載安裝項目,而阿里云的服務器下載安裝會更快

這里下面是重復我之前在配置sprintboot項目時的步驟,可以參考我這篇文章:

后端之路第二站(正片)——SprintBoot-CSDN博客

點擊【創建】(或者finish就配置完了)

(小插曲:遇到下面這種情況的同志請注意)

這特么是我腦殘...創建sprint boot的模塊時沒有選基于【Maven】,選了特么的【Gradle】,不小心的我自己都沒發現,塔瑪得耗費老子一整上午找問題,記住了老鐵,選Maven!!!

配置完之后,我看的黑馬里的idea是老版本,所以如果是老版本配置完會有以下文件,刪掉即可

那新的idea應該是像我這樣,我啥也不敢刪,但是這兩個應該是沒用的可以刪

最后確認一下:你這個模塊必須是在整個大項目的主目錄下

然后點開模塊的【src】目錄下的pom.xml文件就能看到這些依賴的配置是否齊全了

三、開始嘗試連接數據庫

1、創建一個裝Java的數據庫表的目錄

首先在【模塊】的—>【src】—>【main】—>【java】—>【com.xxx】目錄下創建目錄,用來裝所有的數據庫表

然后在這個目錄里創建一個表

但是!!!這里我這個屌雞掰軟件他麻的又給老子發塔瑪得神經,右鍵居然不能新建class類,我真特么的服了(如下圖)

還好身邊有后端大神,看了一眼之后就跟我說這個項目的樣子不對勁!顏sai不對!

不愧是老中醫,他給我看正確的顏色應該是這樣

老中醫說雖然不知道為何這位“病人”病狀這么奇怪,但是不要緊,一套老中醫失傳老手法來拯救!!

點擊【文件】—>【項目結構】

然后點擊【src】的【main】的【java】,點擊上面的【源代碼】,然后應用、確定

同理,resources也是點擊【src】的【main】的【resources】,點擊上面的【資源】,然后應用、確定

同理,test是點擊【test】的【java】,點擊上面的【測試】,然后應用、確定

大功告成,美極了,看得我都受不了了,太棒了,能右鍵直接新建java類簡直太舒服了,好爽,快爽死了,爽啊好爽啊,不愧是后端老中醫,傳統的老手法直接讓病人起死回生,直接讓我爽噴

那么現在就直接新建一個java類,起名的時候【包名.類名】能自動創建一個包,在包目錄下創建這個java類

2、創建數據庫表、實體類

java里創建數據庫表其實就是寫一個標準【JavaBean類】,你對比數據庫的的性質都知道是差不多的了,都是定義多個字段、并定義它們的數據類型,只不過java還可以寫方法函數,廢話不多說,先直接建一個User類

(沒有java基礎的自己上網查,這里不闡述)

這里只提一下:數據庫中這幾個數據類型

int? ?在java對應? ?Integer

varchar( )? ?在java對應? ?String

tinyint?? 在java對應? ?Short

3、在數據庫工具創建一個數據庫和表先

這里不過多講解,會的可以直接跳過,就是創建一個庫、一個表,而且為了節約時間我只做可視化操作,想用代碼建庫建表的自己一邊呆著去(另外,我這里用的是datagrip)

先創建一個數據庫,就叫Mybatis吧

然后建表,就叫User表吧

有如下字段,以及數據類型

然后!!記住你這個數據庫的四要素!!!為了連接數據庫用的

右鍵數據庫,看屬性

第一要素:驅動類名在這,點【轉到驅動程序】,然后就能看到

第二要素,url在這,原本的應該是【jdbc:mmysql://localhost:3306】,但是后面連接的時候記得在后面加上【/你的數據庫名字】,這樣一來就會直接連接到你的這個數據庫,而不是連接一整個數據源

至于用戶名還能看到,密碼就沒人知道了,你要是創建數據庫的時候忘了......那就卸載了數據庫重裝吧,不然誰都不知道你的密碼

4、連接數據庫

現在就到連接數據庫了,點到【src】的【main】的【resources】的【application.properties】

然后這又塔瑪得什么鬼啊?????槽泥馬的沒完了

冷靜片刻,點擊【設置】

然后點【編輯器】的【文件編碼】,英文對應【Editor】的【File Encodings】

然后把這三都換成【UTF-8】!!!

正常了!!好爽!!好舒服啊!!!爽!!!!

好,現在刪掉這些狗屎,寫上我們的【連接數據庫4要素】:

#連接數據庫的【四要素】
#這是我的,你們別找抄
#1、數據庫的驅動類名
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver#2、數據庫的Url
spring.datasource.url = jdbc:mysql://localhost:3306/mybatis#3、數據庫的賬戶名
spring.datasource.username = r**t#4、數據庫的密碼
spring.datasource.password = 1***6

這就是上面第3點要你們記住的數據庫四要素

5、編寫SQL語句(利用注解/XML)

首先創建一個包裝操作sql語句的接口,還是直接在寫接口的時候用【包名.接口名】方便

然后先寫一個注解【@Mapper】,它標識了:在運行時會自動生成實現這個接口的實現對象,并將這個對象交給IOC容器管理

然后再在接口里定義一個抽象方法list(),返回值就是一個集合,作用就是用一個集合封裝所有User

還得在這個方法上加一個注解:【@Select("SQL語句")】,這個注解就可以指定要執行什么sql語句

這里注意:我么們之前學java時,接口里的這種沒有方法體的方法是抽象方法,要實現接口類里再次重寫這個方法才可以用,但這里不是!!這里有了【@Select("SQL語句")】注解,他就是一個可以“干事”的完整方法了,它的返回值就是執行完sql語句的結果!!!可以直接調用,不用重寫!!!

(各位先不用深究到底為什么,老實說我學起來也是一知半解迷迷糊糊的)

(另外,注解爆紅的,再檢查這幾個問題:1、鼠標懸停,看看能不能導入包,比如List的包沒導入? ? ?2、檢查你當前是不是在spring boot的項目中? ?3、檢查你是不是Maven項目管理下,如果2、3都不是,直接刪了項目重新搭建一次試試)

import com.czm.mybatis01.table.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper //在運行時會自動生成實現這個接口的實現對象,并將這個對象交給IOC容器管理
public interface UsrMapper {//這就是你要執行的sql語句@Select("select * from user")//查詢數據庫User表所有信息public List<User> list();//直接在接口里定義一個抽象方法list(),返回值就是一個集合,也就是用一個集合封裝所有User
}

然后再直接在【test】包里的【java】的【com.xxx...】目錄下的【模塊名ApplicationnTests.java】文件,運行測試爽一下!!

那么看初始代碼里有一個@SpringBootTes注解,這個就是說明這里可以整合springboot的單元測試

你就理解為之前學java時你寫了那么多個JavaBean實體類,就可以在這測試類public static void main(String[] args)這里運行它們的方法(只是方便各位理解)

然后在里面再用一個@Test注解就可以寫方法,去運行外面那些接口、類的方法爽一下了

但是我們學java時學過,接口的方法是不能直接調用重寫的,只有接口的實現類(public class 實現類?implements 接口)才能重寫調用接口的抽象方法

但是我們之前寫那個接口時有一個@Mapper注解,一旦有它,就會自動生成一個接口實現對象,并放到IOC容器

那就只用加一個注入依賴的注解就可以用了

這講得什么亂七八糟的屌東西

不知道的先死去看前面spring boot的《分層解耦》里的“控制反轉”和“依賴注入”的內容去,我也有寫:后端之路第二站(正片)——SprintBoot之:分層解耦_后端分層-CSDN博客? ? ? ? ? ? ??

簡單說就是:我這個文章的意思 “控制反轉” 就是只要給一個接口實現類加上【@Component】這個注解,他就會流向IOC容器被管理

然后 “依賴注入” 就是:誰要用它就用【@Autowired】這個注解,然后就可直接創建這個接口實現類的實例對象,然后調用對象的方法......

那么【@Component】是用與接口實現類的,而我們這里【@Mapper】這個注解直接是用在接口的,都不用再寫接口實現類了,直接自動生成了一個它的接口實現類

那么直接再加一個【@Autowired】注解,就可以創建這個接口實現類的實例對象,然后調用對象的方法就行了!

import com.czm.mybatis01.mapper.UsrMapper;
import com.czm.mybatis01.table.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest //springboot整合單元測試的注解
class Mybatis01ApplicationTests {//使用@Autowired注解可以【依賴注入】,直接創建UserMapper接口的實例化對象//可以理解為跳過了【創建實現接口類】這一步,spring boot幫我們創建好了一個@Autowiredprivate UsrMapper userMapper;@Testpublic void testUserMapper(){//在這里調用UserMapper接口的抽象方法:list()List<User> userList = userMapper.list();//然后把list()執行完sql語句的結果返回值循環輸出,這里用的是stream流的方法userList.stream().forEach(user -> {System.out.println(user);});}
}

這里解釋一下stream流,我也是今天看黑馬視頻第一次看到,了解了一下這還是一個蠻吊的方法

舉個例子:現在有下圖這么一個集合,要獲得一個既姓張又是長度為3的名字集合,要先把姓張的過濾存到新集合,再過濾長度為3的到一個新集合,再輸出

那么用stream流可以直接根據條件、疊加、一次性執行完三次操作

語法就是【集合.stream().方法1().方法2().方法3().方法4()......】

然后.filter(變量 -> 變量.條件()):根據條件過濾留下

.forEach(變量 -> 干啥):循環

最后!!!我們運行試一下

這里又發現了大量瘋狂恐怖要人命要死人的刺眼的紅色報錯,幾萬行的報錯,我都他嗎的無奈了

檢查這幾點:

1、連接的四要素配置錯了沒,錯一點都不行

2、表名字一樣不,java里User類的成員跟數據庫的user表的字段能對應上不?

3、最后啥都沒問題的話!!!重要!!!我不說你到死都不會知道是為什么,不信你就耗著

去數據庫的控制臺執行這一個語句:

SET GLOBAL time_zone = '+00:00';

然后就正常了

你就學這個b后端吧,一學一個不吱聲

下一篇講:進階操作數據庫

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

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

相關文章

【linux/shell案例實戰】shell界面命令快捷鍵

快捷鍵及含義&#xff1a; Ctrl&#xff0b;u剪切光標之前的內容。Ctul&#xff0b;k剪切光標之后的內容。Ctrl&#xff0b;e讓光標移動到命令最前&#xff0c;Ctrl&#xff0b;a讓光標移動到命令最后Ctrl&#xff0b;y 粘貼剛才所刪除的內容。Ctrl&#xff0b;d 刪除光標所在…

GPT-5:AI的博士時代與我們的未來

目錄 引言第一部分&#xff1a;GPT-5技術突破預測1. NLP技術的革新1.1 算法進步對理解力提升的影響1.2 技術突破推動行業發展 2. 行業推動力2.1 教育行業的變革2.2 醫療行業的創新2.3 法律行業的效率提升 第二部分&#xff1a;智能系統與人類的協作1. 輔助決策的角色1.1 決策支…

游戲AI的創造思路-技術基礎-sigmoid函數詳解

在前面的機器學習和深度學習的內容中&#xff0c;大量出現了sigmoid函數&#xff0c;所以本篇為大家介紹下sigmoid函數&#xff0c;希望對大家理解前面的算法和后面的Transformer有所幫助 目錄 3.8. sigmoid函數 3.8.1. 定義 3.8.2. 性質 3.8.3. 應用 3.8.4. 缺點 3.8.5.…

Flutter實現頁面間傳參

帶參跳轉 步驟 在router中配置這個路由需要攜帶的參數,這里的參數是 arguments,注意要用花括號包裹參數名稱 在相應組件中實現帶參構造函數 在state類中可以直接使用${widget.arguments}來訪問到傳遞的參數 在其他頁面中使用Navigator.pushNamed()帶參跳轉

【昇思初學入門】第八天打卡-模型保存與加載

模型保存與加載 學習心得 保存 CheckPoint 格式文件&#xff0c;在模型訓練過程中&#xff0c;可以添加檢查點(CheckPoint)用于保存模型的參數&#xff0c;以便進行推理及再訓練使用。如果想繼續在不同硬件平臺上做推理&#xff0c;可通過網絡和CheckPoint格式文件生成對應的…

C++中常用的標志庫

標準庫 C標準庫是一個強大的工具集&#xff0c;它包含了一組豐富的類和函數&#xff0c;可以幫助開發者進行各種操作&#xff0c;如輸入輸出、字符串操作、數據結構管理、算法實現等。以下是一些常用的C標準庫及其使用方法。 1. 輸入輸出庫 <iostream> 用于標準輸入輸…

2024年最新通信安全員考試題庫

61.架設架空光纜&#xff0c;可使用吊板作業的情況是&#xff08;&#xff09;。 A.在2.2/7規格的電桿與墻壁之間的吊線上&#xff0c;吊線高度5m B.在2.2/7規格的墻壁與墻壁之間的吊線上&#xff0c;吊線高度6m C.在2.2/7規格的電桿與電桿之間的吊線上&#xff0c;吊線高度…

[leetcode]24-game

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:static constexpr int TARGET 24;static constexpr double EPSILON 1e-6;static constexpr int ADD 0, MULTIPLY 1, SUBTRACT 2, DIVIDE 3;bool judgePoint24(vector<int> &nums) {vector&l…

【C++LeetCode】【熱題100】三數之和【中等】-不同效率的題解【6】

題目&#xff1a; 暴力方法&#xff1a; class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;std::unordered_set<std::string> uniqueValues;//保證結果唯一for(int i0;i<n…

工商業儲能柜用的Acrel-2000ES儲能能量管理系統-安科瑞 蔣靜

概述 Acrel-2000ES儲能能量管理系統&#xff0c;專門針對工商業儲能柜、儲能集裝箱研發的一款儲能EMS&#xff0c;具有完善的儲能監控與管理功能,涵蓋了儲能系統設備(PCS、BMS、電表、消防、空調等)的詳細信息&#xff0c;實現了數據采集、數據處理、數據存儲、數據查詢與分析…

PHP米表域名出售管理源碼帶后臺

源碼介紹 html5米表源碼PHP域名銷售程序安裝方法&#xff1a; 本站已測試,各項功能正常,功能易用,不復雜,非常適合個人米表使用 1、所有文件傳至網站目錄 2、瀏覽器執行http://你的訪問網址/install 3、輸入mysql帳號及密碼信息&#xff0c;提交安裝 源碼截圖 源碼下載 …

MySQL程序使用的選項文件

MySQL程序使用的選項文件如下&#xff1a; 顯示幫助消息并退出。 在具有多個網絡接口的計算機上&#xff0c;使用此選項可以選擇用于連接MySQL服務器的接口。 安裝字符集的目錄。 如果可能&#xff0c;壓縮客戶端和服務器之間發送的所有信息。 從MySQL 8.0.18開始&#xff0c;…

GPOPS-II教程(3): 航天器最優控制問題

文章目錄 問題描述GPOPS代碼main functioncontinuous functionendpoint function完整代碼代碼仿真結果 最后 問題描述 例子出自論文 Direct solution of nonlinear optimal control problems using quasilinearization and Chebyshev polynomials&#xff08;DOI&#xff1a;1…

新手選擇代理IP時這幾點誤區一定要避開!

在選擇代理IP時&#xff0c;許多用戶可能會因為對代理IP的認識不足或受到一些誤導&#xff0c;而陷入一些常見的誤區。這些誤區不僅可能導致用戶無法達到預期的效果&#xff0c;還可能帶來一些不必要的風險。下面&#xff0c;IPIDEA代理IP就與大家一同分析在選擇代理IP時需要避…

國企:2024年6月中國鐵路相關招聘信息,6.27截止

中國鐵路濟南局集團有限公司2024年度 招聘普通高校本科及以上學歷畢業生公告(三) 中國鐵路濟南局集團有限公司根據企業發展需要,擬招聘普通高等院校本科及以上學歷畢業生,現將有關事項公告如下: 一、招聘計劃 本次招聘崗位均為生產一線操作技能崗位,具體崗位、專業要求…

【教資優秀作文】

目錄 不沉湎于過去&#xff0c; 向未來進發 轉變思維方式&#xff0c;風景這邊獨好 一英尺的距離 面對逆境&#xff0c;智者生存 機遇與準備 1. 巴西足球名將貝利在足壇初露鋒芒時 &#xff0c;一個記者問他&#xff1a;“你哪一個球踢得最好&#xff1f; ” 他回答說&am…

說說ThreadLocal的實現原理

ThreadLocal是什么&#xff1f; ThreadLocal是Java中的一個類&#xff0c;用于創建線程局部變量和解決線程安全。每個線程都有自己獨立的變量副本&#xff0c;彼此之間互不影響。它的主要作用是在多線程環境下&#xff0c;確保每個線程都有自己的變量實例&#xff0c;避免了變…

Retrofit類型安全的HTTP客戶端庫(json)

簡介 Retrofit是Square公司開發的一個類型安全的HTTP客戶端庫&#xff0c;用于Android和Java平臺&#xff0c;它使得與Web服務的交互變得更加簡單快捷。Retrofit將HTTP API轉換成Java接口&#xff0c;讓你可以用更簡潔的代碼形式調用RESTful API&#xff0c;Android網絡編程重點…

在前端開發過程中如果函數參數很多,該如何精簡

1. 在前端開發過程中如果函數參數很多&#xff0c;該如何精簡 1.1. 對象參數&#xff08;對象字面量&#xff09;&#xff1a;1.2. 默認參數和解構賦值&#xff1a;1.3. 使用類或構造函數&#xff1a;1.4. 利用閉包或者高階函數&#xff1a;1.5. 利用ES6的擴展運算符&#xff1…

【LeetCode】每日一題:反轉鏈表

題解思路 循環的方法需要注意prev應該是None開始&#xff0c;然后到結束的時候prev是tail&#xff0c;遞歸的思路很難繞過彎來&#xff0c;主要在于很難想清楚為什么可以返回尾節點&#xff0c;需要多做遞歸題&#xff0c;以及遞歸過程中&#xff0c;可以不使用尾節點來找當前…