MyBatis 如何使用

1. 環境準備
  1. 添加依賴(Maven)
    在?pom.xml?中添加 MyBatis 和數據庫驅動依賴:

    <dependencies><!-- MyBatis 核心庫 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!-- MySQL 驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>
    </dependencies>

? ? ? 2.創建數據庫表
? ? ? ? 示例用戶表?user:?

CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,email VARCHAR(100)
);

2. 配置文件

? mybatis-config.xml
? ? ? 配置數據源、事務管理器和映射文件路徑:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>

3. 實體類和Mapper接口
  1. 實體類?User.java

    public class User {private Integer id;private String name;private Integer age;private String email;// Getter和Setter方法省略
    }

? ? ? 2.Mapper接口?UserMapper.java?

public interface UserMapper {User selectUserById(Integer id);void insertUser(User user);void updateUser(User user);void deleteUser(Integer id);List<User> selectUsersByCondition(User user);
}

4. XML映射文件

? UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><!-- 結果映射 --><resultMap id="userResultMap" type="User"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/><result property="email" column="email"/></resultMap><!-- 查詢用戶 --><select id="selectUserById" resultMap="userResultMap">SELECT * FROM user WHERE id = #{id}</select><!-- 插入用戶 --><insert id="insertUser" parameterType="User">INSERT INTO user (name, age, email)VALUES (#{name}, #{age}, #{email})</insert><!-- 更新用戶 --><update id="updateUser" parameterType="User">UPDATE userSET name = #{name}, age = #{age}, email = #{email}WHERE id = #{id}</update><!-- 刪除用戶 --><delete id="deleteUser">DELETE FROM user WHERE id = #{id}</delete><!-- 動態SQL查詢 --><select id="selectUsersByCondition" resultMap="userResultMap">SELECT * FROM user<where><if test="name != null and name != ''">AND name LIKE CONCAT('%', #{name}, '%')</if><if test="age != null">AND age = #{age}</if></where></select>
</mapper>

5. 使用MyBatis API執行操作
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;
import java.util.List;public class MyBatisDemo {public static void main(String[] args) throws Exception {// 加載配置文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 獲取SqlSessiontry (SqlSession session = sqlSessionFactory.openSession()) {// 獲取Mapper接口實例UserMapper mapper = session.getMapper(UserMapper.class);// 插入用戶User newUser = new User();newUser.setName("張三");newUser.setAge(25);newUser.setEmail("zhangsan@example.com");mapper.insertUser(newUser);session.commit(); // 提交事務// 查詢用戶User user = mapper.selectUserById(1);System.out.println("查詢結果:" + user);// 動態查詢User condition = new User();condition.setName("張");List<User> users = mapper.selectUsersByCondition(condition);System.out.println("動態查詢結果:" + users);// 更新用戶user.setEmail("new_email@example.com");mapper.updateUser(user);session.commit();// 刪除用戶mapper.deleteUser(2);session.commit();}}
}

6. 動態SQL示例解析
  • <where>?標簽:自動處理條件前的?AND?或?OR,避免語法錯誤。

  • <if>?標簽:根據條件動態拼接 SQL 片段。

    <select id="selectUsersByCondition" resultMap="userResultMap">SELECT * FROM user<where><if test="name != null and name != ''">AND name LIKE CONCAT('%', #{name}, '%')</if><if test="age != null">AND age = #{age}</if></where>
    </select>


7. 緩存配置
  1. 開啟二級緩存
    在?UserMapper.xml?中添加?<cache/>?標簽:

    <mapper namespace="com.example.mapper.UserMapper"><cache/><!-- 其他SQL配置 -->
    </mapper>

? ? 2.實體類序列化
? ? ? ?確保?User?類實現?Serializable?接口:?

public class User implements Serializable {// 屬性和方法
}

8. 與Spring集成
  1. 添加MyBatis-Spring依賴

    <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version>
    </dependency>

? ? ?2.配置數據源
? ? ? ?在?application.properties?中配置:?

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456

? ? ?3.Mapper掃描
? ? ? ? 在啟動類添加?@MapperScan

@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

9. 常見問題解決

? ? 1.SQL注入風險

  • 使用?#{}?占位符代替字符串拼接(${})。

? ? 2.字段名與屬性名不一致

  • 使用?<resultMap>?顯式映射字段和屬性。

? ?3.事務管理

  • 在需要事務的方法上添加?@Transactional?注解。


總結

通過以上步驟,可以掌握MyBatis的基本使用,包括配置、CRUD操作、動態SQL、緩存及與Spring集成。實際開發中應結合具體需求,合理利用MyBatis的靈活性和強大功能,提升數據庫操作效率和代碼可維護性。

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

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

相關文章

ArkTS組件的三個通用(通用事件、通用屬性、通用手勢)

文章目錄 通用事件點擊事件 onClick觸摸事件 onTouch掛載、卸載事件拖拽事件按鍵事件 onKeyEvent焦點事件鼠標事件懸浮事件組件區域變化事件 onAreaChange組件尺寸變化事件組件可見區域變化事件組件快捷鍵事件自定義事件分發自定義事件攔截 通用屬性尺寸設置位置設置布局約束邊…

智慧城市像一張無形大網,如何緊密連接你我他?

智慧城市作為復雜巨系統&#xff0c;其核心在于通過技術創新構建無縫連接的網絡&#xff0c;使物理空間與數字空間深度融合。這張"無形大網"由物聯網感知層、城市數據中臺、人工智能中樞、數字服務入口和安全信任機制五大支柱編織而成&#xff0c;正在重塑城市運行規…

【python】django sqlite版本過低怎么辦

方法一&#xff1a;下載最新版本 復制上面的內容的鏈接 在服務器上進行操作 wget https://sqlite.org/2025/sqlite-autoconf-3490100.tar.gz tar -zxvf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefix/usr/local make && make in…

PyTorch - Tensor 學習筆記

上層鏈接&#xff1a;PyTorch 學習筆記-CSDN博客 Tensor 初始化Tensor import torch import numpy as np# 1、直接從數據創建張量。數據類型是自動推斷的 data [[1, 2],[3, 4]] x_data torch.tensor(data)torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])輸出&am…

【技術派后端篇】ElasticSearch 實戰指南:環境搭建、API 操作與集成實踐

1 ES介紹及基本概念 ElasticSearch是一個基于Lucene 的分布式、高擴展、高實時的基于RESTful 風格API的搜索與數據分析引擎。 RESTful 風格API的特點&#xff1a; 接受HTTP協議的請求&#xff0c;返回HTTP響應&#xff1b;請求的參數是JSON&#xff0c;返回響應的內容也是JSON…

從標準九九表打印解讀單行表達式的書寫修煉(Python)

解讀單行表達式書寫&#xff0c;了解修習單行捷徑。 筆記模板由python腳本于2025-04-16 23:24:17創建&#xff0c;本篇筆記適合喜歡單行喜好python的coder翻閱。 【學習的細節是歡悅的歷程】 博客的核心價值&#xff1a;在于輸出思考與經驗&#xff0c;而不僅僅是知識的簡單復述…

深入解析布爾注入:原理、實戰與防御

目錄 一、布爾注入的原理與核心邏輯 二、布爾注入的實戰步驟 三、關鍵函數與繞過技巧 四、實戰案例&#xff1a;獲取數據庫名稱 五、防御策略與最佳實踐 六、總結 一、布爾注入的原理與核心邏輯 布爾注入&#xff08;Boolean-Based Blind SQL Injection&#xff09;是一種…

OpenGL學習筆記(幾何著色器、實例化、抗鋸齒)

目錄 幾何著色器爆破物體法向量可視化 實例化&#xff08;偏移量存在uniform中&#xff09;實例化數組&#xff08;偏移量存在頂點屬性中&#xff09;小行星帶 抗鋸齒SSAA&#xff08;Super Sample Anti-aliasing&#xff09;MSAA&#xff08;Multi-Sampling Anti-aliasing&…

idea報錯java: 非法字符: ‘\ufeff‘解決方案

解決方案步驟以及說明 BOM是什么&#xff1f;1. BOM的作用2. 為什么會出現 \ufeff 錯誤&#xff1f;3. 如何解決 \ufeff 問題&#xff1f; 最后重新編譯&#xff0c;即可運行&#xff01;&#xff01;&#xff01; BOM是什么&#xff1f; \ufeff 是 Unicode 中的 BOM&#xff0…

open webui 介紹 是一個可擴展、功能豐富且用戶友好的本地部署 AI 平臺,支持完全離線運行。

AI MCP 系列 AgentGPT-01-入門介紹 Browser-use 是連接你的AI代理與瀏覽器的最簡單方式 AI MCP(大模型上下文)-01-入門介紹 AI MCP(大模型上下文)-02-awesome-mcp-servers 精選的 MCP 服務器 AI MCP(大模型上下文)-03-open webui 介紹 是一個可擴展、功能豐富且用戶友好的…

Log4j2遠程命令執行(CVE-2021-44228)復現

這里選擇使用vulfocue的靶場來進行復現 描述: Apache Log4j2 是一個基于 Java 的日志記錄工具。該工具重寫了 Log4j 框架&#xff0c;并且引入了大量豐富的特性。該日志框架被大量用于業務系統開發&#xff0c;用來記錄日志信息。 在大多數情況下&#xff0c;開發者可能會將用…

模型提示詞

一 提示詞 &#xff08;一&#xff09; 提示詞&#xff08;Prompt&#xff09;是用戶發送給大語言模型的問題、指令或請求&#xff0c;** 1 來明確地告訴模型用戶想要解決的問題或完成的任務&#xff0c;是大語言模型理解用戶需求并據此生成相關、準確回答或內容的基礎。對于…

深度學習算法:從基礎到實踐

簡介 深度學習作為人工智能領域的一個重要分支&#xff0c;近年來在多個領域取得了顯著的成就。本文將從基礎概念出發&#xff0c;探討深度學習算法的核心原理&#xff0c;并介紹一些實際應用案例。 深度學習算法的核心概念 深度學習算法基于人工神經網絡&#xff0c;通過構…

5.9 《GPT-4調試+測試金字塔:構建高可靠系統的5大實戰策略》

5.4 測試與調試:構建企業級質量的保障體系 關鍵詞:測試金字塔模型、GPT-4調試助手、LangChain調試模式、異步任務驗證 測試策略設計(測試金字塔實踐) #mermaid-svg-RblGbJVMnCIShiCW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill…

Visio繪圖工具全面科普:解鎖專業圖表繪制新境界[特殊字符]

Visio繪圖工具全面科普&#xff1a;解鎖專業圖表繪制新境界&#x1f31f; 在信息爆炸的時代&#xff0c;清晰、直觀地呈現復雜信息變得至關重要。無論是繪制流程圖&#x1f4ca;、組織結構圖&#x1f465;&#xff0c;還是規劃網絡拓撲&#x1f5a7;&#xff0c;一款強大的繪圖…

ShellScript腳本編程

語法基礎 腳本結構 我們先從這個小demo程序來窺探一下我們shell腳本的程序結構 #!/bin/bash# 注釋信息echo_str"hello world"test(){echo $echo_str }test echo_str 首先我們可以通過文本編輯器(在這里我們使用linux自帶文本編輯神器vim)&#xff0c;新建一個文件…

你了解哪些Java限流算法?

大家好&#xff0c;我是鋒哥。今天分享關于【你了解哪些Java限流算法?】面試題。希望對大家有幫助&#xff1b; 你了解哪些Java限流算法? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 在 Java 中&#xff0c;限流算法廣泛用于控制流量、避免過載和保護系統的穩…

prime-2 靶場筆記(vuInhub靶場)

前言&#xff1a; 在本次靶場環境中涉及的知識點&#xff0c;主要包含LFI和SMB以及Lxd組提權&#xff0c;具體內容包括主機探測、端口掃描、目錄掃描、wpscan掃描、反彈shell、一句話木馬、容器、linux各種提權和維持。 環境介紹&#xff1a; 本靶場使用了kali&#xff08;192…

SparseDrive---論文閱讀

純視覺下的稀疏場景表示 算法動機&開創性思路 算法動機&#xff1a; 依賴于計算成本高昂的鳥瞰圖&#xff08;BEV&#xff09;特征表示。預測和規劃的設計過于直接&#xff0c;沒有充分利用周圍代理和自我車輛之間的高階和雙向交互。場景信息是在agent周圍提取&#xff…

旅游特種兵迪士尼大作戰:DeepSeek高精準路徑優化

DeepSeek大模型高性能核心技術與多模態融合開發 - 商品搜索 - 京東 隨著假期的腳步日漸臨近&#xff0c;環球影城等備受矚目的主題游樂場&#xff0c;已然成為大人與孩子們心中不可或缺的節日狂歡圣地。然而&#xff0c;隨之而來的龐大客流&#xff0c;卻總讓無數游客在歡樂的…