首頁 後端開發 php教程 Mybatis的使用(mapper介面方式)

Mybatis的使用(mapper介面方式)

Mar 06, 2018 pm 04:15 PM
mapper mybatis 介面

使用 Mapper 介面的方式,不用寫介面實作類,直接完成資料庫操作,簡單方便。 為了幫助大家更學習Mapper接口,小編總結了一些關於Mapper接口的知識點,希望能夠幫助到有需要的人。

先上結構圖:
Mybatis的使用(mapper介面方式)
下面是具體的程式碼:
一、User.java

实体类中的的get/set方法以及构造方法及toString方法就不贴了
public class User {    
    private int id;    
    private String name;    
    private int age;
}
登入後複製

二、UserMapper.java
這是mapper接口,面向介面程式設計的想法還是很重要的。也是本次部落格文章最重要的部分。

介面定義有以下特點:

  1. Mapper 介面方法名稱和 UserMapper.xml 中定義的每個 sql 的 id 同名。

  2. Mapper 介面方法的輸入參數類型和 UserMapper.xml 中定義的 sql 的parameterType 類型相同。

  3. Mapper 介面的回傳類型和UserMapper.xml 中定義的sql 的resultType 類型相同

##注意建立表格的方法,有註解@Param

package com.mi.mapper;import org.apache.ibatis.annotations.Param;import com.mi.beans.User;public interface UserMapper {
    void createTable (@Param("tableName") String tableName);    void add(User user);    void del(int id);    void update(User user);
    User getUser(int id);
    User[] list();
}
登入後複製
登入後複製

三、userMappers.xml
這裡要注意 1.xml檔案的namespace要寫成mapper接口的路徑,像下面.

<mapper namespace="com.mi.mapper.UserMapper">
登入後複製
登入後複製

2.在寫動態建立表格的語句時,要寫成${tableName},而不是#{}. 點擊查看兩者的差異

create table ${tableName}...
登入後複製
登入後複製

以下是完整程式碼:包括建立表格、CRUD

<mapper namespace="com.mi.mapper.UserMapper">
    
    
        create table ${tableName} (id int primary key auto_increment,name varchar(20),age int)    
    
    
        insert into t_user(name,age) value(#{name},#{age})    
    
    
        delete from t_user where id = #{id}    
    
    
        update t_user set name=#{name},age=#{age} where id=#{id}    
    
    
    
    
登入後複製

四、conf.xml 這裡需要配置兩個東西

    ##配置JDBC的連線
  • 設定mapper.xml
  • <?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.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
            <!-- 注册userMapper.xml文件 -->
        <mappers>
            <mapper resource="com/mi/mapping/userMappers.xml"/>
        </mappers></configuration>
    登入後複製
五、SqlSessionUtil.java

我在這裡寫了一個工具類別,主要目的是要拿到sqlSession,因為之後每次操作資料庫都需要寫一遍,所以進行一次封裝.

package com.mi.util;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.
session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SqlSessionUtil 
{
      public static SqlSession getSqlSession() throws Exception{
      String resource = "conf.xml";
      //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
      InputStream is = Resources.getResourceAsStream(resource);
      //构建sqlSession的工厂
      SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
      //创建能执行映射文件中sql的sqlSession
      SqlSession sqlSession = sessionFactory.openSession();
      return sqlSession;
   }
}
登入後複製

六、MyTest.java

#這是測試類別,透過上面的工具類別sqlSession,最關鍵的是下面這句

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
登入後複製
登入後複製

MyBatis透過動態代理的方式實作mapper介面

,之後就好辦了,執行介面中準備好的方法就可以了。 注意不要忘了sqlSession.commit()和sqlSession.close().否則在執行過程中雖然不會報錯,但是資料庫中是不會有變化的.

这里我只执行了创建表的方法.
package com.mi.test;import org.apache.ibatis.session.SqlSession;import com.mi.beans.User;import com.mi.mapper.UserMapper;
import com.mi.util.SqlSessionUtil;public class MyTest {
    public static void main(String[] args) throws Exception {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.createTable("t_user");
        sqlSession.commit();
        sqlSession.close();
    }
}
登入後複製
登入後複製
           

使用Mapper 介面的方式,不用寫入介面實作類,直接完成資料庫操作,簡單方便。

先上結構圖:



下面是具體的程式碼:Mybatis的使用(mapper介面方式)
一、User.java

实体类中的的get/set方法以及构造方法及toString方法就不贴了public class User {    private int id;    private String name;    private int age;
登入後複製

#二、UserMapper .java

這是mapper接口,面向介面程式設計的想法還是很重要的。也是本次部落格文章最重要的部分。

介面定義有以下特點:

    Mapper 介面方法名稱和 UserMapper.xml 中定義的每個 sql 的 id 同名。
  1. Mapper 介面方法的輸入參數類型和 UserMapper.xml 中定義的 sql 的parameterType 類型相同。
  2. Mapper 介面的回傳類型和UserMapper.xml 中定義的sql 的resultType 類型相同
  3. ##注意建立表格的方法,有註解@Param

package com.mi.mapper;import org.apache.ibatis.annotations.Param;import com.mi.beans.User;public interface UserMapper {
    void createTable (@Param("tableName") String tableName);    void add(User user);    void del(int id);    void update(User user);
    User getUser(int id);
    User[] list();
}
登入後複製
登入後複製
三、userMappers.xml

這裡要注意
1.xml檔案的namespace要寫成mapper接口的路徑,像下面.

<mapper namespace="com.mi.mapper.UserMapper">
登入後複製
登入後複製
2.在寫動態建立表格的語句時,要寫成${tableName},而不是#{}. 點擊查看兩者的差異
create table ${tableName}...
登入後複製
登入後複製

以下是完整程式碼:包括建立表格、CRUD

<mapper namespace="com.mi.mapper.UserMapper">
    
    
        create table ${tableName} (id int primary key auto_increment,name varchar(20),age int)    
    
    
    
        insert into t_user(name,age) value(#{name},#{age})    
    
    
    
        delete from t_user where id = #{id}
     
    
    
        update t_user set name=#{name},age=#{age} where id=#{id}    
    
    
    
    
    
登入後複製

四、conf.xml

這裡需要配置兩個東西
##配置JDBC的連線

  • 設定mapper.xml

  • <?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.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
            <!-- 注册userMapper.xml文件      -->
        <mappers>
            <mapper resource="com/mi/mapping/userMappers.xml"/>
        </mappers></configuration>
    登入後複製

    五、SqlSessionUtil.java
我在這裡寫了一個工具類別,主要目的是要拿到sqlSession,因為之後每次操作資料庫都需要寫一遍,所以進行一次封裝.

package com.mi.util;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SqlSessionUtil 
{
      public static SqlSession getSqlSession() throws Exception{
        String resource = "conf.xml";
         //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = Resources.getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
      //创建能执行映射文件中sql的sqlSession
        SqlSession sqlSession = sessionFactory.openSession();
        return sqlSession;
    }
}
登入後複製
六、MyTest.java

#這是測試類別,透過上面的工具類別sqlSession,最關鍵的是下面這句

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
登入後複製
登入後複製
MyBatis透過動態代理的方式實作mapper介面
,之後就好辦了,執行介面中準備好的方法就可以了。

注意不要忘了sqlSession.commit()和sqlSession.close().否則在執行過程中雖然不會報錯,但是資料庫中是不會有變化的.

这里我只执行了创建表的方法.
package com.mi.test;import org.apache.ibatis.session.SqlSession;import com.mi.beans.User;import com.mi.mapper.UserMapper;
import com.mi.util.SqlSessionUtil;public class MyTest {
    public static void main(String[] args) throws Exception {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.createTable("t_user");
        sqlSession.commit();
        sqlSession.close();
    }
}
登入後複製
登入後複製

相關推薦:mybatis分頁外掛pageHelper實例詳解

Oracle結合Mybatis實作取表的10個資料

#

Spring Boot 、 Mybatis 、 Redis快速建置現代化Web專案


#

以上是Mybatis的使用(mapper介面方式)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
詳解MyBatis動態SQL標籤中的Set標籤功能 詳解MyBatis動態SQL標籤中的Set標籤功能 Feb 26, 2024 pm 07:48 PM

MyBatis動態SQL標籤解讀:Set標籤用法詳解MyBatis是一個優秀的持久層框架,它提供了豐富的動態SQL標籤,可以靈活地建構資料庫操作語句。其中,Set標籤是用來產生UPDATE語句中SET子句的標籤,在更新作業中非常常用。本文將詳細解讀MyBatis中Set標籤的用法,以及透過具體的程式碼範例來示範其功能。什麼是Set標籤Set標籤用於MyBati

電腦主機板內部介面都有什麼 推薦電腦主機板內部介面介紹 電腦主機板內部介面都有什麼 推薦電腦主機板內部介面介紹 Mar 12, 2024 pm 04:34 PM

我們在電腦組裝的過程中,安裝過程雖然簡單,不過往往都是在接線上遇到問題,經常有裝機用戶誤將CPU散熱器的供電線插到了SYS_FAN上,雖然風扇可以轉動,不過在開機可能會有F1報錯“CPUFanError”,同時也導致了CPU散熱器無法智慧調速。下面裝機之家分享一下電腦主機板上CPU_FAN、SYS_FAN、CHA_FAN、CPU_OPT介面知識科普。電腦主機板上CPU_FAN、SYS_FAN、CHA_FAN、CPU_OPT介面知識科普1、CPU_FANCPU_FAN是CPU散熱器專用接口,12V工作

Go語言中常見的程式設計範式和設計模式 Go語言中常見的程式設計範式和設計模式 Mar 04, 2024 pm 06:06 PM

Go語言作為一門現代化的、高效的程式語言,擁有豐富的程式設計範式和設計模式可以幫助開發者編寫高品質、可維護的程式碼。本文將介紹Go語言中常見的程式設計範式和設計模式,並提供具體的程式碼範例。 1.物件導向程式設計在Go語言中,可以使用結構體和方法實現物件導向程式設計。透過定義結構體和給結構體綁定方法,可以實現資料封裝和行為綁定在一起的物件導向特性。 packagemaini

解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法 解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法 Feb 25, 2024 pm 12:30 PM

MyBatis的快取機制解析:一級快取與二級快取的差異與應用在MyBatis框架中,快取是一個非常重要的特性,可以有效提升資料庫操作的效能。其中,一級快取和二級快取是MyBatis常用的兩種快取機制。本文將詳細解析一級快取與二級快取的差異與應用,並提供具體的程式碼範例進行說明。一、一級緩存一級緩存也被稱為本地緩存,它預設開啟且不可關閉。一級快取是SqlSes

PHP介面簡介及其定義方式 PHP介面簡介及其定義方式 Mar 23, 2024 am 09:00 AM

PHP介面簡介及其定義方式PHP是一種廣泛應用於Web開發的開源腳本語言,具有靈活、簡單、強大等特性。在PHP中,介面(interface)是一種定義多個類別之間公共方法的工具,實現了多態性,讓程式碼更加靈活和可重複使用。本文將介紹PHP介面的概念及其定義方式,同時提供具體的程式碼範例展示其用法。 1.PHP介面概念介面在物件導向程式設計中扮演著重要的角色,定義了類別應

NotImplementedError()的處理方案 NotImplementedError()的處理方案 Mar 01, 2024 pm 03:10 PM

報錯的原因在python中,Tornado中拋出NotImplementedError()的原因可能是因為未實作某個抽象方法或介面。這些方法或介面在父類別中聲明,但在子類別中未實作。子類別需要實作這些方法或介面才能正常運作。如何解決解決這個問題的方法是在子類別中實作父類別聲明的抽象方法或介面。如果您正在使用一個類別來繼承另一個類,並且您看到了這個錯誤,則應該在子類別中實作父類別中所有聲明的抽象方法。如果您正在使用一個接口,並且您看到了這個錯誤,則應該在實作該接口的類別中實作該接口中所有聲明的方法。如果您不確定哪些

Java 中介面與抽象類別在設計模式中的應用 Java 中介面與抽象類別在設計模式中的應用 May 01, 2024 pm 06:33 PM

介面和抽象類別在設計模式中用於解耦和可擴展性。介面定義方法簽名,抽象類別提供部分實現,子類別必須實作未實現的方法。在策略模式中,介面用於定義演算法,抽象類別或具體類別提供實現,允許動態切換演算法。在觀察者模式中,介面用於定義觀察者行為,抽象類別或具體類別用於訂閱和發布通知。在適配器模式中,介面用於適應現有類,抽象類或具體類可實現相容接口,允許與原有程式碼互動。

即時監控 MyBatis 控制台中的 SQL 輸出 即時監控 MyBatis 控制台中的 SQL 輸出 Feb 25, 2024 pm 03:48 PM

MyBatis是一款受歡迎的持久層框架,它提供了方便的SQL映射和資料庫操作功能,讓開發者能夠更有效率地與資料庫互動。在實際開發過程中,我們有時候需要在控制台即時列印出MyBatis執行的SQL語句,以便更好地偵錯和最佳化SQL查詢。本文將介紹如何實作在MyBatis中控制台即時列印SQL,並提供具體的程式碼範例。首先,我們需要在My

See all articles