mybatis快速入門

2020-09-05 24K技術宅

(一).mybatis簡介(了解)

1.1 什麼是MyBatis

MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。

MyBatis是一個優秀的持久層框架,它對JDBC的操作資料庫的過程進行封裝,使開發者只需要關注 SQL語句 本身,而不需要花費精力去處理例如註冊驅動、創建connection、創建statement、手動設置參數、結果集檢索以及釋放資源等jdbc繁雜的過程代碼。

Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt)配置起來,並通過java對象和statement中的sql進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回。

總之,Mybatis對JDBC訪問資料庫的過程進行了封裝,簡化了JDBC代碼,解決JDBC將結果集封裝為Java對象的麻煩。

下圖是MyBatis架構圖:

(1)mybatis-config.xml是Mybatis的核心配置文件,通過其中的配置可以生成SqlSessionFactory,也就是SqlSession工廠

(2)基於SqlSessionFactory可以生成SqlSession對象

(3)SqlSession是一個既可以發送SQL去執行,並返回結果,類似於JDBC中的Connection對象,也是Mybatis中至關重要的一個對象。

(4)Executor是SqlSession底層的對象,用於執行SQL語句

(5)MapperStatement對象也是SqlSession底層的對象,用於接收輸入映射(SQL語句中的參數),以及做輸出映射(即將SQL查詢的結果映射成相應的結果)

1.2 為什麼要使用MyBatis

思考:在開始之前,思考下如何通過JDBC查詢Emp表中的所有記錄,並封裝到一個List<Emp>集合中返回。(演示:準備數據、導包、導入JDBC程序)

1、使用傳統方式JDBC訪問資料庫:

(1)使用JDBC訪問資料庫有大量重複代碼(比如註冊驅動、獲取連接、獲取傳輸器、釋放資源等);

(2)JDBC自身沒有連接池,會頻繁的創建連接和關閉連接,效率低;

(3)SQL是寫死在程序中,一旦修改SQL,需要對類重新編譯;

(4)對查詢SQL執行後返回的ResultSet對象,需要手動處理,有時會特別麻煩;

...

2、使用mybatis框架訪問資料庫:

(1)Mybatis對JDBC對了封裝,可以簡化JDBC代碼;

(2)Mybatis自身支持連接池(也可以配置其他的連接池),因此可以提高程序的效率;

(3)Mybatis是將SQL配置在mapper文件中,修改SQL只是修改配置文件,類不需要重新編譯。

(4)對查詢SQL執行後返回的ResultSet對象,Mybatis會幫我們處理,轉換成Java對象。

...

總之,JDBC中所有的問題(代碼繁瑣、有太多重複代碼、需要操作太多對象、釋放資源、對結果的處理太麻煩等),在Mybatis框架中幾乎都得到了解決!!

(二) MyBatis快速入門

2.1 準備數據,創建庫和表

1、創建yonghedb庫、emp表,並插入若干條記錄

-- 1、創建資料庫 yonghedb 資料庫

create database if not exists yonghedb charset utf8;use yonghedb; -- 選擇yonghedb資料庫

-- 2、刪除emp表(如果存在)

drop table if exists emp;

-- 3、在 yonghedb 庫中創建 emp 表

create table emp(    id int primary key auto_increment,    name varchar(50),    job varchar(50),    salary double);

-- 4、往 emp 表中, 插入若干條記錄

insert into emp values(null, &39;, &39;, 3300);insert into emp values(null, &39;, &39;, 2800);insert into emp values(null, &39;, &39;, 2700);insert into emp values(null, &39;, &39;, 4200);insert into emp values(null, &39;, &39;, 3000);insert into emp values(null, &39;, &39;, 3500);insert into emp values(null, &39;, &39;, 3700);insert into emp values(null, &39;, &39;, 5000);

2.2 創建工程,導入所需jar包、創建測試類

1、創建Maven的java工程

2、導入junit、mysql、mybaits等開發包

在pom.xml文件中引入相關依賴包即可

<dependencies>    <!-- junit單元測試 -->    <dependency>        <groupId>junit</groupId>        <artifactId>junit</artifactId>        <version>4.9</version>    </dependency>    <!-- mysql驅動 -->    <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>        <version>5.1.32</version>    </dependency>    <!-- mybatis -->    <dependency>        <groupId>org.mybatis</groupId>        <artifactId>mybatis</artifactId>        <version>3.2.8</version>    </dependency>    <!-- 整合log4j -->    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-log4j12</artifactId>        <version>1.6.4</version>    </dependency></dependencies>

3、創建com.tedu.mybatis.TestMybatis01測試類,並提供findAll方法(查詢emp表中所有的員工信息)

/** 練習1(快速入門):  查詢emp表中的所有員工, 返回一個List<Emp>集合 * @throws IOException */@Testpublic void findAll() throws IOException {    //1.讀取mybatis的核心配置文件(mybatis-config.xml)       //2.通過配置信息獲取一個SqlSessionFactory工廠對象       //3.通過工廠獲取一個SqlSession對象       //4.通過namespace+id找到要執行的sql語句並執行sql語句       //5.輸出結果   }

2.3 添加mybatis-config.xml文件

1、在src/main/resources目錄下,創建mybatis-config.xml文件 (MyBatis的核心配置文件)

2、mybatis-config.xml文件配置如下:

mybatis-config文件頭信息如下:

<?xml version=&34; encoding=&34;?><!DOCTYPE configuration    PUBLIC &34;    &34;>

<!-- MyBatis的全局配置文件 -->

<configuration >   </configuration> 詳細配置如下:<?xml version=&34; encoding=&34;?><!DOCTYPE configuration    PUBLIC &34;    &34;>   <!-- MyBatis的全局配置文件 --><configuration >    <!-- 1.配置開發環境(需設置一個默認的環境) -->    <environments default=&34;>        <!-- 這裡可以配置多個環境,比如develop,test等 -->        <environment id=&34;>            <!-- 1.1.配置事務管理方式:JDBC/MANAGED            JDBC:將事務交給JDBC管理(推薦)            MANAGED:自己管理事務              -->            <transactionManager type=&34;></transactionManager>                       <!-- 1.2.配置數據源,即連接池方式:JNDI/POOLED/UNPOOLED                JNDI:已過時                POOLED:使用連接池(推薦)                UNPOOLED:不使用連接池             -->            <dataSource type=&34;>                <property name=&34; value=&34;/>                <property name=&34; value=&34;/>                <property name=&34; value=&34;/>                <property name=&34; value=&34;/>            </dataSource>        </environment>    </environments>       <!-- 2.加載Mapper配置文件(因mapper文件中配置了要執行的SQL語句) -->    <mappers>        <!-- 注意路徑 -->        <mapper resource=&34;/>    </mappers></configuration>

2.4 添加EmpMapper.xml文件

1、在src/main/resources目錄下,創建EmpMapper.xml文件 (實體類的映射文件)

2、EmpMapper.xml文件配置如下:

EmpMapper文件頭信息如下:

<?xml version=&34; encoding=&34;?><!DOCTYPE mapper    PUBLIC &34;    &34;> <!--    不同Mapper文件的namespace值應該保證唯一    在程序中通過[ namespace + id ]定位到執行哪一條SQL語句 --><mapper namespace=&34;>      </mapper>

詳細配置如下:

<?xml version=&34; encoding=&34;?><!DOCTYPE mapper    PUBLIC &34;    &34;> <!--    namespace一般指定為當前文件的所在包路徑+文件名    將來在程序中通過[ namespace + id ]定位到執行哪一條SQL語句 --><mapper namespace=&34;>    <!-- 通過select、insert、update、delete標籤聲明要執行的SQL -->    <!-- 練習1: 查詢emp表中的所有員工信息        resultType指定查詢的結果將會封裝到什麼類型中 -->    <select id=&34; resultType=&34;>        select * from emp    </select>    <!--    resultType:返回值類型,簡單類型(例如:Integer,String,Emp等)        如果返回集合(List<Emp>),只需配置集合中的元素類型即可!    --></mapper>

2.5 添加並編寫Emp實體類

注意:在當前實例中,Emp類中的屬性和資料庫表的欄位名稱必須一致,否則將會無法將結果集封裝到Java對象中。

在src/main/java目錄下創建com.tedu.pojo.Emp類並實現Emp類:

提供私有屬性以及對應的getter方法、setter方法,並重寫toString方法

public class Emp {    //1.聲明實體類中的屬性    private Integer id;    private String name;    private String job;    private Double salary;       //2.提供對應的getter和setter方法    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getJob() {        return job;    }    public void setJob(String job) {        this.job = job;    }    public Double getSalary() {        return salary;    }    public void setSalary(Double salary) {        this.salary = salary;    }       //3.重寫toString方法    @Override    public String toString() {        return &34; + id + &34; + name + &34; + job + &34; + salary + &34;;    }}

2.6 實現測試類,並測試

1、實現findAll方法,代碼如下:

/** 練習1(快速入門):  查詢emp表中的所有員工, 返回一個List<Emp>集合 * @throws IOException */@Testpublic void findAll() throws IOException {    //1.讀取mybatis的核心配置文件(mybatis-config.xml)    InputStream in = Resources            .getResourceAsStream(&34;);    //2.通過配置信息獲取一個SqlSessionFactory工廠對象    SqlSessionFactory fac =            new SqlSessionFactoryBuilder().build( in );    //3.通過工廠獲取一個SqlSession對象    SqlSession session = fac.openSession();    //4.通過namespace+id找到要執行的sql語句並執行sql語句    List<Emp> list = session            .selectList(&34;);    //5.輸出結果    for(Emp e : list) {        System.out.println( e );    }}

2、執行findAll方法,輸出結果為:

Emp{id=1, name=&39;, job=&39;, salary=3300.0}

Emp{id=2, name=&39;, job=&39;, salary=2800.0}

Emp{id=3, name=&39;, job=&39;, salary=2700.0}

Emp{id=4, name=&39;, job=&39;, salary=4200.0}

Emp{id=5, name=&39;, job=&39;, salary=3000.0}

Emp{id=6, name=&39;, job=&39;, salary=3500.0}

Emp{id=7, name=&39;, job=&39;, salary=3700.0}

Emp{id=8, name=&39;, job=&39;, salary=5000.0}

相關焦點

  • Mybatis第一天:Mybatis框架簡介與快速入門
    Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,並通過java對象和statement中的sql進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回。
  • mybatis第二天:快速入門數據持久層框架mybatis
    這是因為mybatis會把接收到的參數,以鍵值對的形式存儲在map中,比如QueryVo類中屬性為鍵,然後值為屬性的值。所以我們可以直接使用idsList來獲取對應的列表。如果傳遞過來一個數組,mybatis將以Array為鍵存儲在map中,如果傳遞過來的是一個list,mybatis會以list為鍵存儲在map中第二種情況:<select id=&34; parameterType=&34; resultType=&34;> <include refid=&34;/> <
  • springBoot中使用mybatis入門筆記(一)
    前言: 這是一篇mybatis入門級別的文章,包含一些mybatis的配置,以及CRUD等。mybatis集成1.引入依賴。在項目pom文件引入mybatis的相關依賴。<artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> <dependency> <groupId>org.mybatis
  • MyBatis-Plus快速入門(一)
    ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作支持自定義全局通用操作:支持全局通用方法注入(Write once, use anywhere)內置代碼生成器:採用代碼或者 Maven 插件可快速生成
  • mybatis從入門到精通,第一篇《入門基本搭建》,乾貨滿滿
    --引入mybatis依賴--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency&
  • Mybatis 入門經典案例
    mybatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。本文是關於mybatis的一個基礎入門案例。
  • MyBatis入門案例——親測可用
    mybatis/mybatis --><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId>
  • 基於Springboot的快速入門項目
    技術選型 後臺:Springboot+ mybatis + mysql Ø前端:layui+thymeleaf n layui 第三方的前端框架,把 CSS/JS/HTML 已經打包好,我們直接用n Thymeleaf 類似於 JSP,Freemaker 模板引擎,也有自己表達式
  • java小白快速入門mybatis增刪查改,基於springboot小例子
    程式設計師java開發、編程、後端開發、資料庫MySQL工具idea技術Springboot、SpringMVC、mybatis、json歷史文章整理,大家一個個看吧
  • mybatis-plus思維導圖,讓mybatis-plus不再難懂
    mybatis-plus而mybatis-plus這樣一個框架,一種集mybatis與hibernate的優點一起的框架。它提供了hibernate的單表CRUD操作的方便同時,又保留了mybatis的特性。
  • 如何用Spring+Mybatis快速搭建1個微服務
    用spring boot來快速搭建一個微服務是十分方便的(相比於傳統的spring框架)最近整理的Java架構學習視頻和大廠項目底層知識點,需要的同學歡迎私信我第一步 pom依賴這裡使用的spring boot的版本為.5.3.RELEASEmybatis-spring-boot-starter 是Mybatis提供的,所以為什麼名字不是叫spring-boot-mybatis-starter(題外話)
  • 一、Mybatis基本應用
    SSM = springmvc + spring + mybatis一、框架簡介三層架構
  • MyBatis初級實戰之一:Spring Boot集成
    所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;MyBatis初級實戰《MyBatis初級實戰》系列旨在通過一系列編碼實戰,和讀者一起掌握MyBatis的基本用法,幫助初學者快速運用
  • MyBatis框架學習
    目錄總結jdbc出現的問題mybatis介紹mybatis入門程序//DTD Config 3.0//EN&34;http://mybatis.org/dtd/mybatis-3-config.dtd&34;development&34;development&34;JDBC&34;JDBC&34;POOLED&34;POOLED&34;driver&34;com.mysql.jdbc.Driver&34;url&34;jdbc:mysql://127.0.0.1
  • MyBatis要不要學?字節跳動內部的這份MyBatis文檔真香!
    前言  很多人說 mybatis重不重要?這裡再說下,網際網路公司基本都是用mybatis作為持久層框架的,所以mybatis是一定要學的。  程式設計師80%時間都在CRUD,對了mybatis就是幹這個的
  • MyBatis:基本應用
    GitHub 地址:https://github.com/mybatis/mybatis-3/ORM 思想ORM(Object Relational Mapping)對象關係映射O(對象模型):實體對象,即我們在程序中根據資料庫表結構建立的一個個實體
  • Mybatis緩存詳解
    mybatis是一個查詢資料庫的封裝框架,主要是封裝提供靈活的增刪改sql,開發中,service層能夠通過mybatis組件查詢和修改資料庫中表的數據;作為查詢工具,mybatis有使用緩存,這裡講一下mybatis的緩存相關源碼。
  • mybatis plus 與mybatis的選擇
    mybatis plus是mybatis的封裝,可以做到簡化xml的效果,完全去除xml化,實現orm層的分離,mybatis雖然是hrbernate後的另一大框架,同時其xml的配置也隨著去xml配置時代的而成為阻礙敏捷開發的標準.隨著mybatis plus的出現,orm的框架又將有一次提升
  • MyBatis 為什麼需要通用 Mapper ?
    二、快速入門為了讓你更快速的了解通用 Mapper 的優勢,這裡會更簡潔的讓你了解整個過程。首先在 Maven 項目的 pom.xml 中添加通用 Mapper 依賴:接下來,開始具體的使用。1. 配置實體類通過 MBG 配合 專用代碼生成器可以直接生成實體類等基礎代碼,為了避免信息量過大,這裡當作手工編寫和配置。
  • mybatis升級為mybatis-plus踩到的坑
    RuoYi-Vue 是一個 Java EE 企業級快速開發平臺,基於經典技術組合(Spring Boot、Spring Security、mybatis、Jwt、Vue),內置模塊如:部門管理、角色用戶、菜單及按鈕授權、數據權限、系統參數、日誌管理、代碼生成等。