91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于MyBatis的數據持久化框架如何使用

發布時間:2022-08-17 10:26:34 來源:億速云 閱讀:141 作者:iii 欄目:開發技術

這篇文章主要介紹“基于MyBatis的數據持久化框架如何使用”,在日常操作中,相信很多人在基于MyBatis的數據持久化框架如何使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”基于MyBatis的數據持久化框架如何使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、MyBatis是什么

    1.1、概述

    Mybatis是一個優秀的開源、輕量級持久層框架,它對JDBC操作數據庫的過程進行封裝,簡化了加載驅動、創建連接、創建 statement 等繁雜的過程,使開發者只需要關注sql本身。

    我們原來使用JDBC操作數據庫,需要手動的寫代碼去注冊驅動、獲取connection、獲取statement等等,現在Mybaits幫助我們把這些事情做了,我們只需要關注我們的業務sql即可,這樣可以提高我們的開發效率。

    MyBatis屬于半自動的ORM框架

    MyBatis 支持定制化 SQL、存儲過程以及高級映射,可以在實體類和 SQL 語句之間建立mapping映射關系,是一種半自動化的 ORM 實現。其封裝性低于 Hibernate,但性能優秀、小巧、簡單易學、應用廣泛。

    1.2、什么是持久化

    數據持久化是將內存中的數據模型轉換為存儲模型,以及將存儲模型轉換為內存中數據模型的統稱。例如,文件的存儲、數據的讀取以及對數據表的增刪改查等都是數據持久化操作。

    1.3、什么是ORM

    ORM(Object Relational Mapping,對象關系映射)是一種數據持久化技術,它在對象模型和關系型數據庫之間建立起對應關系,并且提供了一種機制,通過 JavaBean 對象去操作數據庫表中的數據。

    1.4、MyBatis主要內容

    MyBatis 前身為 iBatis,2002 年由 Clinton Begin 發布。2010 年從 Apache 遷移到 Google,并改名為 MyBatis,2013 年又遷移到了 Github。

    MyBatis 的主要思想是將程序中的大量 SQL 語句剝離出來,使用 XML 文件或注解的方式實現 SQL 的靈活配置,將 SQL 語句與程序代碼分離,在不修改程序代碼的情況下,直接在配置文件中修改 SQL 語句。MyBatis與其它持久性框架最大的不同是,MyBatis 強調使用 SQL,而其它框架(例如 Hibernate)通常使用自定義查詢語言,即 HQL(Hibernate查詢語言)或EJB QL(Enterprise JavaBeans查詢語言)。

    1.5、優點

    MyBatis是免費且開源的。

    與 JDBC 相比,減少了 50% 以上的代碼量。

    MyBatis是最簡單的持久化框架,體積小巧并且學習門檻低。

    MyBatis相當靈活,不會對應用程序或者數據庫的現有設計強加任何影響,SQL 寫在 XML 中,和程序邏輯代碼分離,降低耦合度,便于同一管理和優化,提高了代碼的可重用性。

    提供 XML 標簽,支持編寫動態 SQL語句。

    提供映射標簽,支持實體對象與數據庫的表字段關系映射。

    1.6、缺點

    編寫 SQL語句工作量較大,對開發人員編寫 SQL 語句的功底有一定要求。

    SQL語句依賴于數據庫,導致數據庫移植性差,不能隨意更換數據庫。

    二、MyBatis架構

    2.1、mybatis所依賴的jar包

    lib 文件夾下的 jar 文件是 MyBatis的依賴包(mybatis-3.5.10.jar是MyBatis的核心包)

    基于MyBatis的數據持久化框架如何使用

    將需要的核心包全部添加進項目構建路徑中

    2.2、MyBatis準備工作

    基于MyBatis的數據持久化框架如何使用

    ①創建數據庫表結構

    ②創建實體類

    在 src 目錄下創建一個名為com.my.entity 的包,在該包中創建實體類 Website。

    package com.my.entity;
     
    import java.util.Date;
     
    //網站信息實體類
    public class Website {
        private int id;
        private String name;
        private String url;
        private int age;
        private String country;
        private Date createtime;
        
        @Override
        public String toString() {
            return "Website [id=" + id + ", name=" + name + ", url=" + url + ", age=" + age + ", country=" + country
                    + ", createtime=" + createtime + "]";
        }
     
        
        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 getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public int getAge() {
            return age;
        }
     
        public void setAge(int age) {
            this.age = age;
        }
        public String getCountry() {
            return country;
        }
        public void setCountry(String country) {
            this.country = country;
        }
        public Date getCreatetime() {
            return createtime;
        }
        public void setCreatetime(Date createtime) {
            this.createtime = createtime;
        }
        
        
    }

    注意:在類中聲明的屬性名稱與數據表 website 的字段名稱,保持完全一致。

    ③ SQL映射文件(在 src 目錄下創建 com.my.mapper 包,在該包下創建映射文件 WebsiteMapper.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">
     
    <!-- SQL映射文件:配置執行的SQL語句 -->
    <mapper namespace="com.my.mapper.WebsiteMapper">
            <!-- 添加操作的SQL映射 -->
            <insert id = "insertNewWebsite"  parameterType="com.my.entity.Website">
                insert into website(name,url,age,country)values(#{name},#{url},#{age},#{country})
            </insert>
              <!-- 查詢所有網站信息 -->
              <select id="selectWebsiteList"   resultType="com.my.entity.Website">
                      select * from website
              </select>
    </mapper>

    上述代碼中,<mapper> 元素是配置文件的根元素,它包含了 namespace屬性,該屬性值通常設置為“包名+SQL映射文件名”,用于指定唯一的命名空間。
    子元素 <select>、<insert> 中的信息用于執行查詢、添加操作。

    在定義的 SQL語句中,“#{}”表示一個占位符,相當于“?”,而“#{name}”表示該占位符用于接收參數中的名稱為 name的參數值。

    ④核心配置文件

    MyBatis 核心配置文件主要用于配置數據庫連接和 MyBatis運行時所需的各種特性,包含了設置和影響 MyBatis 行為的屬性。

    在 src 目錄下創建 MyBatis的核心配置文件 mybatis-config.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>
          <!-- 框架參數 -->
        <settings>
          <!-- 配置日志為LOG4J -->  
          <setting name="logImpl" value="LOG4J" />
        </settings>
      
        <!-- 配置mybatis運行環境 -->
        <environments default="development">
            <environment id="development">
                <!-- 使用JDBC的事務管理 -->
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <!-- MySQL數據庫驅動 -->
                    <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                    <!-- 連接數據庫的URL -->
                    <property name="url"
                        value="jdbc:mysql://localhost:3306/my_bank?charset=utf8mb4&amp;useSSL=false&amp;useTimezone=true&amp;serverTimezone=GMT%2B8" />
                    <property name="username" value="xxxx" />
                    <property name="password" value="xxxxxx" />
                </dataSource>
            </environment>
        </environments>
      
        <!-- 將mapper文件加入到配置文件中 -->
        <mappers>
            <mapper resource="com/my/mapper/EarthquakeMapper.xml" />
        </mappers>
    </configuration>

    ⑤日志文件

     MyBatis 默認使用 log4j 輸出日志信息,如果開發者需要查看控制臺輸出的 SQL 語句,可以在 classpath 路徑下配置其日志文件。在 mybatisDemo 的 src 目錄下創建 log4j.properties 文件

    # Global logging configuration
    log4j.rootLogger=ERROR,stdout
     
    # MyBatis logging configuration...
    log4j.logger.com.apesource=DEBUG
     
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    三、MyBatis 核心對象

    MyBatis 的核心接口和類包括:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession。

    基于MyBatis的數據持久化框架如何使用

    使用步驟:

    1首先,獲取 SqlSessionFactoryBuilder對象,可以根據 XML 配置文件或者 Configuration 類的實例構建該對象。

    2其次,通過 SqlSessionFactoryBuilder對象來獲取 SqlSessionFactory 對象。

    3最后,獲取 SqlSessionFactory 對象之后,就可以進一步獲取 SqlSession 實例。SqlSession 對象中完全包含以數據庫為背景的所有執行 SQL 操作的方法,用該實例可以直接執行已映射的 SQL 語句。

    核心對象的生命周期和作用域

    SqlSessionFactoryBuilder

    這個類可以被實例化、使用和丟棄,一旦創建了SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 實例的最佳作用域是方法作用域(也就是局部方法變量)。 可以重用 SqlSessionFactoryBuilder 來創建多個 SqlSessionFactory 實例。

    SqlSessionFactory

    SqlSessionFactory 一旦被創建就應該在應用的運行期間一直存在,沒有任何理由丟棄它或重新創建另一個實例。 使用 SqlSessionFactory 的最佳實踐是在應用運行期間不要重復創建多次,多次重建 SqlSessionFactory 被視為一種代碼“壞習慣”。因此 SqlSessionFactory 的最佳作用域是"應用作用域"。即隨著應用程序的生命周期一直存在。這種“存在于整個應用運行期間,并且只存在一個對象實例”。例如使用單例模式。

    SqlSession

    每個線程都應該有它自己的 SqlSession 實例。SqlSession 的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。 絕對不能將 SqlSession 實例的引用放在一個類的靜態域,甚至一個類的實例變量也不行。為了確保每次都能執行關閉操作,你應該把這個關閉操作放到 finally 塊中。

    將其代入實例中封裝為MyBatis工具類和實

    工具類

    package com.my.dao;
     
    import java.io.IOException;
     
    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 MybatisDBUtils {
        private static SqlSessionFactory factory = null;
        static {
            try {
                SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
                factory = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        public static SqlSession getSqlSession() {
            SqlSession session = null;
            if(factory != null) {
                session = factory.openSession();
            }
            return session;
        }
     
    }

    實現類

    public class Test04 {
        public static void main(String[] args) {
            //每1000條執行一次批處理,并獲取主鍵回填
            try (SqlSession sqlSession = MybatisDBUtils.getBatchSqlSession()) {
                WebsiteMapper websiteMapper = sqlSession.getMapper(WebsiteMapper.class);
                
                for(int i = 1;i <= 10;i++) {
                  Website website = new Website("神碼搜索","www.shenma.com",((int)(Math.random()*10)),"CN");
            }
        }
    }

    到此,關于“基于MyBatis的數據持久化框架如何使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    娄烦县| 清水河县| 浮山县| 龙南县| 含山县| 尉氏县| 资溪县| 五寨县| 花莲县| 竹溪县| 玉屏| 珠海市| 和林格尔县| 祥云县| 吉安县| 儋州市| 本溪| 白城市| 阿坝| 镇江市| 彰化市| 游戏| 武城县| 杂多县| 库尔勒市| 芦溪县| 鱼台县| 五莲县| 伊春市| 曲靖市| 即墨市| 静宁县| 宁德市| 手游| 临沂市| 无极县| 余庆县| 上犹县| 西安市| 南召县| 张掖市|