最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis核心概念?+?環(huán)境搭建?+?CRUD實戰(zhàn)詳解

 更新時間:2026年05月21日 10:18:43   作者:MandalaO_O  
文章主要介紹了MyBatis的核心知識,從JDBC痛點開始,闡述了MyBatis的優(yōu)勢,包括連接池管理、SQL與Java代碼解耦、自動結果集映射、參數(shù)自動映射等,感興趣的朋友跟隨小編一起看看吧

一、簡介

本文適合 Java 開發(fā)初學者,從零梳理 MyBatis 核心知識,包含環(huán)境搭建、配置詳解、CRUD 實戰(zhàn)、常見避坑,可直接用于學習、復習與項目開發(fā)。

二、MyBatis 基礎概念與環(huán)境搭建

1. JDBC 痛點與 MyBatis 優(yōu)勢

在學習 MyBatis 之前,我們先回顧傳統(tǒng)JDBC 開發(fā)的缺陷,這也是 MyBatis 誕生的核心原因。

JDBC 操作缺陷

  1. 資源頻繁創(chuàng)建與釋放,嚴重影響性能每次操作數(shù)據(jù)庫都需要創(chuàng)建 Connection、Statement,用完直接關閉,頻繁 IO 造成資源浪費。
  2. SQL 硬編碼,維護成本極高SQL 語句直接寫在 Java 代碼中,修改 SQL 必須重新編譯、打包、部署,無法靈活配置。
  3. 結果集解析繁瑣,手動封裝冗余查詢返回 ResultSet 后,需要手動getXxx()取值、手動 set 到實體類,代碼量大且易出錯。
  4. 代碼冗余,開發(fā)效率低下連接、參數(shù)設置、結果解析大量重復代碼,不符合開發(fā)規(guī)范。

典型 JDBC 冗余代碼:

// 1. 加載驅動、建立連接
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, pwd);
// 2. 編寫SQL(硬編碼)
String sql = "select * from user where id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
// 3. 設置參數(shù)
pstmt.setInt(1, id);
// 4. 執(zhí)行查詢
ResultSet rs = pstmt.executeQuery();
// 5. 手動封裝結果集
User user = null;
if(rs.next()){
    user = new User();
    user.setId(rs.getInt("id"));
    user.setUsername(rs.getString("username"));
}

MyBatis 優(yōu)勢與解決方案

MyBatis 是一款優(yōu)秀的持久層框架,底層依然基于 JDBC,但做了高度封裝:

  1. 連接池管理:避免頻繁創(chuàng)建 / 釋放連接,大幅提升性能;
  2. SQL 與 Java 代碼解耦:SQL 統(tǒng)一寫在 XML 配置文件中,修改無需編譯 Java;
  3. 自動結果集映射:自動將 ResultSet 封裝為實體對象,無需手動解析;
  4. 參數(shù)自動映射:支持簡單類型、實體類參數(shù),直接使用#{}占位符;
  5. 輕量級、學習成本低:相比 Hibernate,MyBatis 更靈活、可控性更強。

2. 項目環(huán)境配置

我們以Maven 項目為例,搭建標準 MyBatis 開發(fā)環(huán)境。

(1)Maven 依賴導入

pom.xml中導入核心依賴:MyBatis 核心包、MySQL 驅動、日志包、Junit 測試

<dependencies>
    <!-- MyBatis核心依賴 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
    <!-- MySQL驅動 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.49</version>
    </dependency>
    <!-- 日志包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <!-- 測試包 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

(2)MyBatis 核心配置文件(sqlMapConfig.xml)

resources目錄下創(chuàng)建核心配置文件,配置數(shù)據(jù)源、事務、加載映射文件

<?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>
    <!-- 環(huán)境配置:默認使用development -->
    <environments default="development">
        <environment id="development">
            <!-- 事務管理:JDBC事務 -->
            <transactionManager type="JDBC"/>
            <!-- 數(shù)據(jù)源:POOLED連接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="abc123"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 加載Mapper映射文件 -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

(3)項目標準結構

src/main/java
  com.qcby
    ├── dao/          DAO接口層
    ├── entity/       實體類
src/main/resources
  ├── mapper/         Mapper XML映射文件
  ├── sqlMapConfig.xml  MyBatis核心配置

三、核心配置與映射關系

1. 實體類與 Mapper 映射

MyBatis 實現(xiàn)自動封裝的前提:數(shù)據(jù)庫表 ↔ 實體類 嚴格映射。

(1)實體類編寫規(guī)范

  1. 類屬性名 與 數(shù)據(jù)庫表字段名完全一致;
  2. 必須提供無參構造;
  3. 必須生成getter/setter;
  4. 必須重寫toString() 方便測試打印。

User 實體類示例:

public class User {
    private Integer id;
    private String username;
    private String sex;
    private Date birthday;
    private String address;
    // 無參構造
    public User(){}
    // getter/setter
    // toString()
}

(2)DAO 接口與 XML 綁定規(guī)則

MyBatis 采用接口代理模式開發(fā),無需編寫實現(xiàn)類:

  1. 創(chuàng)建 DAO 接口(如UserDao.java);
  2. XML 文件通過namespace綁定接口全類名;
  3. XML 中 SQL 標簽的id 必須與 接口方法名完全一致;
  4. parameterType/resultType 與方法參數(shù)、返回值匹配。

接口示例:

public interface UserDao {
    List<User> findAll();
    User findUserById(Integer id);
}

XML 綁定示例:

<!-- namespace:綁定接口全限定名 -->
<mapper namespace="com.qcby.dao.UserDao">
    <!-- id:與接口方法名一致 -->
    <select id="findAll" resultType="com.qcby.entity.User">
        select * from user order by id desc
    </select>
</mapper>

2. 參數(shù)與結果映射

(1)參數(shù)傳遞(parameterType)

用于指定 SQL 入?yún)㈩愋?,支持?/p>

  • 基本類型:Integer、String
  • 實體類型:com.qcby.entity.User
  • 取值語法:#{屬性名} 安全占位符,防 SQL 注入

xml

<select id="findUserById" parameterType="Integer" resultType="com.qcby.entity.User">
    select * from user where id = #{id}
</select>

(2)結果集封裝(resultType)

指定 SQL 返回值類型:

  • 查詢單條數(shù)據(jù):直接寫實體類全類名
  • 查詢多條數(shù)據(jù):依然寫實體類,MyBatis 自動封裝為List<實體>

示例:查詢所有用戶xml

<select id="findAll" resultType="com.qcby.entity.User">
    select * from user
</select>

四、增刪改查(CRUD)實戰(zhàn)

1. 查詢操作(Select)

查詢是 MyBatis 最常用操作,分為全量查詢、精確查詢、模糊查詢。

(1)全量查詢 findAll

<select id="findAll" resultType="com.qcby.entity.User">
    select * from user order by id desc;
</select>

接口方法:

List<User> findAll();

(2)條件查詢:根據(jù) ID 查詢(單條結果)

<select id="findUserById" parameterType="Integer" resultType="com.qcby.entity.User">
    select * from user where id = #{id};
</select>

接口方法:

User findUserById(Integer id);

(3)模糊查詢:根據(jù)用戶名模糊匹配

重點:like 必須使用 concat 拼接,避免 SQL 注入

xml

<select id="findUserByUserName" parameterType="String" resultType="com.qcby.entity.User">
    select * from user where username like concat('%', #{username}, '%');
</select>

接口方法:

List<User> findUserByUserName(String username);

(4)字段映射異常處理

常見問題:查詢結果部分字段為null根本原因:實體類屬性名 ≠ 數(shù)據(jù)庫列名解決方案

  1. 統(tǒng)一名稱(推薦)
  2. 使用resultMap手動映射

2. 增刪改操作(Insert/Update/Delete)

增刪改屬于寫操作,必須注意:必須手動提交事務session.commit()。

(1)插入數(shù)據(jù) insert

<insert id="insert" parameterType="com.qcby.entity.User">
    insert into user(username,sex,birthday,address)
    values(#{username},#{sex},#{birthday},#{address});
</insert>

接口方法:

int insert(User user);

(2)修改數(shù)據(jù) update

必須傳入包含 id的實體對象

<update id="update" parameterType="com.qcby.entity.User">
    update user 
    set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address}
    where id=#{id};
</update>

(3)刪除數(shù)據(jù) delete

<delete id="delete" parameterType="Integer">
    delete from user where id=#{id};
</delete>

(4)事務提交機制

查詢不需要提交事務;增刪改必須提交!

@Test
public void addUser(){
    User user = new User();
    user.setUsername("張三");
    user.setSex("男");
    // 執(zhí)行插入
    userDao.insert(user);
    // 必須提交事務
    session.commit();
}

五、測試工具類(通用版)

為了簡化測試,可封裝 MyBatis 工具類:

public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            String resource = "sqlMapConfig.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 獲取SqlSession
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession(true); // 自動提交事務
    }
}

到此這篇關于MyBatis核心概念 + 環(huán)境搭建 + CRUD實戰(zhàn)詳解的文章就介紹到這了,更多相關mybatis環(huán)境搭建和crud內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在java8中使用流區(qū)分質數(shù)與非質數(shù)詳解

    在java8中使用流區(qū)分質數(shù)與非質數(shù)詳解

    這篇文章主要介紹了在java8中使用流區(qū)分質數(shù)與非質數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • SpringCloud2020 bootstrap 配置文件失效的解決方法

    SpringCloud2020 bootstrap 配置文件失效的解決方法

    這篇文章主要介紹了SpringCloud2020 bootstrap 配置文件失效的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • spring boot 部署為jar包的方法示例

    spring boot 部署為jar包的方法示例

    本篇文章主要介紹了spring boot 部署為jar的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java直接輸出對象變成@.....的問題及解決

    Java直接輸出對象變成@.....的問題及解決

    這篇文章主要介紹了Java直接輸出對象變成@.....的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 關于Java整合RocketMQ實現(xiàn)生產消費詳解

    關于Java整合RocketMQ實現(xiàn)生產消費詳解

    這篇文章主要介紹了關于Java整合RocketMQ實現(xiàn)生產消費詳解,RocketMQ作為一款純java、分布式、隊列模型的開源消息中間件,支持事務消息、順序消息、批量消息、定時消息、消息回溯等,需要的朋友可以參考下
    2023-05-05
  • Servlet中/和/*的區(qū)別詳解

    Servlet中/和/*的區(qū)別詳解

    本文將分析/和/*的區(qū)別這個老生常談的問題,但是很多時候看完就忘了,關于此問題這一篇文章就夠了,它將成為你的永久記憶,感興趣的可以了解一下
    2021-07-07
  • MyEclipse 2016 CI 4新增BootStrap模板

    MyEclipse 2016 CI 4新增BootStrap模板

    MyEclipse2016是一款全球使用最為廣泛的企業(yè)級開發(fā)環(huán)境程序,這篇文章主要介紹了MyEclipse 2016 CI 4新增BootStrap模板的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Spring為什么要用三級緩存解決循環(huán)依賴呢

    Spring為什么要用三級緩存解決循環(huán)依賴呢

    本文主要介紹了Spring如何使用三級緩存解決循環(huán)依賴問題,本文為了方便說明,先設置兩個業(yè)務層對象,命名為AService和BService,結合示例給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-01-01
  • MyBatis基礎支持DataSource實現(xiàn)源碼解析

    MyBatis基礎支持DataSource實現(xiàn)源碼解析

    這篇文章主要為大家介紹了MyBatis基礎支持DataSource實現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • JVM性能調優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

    JVM性能調優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

    這篇文章主要介紹了JVM性能調優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑的相關資料,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論

奉化市| 志丹县| 天峻县| 洛宁县| 吴忠市| 简阳市| 华宁县| 井冈山市| 红安县| 江山市| 亚东县| 怀化市| 乐清市| 三原县| 西昌市| 深水埗区| 浦江县| 武平县| 托里县| 双城市| 东丽区| 济南市| 东丰县| 宁化县| 修水县| 文登市| 当涂县| 肥东县| 武山县| 柳江县| 湘潭市| 壤塘县| 榆树市| 麻江县| 梧州市| 阿图什市| 柞水县| 惠州市| 鄂托克前旗| 饶河县| 深圳市|