入門MyBatis框架你一點都不需要慌

来源:https://www.cnblogs.com/ziph/archive/2020/07/11/13284496.html
-Advertisement-
Play Games

MyBatis項目已托管到GitHub,大家可以去GitHub查看下載!並搜索關註微信公眾號 碼出Offer 領取各種學習資料! 一、框架概述 1.1 什麼是框架? 軟體的半成品,解決了軟體開發過程當中的普適性問題,從而簡化了開發步驟,提供了開發的效率 1.2 什麼是ORM框架? ORM(Objec ...


MyBatis
MyBatis

項目已托管到GitHub,大家可以去GitHub查看下載!並搜索關註微信公眾號 碼出Offer 領取各種學習資料!

一、框架概述

1.1 什麼是框架?

軟體的半成品,解決了軟體開發過程當中的普適性問題,從而簡化了開發步驟,提供了開發的效率

1.2 什麼是ORM框架?

ORM(Object Relational Mapping)對象關係映射,將程式中的一個對象與表中的一行數據一一對應

ORM框架提供了持久化類與表的映射關係,在運行時參照映射文件的信息,把對象持久化到資料庫中

1.3 使用JDBC完成ORM的缺點

  • 存在大量的冗餘代碼

  • 手工創建 Connection、Statement 等

  • 手工將結果集封裝成實體對象

  • 查詢效率低,沒有對數據訪問進行過優化(Not Cache)

二、MyBatis概述

2.1 什麼是MyBatis

MyBatis本是Apache軟體基金會的一個開源項目iBatis,2010年這個項目由apache software foundation 遷移到了Google Code,並且改名為MyBatis。2013年11月遷移到Github。MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或註解來配置和映射原始類型、介面和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為資料庫中的記錄

2.2 官網

官方網站:http://www.mybatis.org/mybatis-3/

下載地址:https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.1

2.3 使用

關於對MyBatis的使用,我們創建的Maven項目是不需要下載MyBatis的,而是可以通過在Maven項目中的pom文件中添加MyBatis依賴使用!後續我會把MyBatis的開發流程奉上!

三、搭建MyBatis項目

3.1 創建一個Maven項目

File -> NewProject
image-20200711100406109
image-20200711100406109
創建Maven項目
image-20200711100511187
image-20200711100511187

3.2 導入MyBatis依賴

在pom.xml文件中添加MyBatis核心依賴和MyBatis Log(日誌)依賴

  • 核心依賴即是使用MyBatis必備依賴環境,必須導入
  • MyBatis Log(日誌)依賴可以查看MyBatis啟動的過程,便於我們糾錯、查Bug

註意: 記得把依賴放在<dependecies>標簽內,MyBatis必定是與資料庫交互的,所以也需要導入mysql驅動依賴

<!--MyBatis核心依賴-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>

<!--日誌依賴-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

<!--MySql驅動依賴-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

3.3 創建MyBatis配置文件

創建名為mybatis-config.xml配置文件並配置以下信息

註意: 目前mapper.xml預設建議存放在resources中,路徑不能以/開頭,後續我會補全到其他配置方法

<?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">

<!--MyBatis配置-->
<configuration>
    <!--JDBC環境配置、選中預設環境-->
    <environments default="MySqlDB">
        <!--MySql資料庫環境配置-->
        <environment id="MySqlDB">
            <!--事務管理-->
            <transactionManager type="JDBC"/>
            <!--連接池-->
            <dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- &轉義&amp; -->
                <property name="url" value="jdbc:mysql://localhost:3306/x?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--Mapper註冊-->
    <mappers>
        <!--註冊Mapper文件的所在位置-->
        <mapper resource="xxxMapper.xml"/>
    </mappers>

</configuration>

3.4 建表

創建一張表來實現對資料庫的操作

create table tb_user
(
    id       int auto_increment
        primary key,
    username varchar(30null,
    password varchar(30null,
    gender   char        null,
    birth    date        null
charset = utf8;

3.5 書寫實體類代碼

這裡我是用的Lombok插件使用註解來完成Getter、Setter方法和無參、有參構造

package com.mylifes1110.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
    private Boolean gender;
    private Date birth;
}

3.6 定義Dao層介面

定義一個Dao層介面並編寫一個查詢方法

註意: 因為我們使用MyBatis框架,所以我們不需要來創建Dao層的實現類了

package com.mylifes1110.dao;

import com.mylifes1110.bean.User;

public interface UserDao {
    User selectUserById(int id);
}

3.7 創建並編寫Mapper.xml

MyBatis框架是使用Mapper.xml文件來將對象和sql關係映射的,所以我們先在resources文件夾中創建一個UserMapper.xml文件並配置

<?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">

<!--namespace:所需實現的介面全限定名-->
<mapper namespace="com.mylifes1110.dao.UserDao">
    <!--id:所需重寫的介面抽象方法;resultType:查詢後所需返回的對象類型-->
    <select id="selectUserById" resultType="com.mylifes1110.bean.User">
        <!--select標簽是查詢標簽,裡面包裹著查詢的sql語句,其中id = #{arg0}是id = ?的意思-->
        <!--#{arg0}是指id等於方法中第一個形參,也就是id-->
        select id, username, password, gender, birth from tb_user where id = #{arg0}
    </select>
</mapper>

3.7 註冊Mapper

將mapper.xml註冊到mybatis-config.xml核心配置中

<!--Mapper註冊-->
<mappers>
    <!--註冊Mapper文件的所在位置-->
    <mapper resource="xxxMapper.xml"/>
</mappers>

3.8 測試方式1(常用)

package com.mylifes1110.dao;

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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class UserMapperTest {
    @Test
    public void selectUserByIdTest() throws IOException {
        // 獲得讀取MyBatis核心配置文件的流對象
        InputStream input = Resources.getResourceAsStream("mybatis-config.xml");
        // 根據流對象構建SqlSession連接對象的工廠
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);
        // 通過工廠獲得連接對象sqlSession
        SqlSession sqlSession = factory.openSession();
        // 通過連接對象獲得介面實現類對象
        UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
        // 列印結果
        System.out.println(userDaoImpl.selectUserById(1));
    }
}

3.9 測試方式2(瞭解)

package com.mylifes1110.dao;

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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class UserMapperTest {
    @Test
    public void selectUserByIdTest2() throws IOException {
        // 獲得讀取MyBatis核心配置文件的流對象
        InputStream input = Resources.getResourceAsStream("mybatis-config.xml");
        // 根據流對象構建SqlSession連接對象的工廠
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);
        // 通過工廠獲得連接對象sqlSession
        SqlSession sqlSession = factory.openSession();
        // 通過連接對象直接調用介面中的方法
        Object o = sqlSession.selectOne("com.mylifes1110.dao.UserDao.selectUserById"1);
        // 列印結果
        System.out.println(o);
    }
}

四、MyBatis框架使用細節

4.1 解決mapper.xml存放在resources以外路徑中的讀取問題

在Maven項目中resources目錄中的配置文件是不會被載入編譯到classes中的,所以如果我們要將mapper.xml文件放在resources文件夾以外的文件夾就不會被編譯到,以至於我們的MyBatis使用不了!

問題解決: 為瞭解決此問題,我們可以

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基本類型概述: 整型:byte,short,int,long 字元串:char 浮點型:float,double 布爾型:boolean 說明:Java中最小的計算單元是位元組,1位元組=8位(bit) 一、整型 說明:Java中整型數據屬於有符號數,即第一個bit位為0表示正整數,第一個bit位為1表 ...
  • 不知不覺,已經在深圳做後端開發已經4年了,仍然記得去深圳那年,是深圳最冷的冬天,在深圳待過的朋友,都知道深圳是很難結冰的,而那年,深圳很多地方卻下了雪。 在深圳的幾年,市民中心是最經常去的地方,泡個圖書館,廣場聽彈唱,還有春暖花開嬌羞欲滴的木棉花,在這裡,還有一段不可告人的秘密,都是很美好的記憶。 ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 由於某種需要,需要爬取天貓國際一些商品的評論信息,然後做一些數據分析和可視化展示,本篇文章,只講解如何從天貓上爬取評論信息,數據分析不作為本篇文章的重點。 第一步,整體說明一 ...
  • 一、Java記憶體模型記憶體交互操作 1、lock(鎖定):作用於主記憶體的變數,把一個變數標記為一條線程獨占狀態 2、unlock(解鎖):作用於主記憶體的變數,把一個處於鎖定狀態的變數釋放出來,釋放後的變數才可以被其他線程鎖定 3、read(讀取):作用於主記憶體的變數,把一個變數值從主記憶體傳輸到線程的工 ...
  • 前幾天,技術群里有個群友問了一個關於線程池的問題,內容如圖所示: 關於線程池相關知識可以先看下這篇:為什麼阿裡巴巴Java開發手冊中強制要求線程池不允許使用Executors創建? 那麼就來和大家探討下這個問題,線上程池中,線程會從 workQueue 中讀取任務來執行,最小的執行單位就是 Work ...
  • ST微控制器新聞速遞: http://m.news.st.com/nl/jsp/m.jsp?c=%40iVMPbDNU27jlIBm9pWRG%2ByBkflBlUzFv70x3%2Bpxx4hA%3D&cid=stmDM28850&bid=297323786&uid=Iw8lVUo3F26RVRv ...
  • 1、dependencies和dependencyManagement的區別 (參考:https://blog.csdn.net/diu_brother/article/details/79579674) dependencyManagement:只是聲明依賴,並不實現引入,因此子項目需要顯示的聲明 ...
  • 原文鏈接:https://www.wjcms.net/archives/vagrantbox%E5%AE%89%E8%A3%85centos8 VirtualBox安裝centos8 線上安裝(不推薦) 打開git軟體,直接運行命令 vagrant init generic/centos8 然後運行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...