MyBatis深入分析數(shù)據(jù)庫交互與關(guān)系映射
前言
在應(yīng)用分層學(xué)習(xí)時,我們了解到web應(yīng)用程序?般分為三層,即:Controller、Service、Dao.之前的案例中,請求流程如下:瀏覽器發(fā)起請求,先請求Controller,Controller接收到請求之后,調(diào)用Service進(jìn)行業(yè)務(wù)邏輯處理,Service再調(diào)用Dao,真實(shí)的數(shù)據(jù)從數(shù)據(jù)庫中是讀取.
什么是MyBatis
MyBatis是?款優(yōu)秀的持久層框架,用于簡化JDBC的開發(fā)。
在上面我們提到?個詞:持久層
持久層:指的就是持久化操作的層,通常指數(shù)據(jù)訪問層(dao),是用來操作數(shù)據(jù)庫的.

簡單來說:MyBatis是更簡單完成程序和數(shù)據(jù)庫交互的框架,也就是更簡單的操作和讀取數(shù)據(jù)庫工具
Mybatis操作數(shù)據(jù)庫的步驟:
- 準(zhǔn)備工作(創(chuàng)建springboot工程、數(shù)據(jù)庫表準(zhǔn)備、實(shí)體類
- 引入Mybatis的相關(guān)依賴,配置Mybatis(數(shù)據(jù)庫連接信息)
- 編寫SQL語句(注解/XML)
- 測試
MyBatis準(zhǔn)備工作
(創(chuàng)建工程、數(shù)據(jù)庫表準(zhǔn)備、實(shí)體類)
創(chuàng)建springboot工程,并導(dǎo)入mybatis的起步依賴、mysql的驅(qū)動包

Mybatis是?個持久層框架,具體的數(shù)據(jù)存儲和數(shù)據(jù)操作還是在MySQL中操作的,所以需要添加MySQL驅(qū)動
項(xiàng)目工程創(chuàng)建完成后,項(xiàng)目管理器會自動在pom.xml?件中,導(dǎo)入Mybatis依賴和MySQL驅(qū)動依賴
配置數(shù)據(jù)庫
Mybatis中要連接數(shù)據(jù)庫,需要數(shù)據(jù)庫相關(guān)參數(shù)配置
- MySQL驅(qū)動類
- 登錄名
- 密碼
- 數(shù)據(jù)庫連接字符串
如果是application.yml?件,配置內(nèi)容如下:(一定要注意空格和對齊,沒對齊就報(bào)錯,直接進(jìn)行Copy即可,手寫極其容易出錯)
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=false
username: root
password: 232122
driver-class-name: com.mysql.cj.jdbc.Driver
mvc:
favicon:
enable: false
profiles:
active: devmybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: truelogging:
file:
name: logs/springboot.log
logback:
rollingpolicy:
max-file-size: 1KB
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
level:
com:
example:
demo: debug

如果是application.properties?件,配置內(nèi)容如下:
#驅(qū)動類名稱
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#數(shù)據(jù)庫連接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false#連接數(shù)據(jù)庫的用戶名
spring.datasource.username=root#連接數(shù)據(jù)庫的密碼
spring.datasource.password=root
編寫SQL語句(注解/XML)
數(shù)據(jù)準(zhǔn)備
在自己的數(shù)據(jù)庫中,創(chuàng)建用戶表,并創(chuàng)建對應(yīng)的實(shí)體類User
代碼如下:(直接進(jìn)行Copy即可,手寫太過麻煩)
-- 創(chuàng)建數(shù)據(jù)庫 DROP DATABASE IF EXISTS mybatis_test; CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4; -- 使用數(shù)據(jù)數(shù)據(jù) USE mybatis_test; -- 創(chuàng)建表[用戶表] DROP TABLE IF EXISTS userinfo; CREATE TABLE `userinfo` ( `id` INT ( 11 ) NOT NULL AUTO_INCREMENT, `username` VARCHAR ( 127 ) NOT NULL, `password` VARCHAR ( 127 ) NOT NULL, `age` TINYINT ( 4 ) NOT NULL, `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-? 0-默認(rèn)', `phone` VARCHAR ( 15 ) DEFAULT NULL, `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-刪除', `create_time` DATETIME DEFAULT now(), `update_time` DATETIME DEFAULT now(), PRIMARY KEY ( `id` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; -- 添加用戶信息 INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone ) VALUES ( 'admin', 'admin', 18, 1, '18612340001' ); INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone ) VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' ); INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone ) VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' ); INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone ) VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );
創(chuàng)建對應(yīng)的實(shí)體類UserInfo,實(shí)體類的屬性名與表中的字段名??對應(yīng)
例如:數(shù)據(jù)庫的字段名是user_name,在idea中我們就要創(chuàng)建userName的變量來接收,前面我們已經(jīng)導(dǎo)入了駝峰自動轉(zhuǎn)換,所以不必?fù)?dān)心在數(shù)據(jù)庫交互時的連接問題
import lombok.Data;
import java.util.Date;
@Data
public class UserInfo {
private Integer id;
private String username;
private String password;
private Integer age;
private Integer gender;
private String phone;
private Integer deleteFlag;
private Date createTime;
private Date updateTime;
}寫持久層代碼
Mybatis的持久層接?規(guī)范?般都叫XxxMapper
@Mapper注解:表示是MyBatis中的Mapper接?
- 程序運(yùn)行時,框架會自動生成接?的實(shí)現(xiàn)類對象(代理對象),并給交Spring的IOC容器管理
- @Select注解:代表的就是select查詢,也就是注解對應(yīng)方法的具體實(shí)現(xiàn)內(nèi)容.
在上面的測試中,我們需要創(chuàng)建持久層接?UserInfoMapper
import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserInfoMapper {
//查詢所有用戶
@Select("select username, `password`, age, gender, phone from userinfo")
public List<UserInfo> queryAllUser();
}上述代碼中我是使用了一個xml的方式(就是加注解)來操作數(shù)據(jù)庫的
測試
使用Idea自動生成測試類
在需要測試的Mapper接?中,右鍵->Generate->Test

選擇要測試的方法,點(diǎn)擊OK

書寫測試代碼
import com.example.demo.model.UserInfo;
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//注意,此處的SpringBootTest必須填上,它是為了引入前面所寫代碼引入的注解
class UserInfoMapperTest {
@Autowired
private UserInfoMapper userInfoMapper;
@Test
void queryAllUser() {
List<UserInfo> userInfoList = userInfoMapper.queryAllUser();
System.out.println(userInfoList);
}
}總結(jié)
Mybatis操作數(shù)據(jù)庫的步驟:
- 準(zhǔn)備工作(創(chuàng)建springboot工程、數(shù)據(jù)庫表準(zhǔn)備、實(shí)體類)
- 引入Mybatis的相關(guān)依賴,配置Mybatis(數(shù)據(jù)庫連接信息)
- 編寫SQL語句(注解/XML)
- 測試
以上就是MyBatis深入分析數(shù)據(jù)庫交互與關(guān)系映射的詳細(xì)內(nèi)容,更多關(guān)于MyBatis數(shù)據(jù)庫交互的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Maven中央倉庫發(fā)布的實(shí)現(xiàn)方法
最近做了個項(xiàng)目,希望能夠上傳到maven中央倉庫,給更多的人使用,于是就產(chǎn)生了這次項(xiàng)目發(fā)布經(jīng)歷。感興趣的可以一起來參考一下2021-06-06
Java之如何讀取Excel獲取真實(shí)行數(shù)
這篇文章主要介紹了Java之如何讀取Excel獲取真實(shí)行數(shù)問題,具有很好的參考價值,希望對大家有所幫助。2023-06-06
springboot的實(shí)體類字段校驗(yàn)的分組校驗(yàn)具體實(shí)現(xiàn)步驟
分組校驗(yàn)允許在不同場景下對同一實(shí)體類應(yīng)用不同的校驗(yàn)規(guī)則,通過定義分組接口、在實(shí)體類和Controller中指定分組,以及全局異常處理,可以靈活控制校驗(yàn)規(guī)則,本文介紹springboot的實(shí)體類字段校驗(yàn)的分組校驗(yàn),感興趣的朋友一起看看吧2025-03-03
詳解elasticsearch實(shí)現(xiàn)基于拼音搜索
這篇文章主要為大家介紹了詳解elasticsearch實(shí)現(xiàn)基于拼音搜索示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
通過idea創(chuàng)建Spring Boot項(xiàng)目并配置啟動過程圖解
這篇文章主要介紹了通過idea創(chuàng)建Spring Boot項(xiàng)目并配置啟動過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
Docker與Kubernetes部署Java應(yīng)用容器化實(shí)踐指南
容器化是一種將應(yīng)用程序及其依賴打包成一個可移植的單元的方法,容器能夠在任何環(huán)境中運(yùn)行,并且具有隔離性、可擴(kuò)展性和高效性,這篇文章主要介紹了Docker與Kubernetes部署Java應(yīng)用容器化實(shí)踐指南的相關(guān)資料2026-05-05
詳解使用Mybatis-plus + velocity模板生成自定義的代碼
這篇文章主要介紹了詳解使用Mybatis-plus + velocity模板生成自定義的代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

