欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis?Web中的數(shù)據(jù)庫操作方法舉例詳解

 更新時間:2024年09月05日 09:58:28   作者:科馬  
Mybatis是一款優(yōu)秀的持久化框架,用于簡化JDBC的開發(fā),下面這篇文章主要給大家介紹了關(guān)于Mybatis?Web中數(shù)據(jù)庫操作方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

MyBatis 是一個流行的持久層框架,主要用于簡化 Java 應(yīng)用程序中對數(shù)據(jù)庫的訪問。與傳統(tǒng)的 JDBC(Java Database Connectivity)相比,MyBatis 提供了更高層次的抽象,幫助開發(fā)者更方便地進(jìn)行數(shù)據(jù)庫操作。

工作機(jī)制

MyBatis 的執(zhí)行流程是指在一個完整的數(shù)據(jù)庫操作中,MyBatis 如何從接收到用戶請求到最終執(zhí)行 SQL 并返回結(jié)果的整個過程。以下是 MyBatis 的典型執(zhí)行流程:

1. 加載配置文件:

  • 加載主配置文件(mybatis-config.xml): MyBatis 在啟動時會加載主配置文件,這個文件定義了數(shù)據(jù)庫連接池、事務(wù)管理器、以及其他全局設(shè)置。
  • 加載映射文件(Mapper XML): 映射文件通常包括 SQL 語句及其與 Java 對象的映射關(guān)系。

2. 創(chuàng)建 SqlSessionFactory:

  • MyBatis 使用配置文件中的信息創(chuàng)建 SqlSessionFactory 對象。這個工廠對象是創(chuàng)建 SqlSession 實(shí)例的入口,每個 SqlSession 實(shí)例都表示一個與數(shù)據(jù)庫的會話。

3. 獲取 SqlSession:

  • 使用 SqlSessionFactory 來獲取 SqlSession 對象。SqlSession 是執(zhí)行 SQL 語句的核心接口,它提供了執(zhí)行增刪改查操作的方法。

4. 獲取 Mapper 接口:

  • SqlSession 提供了獲取 Mapper 接口實(shí)例的方法,MyBatis 會動態(tài)生成該接口的實(shí)現(xiàn)類。Mapper 是 MyBatis 的核心組件,它將接口方法映射到具體的 SQL 語句。

5. 執(zhí)行 SQL 語句:

  • 調(diào)用 Mapper 接口方法: 你可以通過調(diào)用 Mapper 接口的方法來執(zhí)行對應(yīng)的 SQL 語句。MyBatis 會根據(jù)方法簽名和參數(shù),自動匹配并執(zhí)行相應(yīng)的 SQL。
  • 參數(shù)處理: MyBatis 會將方法的參數(shù)傳遞給映射文件中定義的 SQL 語句,并對這些參數(shù)進(jìn)行必要的轉(zhuǎn)換和處理(如將對象的屬性值注入到 SQL 中)。

6. SQL 語句解析和執(zhí)行:

  • 動態(tài) SQL 解析: 如果 SQL 語句中包含動態(tài) SQL 元素(如 <if>、<foreach> 等),MyBatis 會根據(jù)實(shí)際傳入的參數(shù)對 SQL 進(jìn)行動態(tài)解析和生成。
  • SQL 執(zhí)行: 生成的 SQL 語句通過 MyBatis 的底層執(zhí)行器(Executor)提交給數(shù)據(jù)庫執(zhí)行。

7. 結(jié)果映射:

  • 結(jié)果集映射: 數(shù)據(jù)庫返回的結(jié)果集會被 MyBatis 自動映射為 Java 對象。映射規(guī)則由映射文件中的 <resultMap> 標(biāo)簽或注解指定,MyBatis 會根據(jù)這些配置將結(jié)果集轉(zhuǎn)換為預(yù)期的 Java 對象。
  • 結(jié)果處理: MyBatis 會將映射后的 Java 對象返回給調(diào)用者,通常是一個 POJO(Plain Old Java Object)或集合。

8. 事務(wù)管理:

  • MyBatis 支持事務(wù)管理,SqlSession 提供了手動提交和回滾事務(wù)的方法。在 SqlSession 關(guān)閉前,開發(fā)者可以選擇提交或回滾事務(wù)。

9. 關(guān)閉 SqlSession:

  • 在操作完成后,必須關(guān)閉 SqlSession,以釋放數(shù)據(jù)庫連接等資源。通常情況下,SqlSession 是在try-finally 代碼塊中使用,以確保在異常發(fā)生時資源能夠被正確釋放。

10. 返回結(jié)果:

  • 最終,SqlSession 返回結(jié)果給調(diào)用者,調(diào)用者可以直接使用這些映射后的 Java 對象。

總結(jié)來說,MyBatis 的執(zhí)行流程是從加載配置文件到生成 SQL、執(zhí)行 SQL,再到結(jié)果映射的一個完整過程。每一步都有相應(yīng)的組件和機(jī)制來保證 SQL 的正確執(zhí)行和結(jié)果的準(zhǔn)確返回。

與JDBC對比

相比于傳統(tǒng)的 JDBC,MyBatis 增加了豐富的功能,使得數(shù)據(jù)庫操作更加簡潔、靈活且易于維護(hù)。它將大量繁瑣的手動編碼工作自動化,并且提供了強(qiáng)大的配置、擴(kuò)展和管理能力,極大地提高了開發(fā)效率和代碼質(zhì)量。

  • 自動對象映射
  • 對象關(guān)系映射(ORM): MyBatis 能夠自動將 SQL 查詢結(jié)果映射為 Java 對象,或者將 Java 對象的屬性映射為 SQL 參數(shù)。這避免了在 JDBC 中手動處理結(jié)果集(ResultSet)和對象之間的映射。
  • ResultMap 配置: 通過 ResultMap,MyBatis 提供了強(qiáng)大的映射配置,允許你精確地定義數(shù)據(jù)庫字段與 Java 對象屬性之間的關(guān)系。
  • SQL 語句管理
  • SQL 分離: 在 MyBatis 中,SQL 語句通常被寫在 XML 文件或注解中,這樣可以將 SQL 語句與 Java 代碼分離,避免了在代碼中嵌入大量的 SQL 字符串,使代碼更加清晰和易于維護(hù)。
  • 動態(tài) SQL: MyBatis 提供了動態(tài) SQL 功能,允許你根據(jù)條件動態(tài)生成 SQL 語句。這比在 JDBC 中手動拼接 SQL 字符串更安全、更靈活,尤其在處理復(fù)雜查詢時非常有用。
  • 簡化的數(shù)據(jù)庫操作
  • 簡化 CRUD 操作: MyBatis 提供了非常簡潔的 API 來執(zhí)行常見的數(shù)據(jù)庫操作(增刪改查)。例如,你只需要調(diào)用一個 Mapper 方法就能執(zhí)行對應(yīng)的 SQL 操作,而不必像 JDBC 那樣手動編寫大量的代碼來執(zhí)行這些操作。
  • 批量操作支持: MyBatis 對批量插入、更新、刪除提供了很好的支持,這在 JDBC 中通常需要額外處理。
  • 配置與管理
  • 配置管理: MyBatis 通過 XML 或注解的方式集中管理 SQL 語句、數(shù)據(jù)庫連接信息等配置,使得配置更加集中化、規(guī)范化。
  • 事務(wù)管理: MyBatis 提供了內(nèi)置的事務(wù)管理功能,能夠更方便地控制事務(wù)的提交和回滾,而不需要在每個數(shù)據(jù)庫操作中手動管理事務(wù)。
  • 插件機(jī)制
  • 插件擴(kuò)展: MyBatis 提供了插件機(jī)制,允許開發(fā)者在執(zhí)行 SQL 語句的各個階段(如執(zhí)行前、執(zhí)行后、結(jié)果處理等)插入自定義邏輯。這使得你可以輕松地?cái)U(kuò)展 MyBatis 的功能,比如實(shí)現(xiàn)自定義的日志記錄、性能監(jiān)控等。
  • 支持注解
  • 注解支持: 除了 XML 配置,MyBatis 還支持使用 Java 注解來定義 SQL 語句和映射關(guān)系,這使得配置更加靈活,減少了 XML 的使用。
  • 靈活的查詢和緩存機(jī)制
  • 嵌套查詢與關(guān)聯(lián)查詢: MyBatis 支持嵌套查詢和關(guān)聯(lián)查詢,能夠處理復(fù)雜的數(shù)據(jù)關(guān)系,并將結(jié)果集映射到嵌套的 Java 對象中。
  • 二級緩存: MyBatis 提供了二級緩存機(jī)制,允許你在同一個 SqlSession 中緩存查詢結(jié)果,提高應(yīng)用性能。
  • 更好的錯誤處理
  • 錯誤處理: MyBatis 提供了更好的錯誤處理機(jī)制,包括詳細(xì)的錯誤日志和異常處理能力,能夠幫助開發(fā)者快速定位和解決問題。而在 JDBC 中,錯誤信息通常較為粗糙,調(diào)試較為困難。
  • 易于與其他框架集成
  • Spring 集成: MyBatis 與 Spring 框架無縫集成,能夠利用 Spring 的事務(wù)管理和依賴注入功能,簡化應(yīng)用程序的開發(fā)。

三個顯著特點(diǎn)

  • SQL映射
  • 動態(tài)SQL
  • 對象關(guān)系映射(ORM)支持

我們將用一個簡單的代碼演示,來理解這三個特點(diǎn)
以下是一個簡單的示例,展示了MyBatis的基本用法和特點(diǎn),包括SQL映射、動態(tài)SQL以及對象關(guān)系映射。

代碼示例

1. 配置MyBatis

首先,你需要一個MyBatis的配置文件(mybatis-config.xml),來配置數(shù)據(jù)庫連接和其他參數(shù)。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//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/mybatis_demo"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

2. 創(chuàng)建數(shù)據(jù)庫表

創(chuàng)建一個簡單的用戶表作為示例。

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(50)
);

3. 創(chuàng)建POJO類

定義一個與數(shù)據(jù)庫表對應(yīng)的Java類User。

public class User {
    private int id;
    private String name;
    private String email;

    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

4. 編寫Mapper接口

MyBatis中Mapper接口用于定義與數(shù)據(jù)庫操作相關(guān)的方法。

public interface UserMapper {
    User getUserById(int id);
    List<User> getAllUsers();
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

5. 編寫SQL映射文件

UserMapper.xml用于定義SQL語句并將它們映射到Mapper接口的方法上。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="UserMapper">

    <select id="getUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <select id="getAllUsers" resultType="User">
        SELECT * FROM users
    </select>

    <insert id="insertUser" parameterType="User">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>

    <update id="updateUser" parameterType="User">
        UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>

    <delete id="deleteUser">
        DELETE FROM users WHERE id = #{id}
    </delete>

</mapper>

6. 使用MyBatis進(jìn)行數(shù)據(jù)庫操作

編寫主程序來演示如何使用MyBatis執(zhí)行數(shù)據(jù)庫操作。

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.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisExample {
    public static void main(String[] args) throws IOException {
        // 1. 讀取MyBatis配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2. 獲取SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);

            // 3. 插入新用戶
            User newUser = new User();
            newUser.setName("John Doe");
            newUser.setEmail("john.doe@example.com");
            mapper.insertUser(newUser);
            session.commit(); // 提交事務(wù)

            // 4. 查詢所有用戶
            List<User> users = mapper.getAllUsers();
            users.forEach(user -> System.out.println(user.getName() + ": " + user.getEmail()));

            // 5. 更新用戶
            User existingUser = users.get(0);
            existingUser.setName("Jane Doe");
            mapper.updateUser(existingUser);
            session.commit();

            // 6. 刪除用戶
            mapper.deleteUser(existingUser.getId());
            session.commit();
        }
    }
}

解釋:

  • SQL 映射: SQL語句直接寫在XML文件中,并通過Mapper接口映射到方法上。
  • 對象關(guān)系映射: User對象與數(shù)據(jù)庫中的記錄相對應(yīng),MyBatis自動將查詢結(jié)果映射為User對象。
  • 動態(tài)SQL: 在復(fù)雜查詢中可以使用動態(tài)SQL標(biāo)簽(未在此示例中展示),比如<if><foreach>等。

到此這篇關(guān)于Mybatis Web中數(shù)據(jù)庫操作方法的文章就介紹到這了,更多相關(guān)Mybatis Web數(shù)據(jù)庫操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java算法之時間復(fù)雜度和空間復(fù)雜度的概念和計(jì)算

    Java算法之時間復(fù)雜度和空間復(fù)雜度的概念和計(jì)算

    這篇文章主要介紹了Java算法之時間復(fù)雜度和空間復(fù)雜度的概念和計(jì)算,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java 類加載機(jī)制詳細(xì)介紹

    Java 類加載機(jī)制詳細(xì)介紹

    這篇文章主要介紹了Java 類加載機(jī)制詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • ThreadLocal原理及內(nèi)存泄漏原因

    ThreadLocal原理及內(nèi)存泄漏原因

    這篇文章主要介紹了ThreadLocal原理及內(nèi)存泄漏原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • swagger2隱藏在API文檔顯示某些參數(shù)的操作

    swagger2隱藏在API文檔顯示某些參數(shù)的操作

    這篇文章主要介紹了swagger2隱藏在API文檔顯示某些參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot中服務(wù)消費(fèi)的實(shí)現(xiàn)

    SpringBoot中服務(wù)消費(fèi)的實(shí)現(xiàn)

    本文主要介紹了SpringBoot中服務(wù)消費(fèi)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java并發(fā)編程多線程間的同步控制和通信詳解

    Java并發(fā)編程多線程間的同步控制和通信詳解

    這篇文章主要為大家介紹了Java并發(fā)編程多線程間的同步控制和通信詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • java?百度手寫文字識別接口配置代碼

    java?百度手寫文字識別接口配置代碼

    本文通過實(shí)例代碼給大家介紹了java?百度手寫文字識別接口配置方法,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-01-01
  • Java實(shí)現(xiàn)開箱即用的redis分布式鎖

    Java實(shí)現(xiàn)開箱即用的redis分布式鎖

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)開箱即用的基于redis的分布式鎖,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以收藏一下
    2022-12-12
  • springboot2.x引入feign踩的坑及解決

    springboot2.x引入feign踩的坑及解決

    這篇文章主要介紹了springboot2.x引入feign踩的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 手把手教你如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)

    手把手教你如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)

    這篇文章主要介紹了關(guān)于如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01

最新評論