1. 程式人生 > >mybatis入門及環境搭建

mybatis入門及環境搭建

一、mybatis概述

1、mybatis是什麼

(1)MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis,實質上Mybatis對ibatis進行一些改進

(2)MyBatis是一個優秀的持久層框架,它對jdbc的操作資料庫的過程進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如註冊驅動、建立connection、建立statement、手動設定引數、結果集檢索等jdbc繁雜的過程程式碼

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

2、mybatis框架原理

(1)圖解:
這裡寫圖片描述

3、mybatis框架原理分析

(1)mybatis配置檔案,包括Mybatis全域性配置檔案和Mybatis對映檔案,其中全域性配置檔案配置了資料來源、事務等資訊;對映檔案配置了SQL執行相關的 資訊

(2)mybatis通過讀取配置檔案資訊(全域性配置檔案和對映檔案),構造出SqlSessionFactory,即會話工廠

(3)通過SqlSessionFactory,可以建立SqlSession即會話。Mybatis是通過SqlSession來操作資料庫的

(4)SqlSession本身不能直接操作資料庫,它是通過底層的Executor執行器介面來操作資料庫的。Executor介面有兩個實現類,一個是普通執行器,一個是快取執行器(預設)

(5)Executor執行器要處理的SQL資訊是封裝到一個底層物件MappedStatement中。該物件包括:SQL語句、輸入引數對映資訊、輸出結果集對映資訊。其中輸入引數和輸出結果的對映型別包括java的簡單型別、HashMap集合物件、POJO物件型別

二、mybatis環境搭建

1、下載mybatis

2、匯入jar包

(1)mybatis的核心包和依賴包;mysql的驅動包;Junit(非必須)

這裡寫圖片描述

三、mybatis入門案例

1、編寫PO類

public class User {
    private int id;
    private String username;
    private
String sex; private Date birthday; private String address; }

2、編寫全域性配置檔案

(1)位置:src下(classpath),檔名一般:SqlMapConfig.xml
(2)程式碼如下:

<?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>
    <!-- 配置mybatis的環境資訊,與spring整合是,該資訊由spring來配置 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事務控制,由mybatis進行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置資料來源,採用mybatis連線池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" 
                value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>

        </environment>

    </environments>

    <!-- 載入外部配置檔案 -->
    <mappers>
        <mapper resource="User.xml"></mapper>
    </mappers>
</configuration>

3、查詢使用者

(1)查詢使用者配置檔案程式碼:

<?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:名稱空間,對statement的資訊進行管理 -->
<!-- 注意:在mapper代理時,它具有特殊及其重要的作用 -->
<mapper namespace="test">
    <!-- 根據使用者ID查詢使用者資訊 -->
    <!-- select:表示一個MappedStatement物件 -->
    <!-- id:statement的唯一標識 -->
    <!-- #{}:表示一個佔位符 ? -->
    <!-- #{id}:裡面的id表示輸入引數的引數名稱,如果該引數是簡單型別,那麼#{}裡面的引數名稱可以任意 -->
    <!-- parameterType:輸入引數的java型別 -->
    <!-- resultType:輸出結果的所對映的java型別(單條結果所對應的java型別) -->
    <select id="findUserById" parameterType="int" resultType="com.san.model.User">
        select * from user where id=#{id}
    </select>
</mapper>

(2)測試程式碼:

//根據id查詢使用者
    @Test
    public void Test1() throws IOException{
        //全域性配置檔案的位置
        String resource="SqlMapConfig.xml";

        //載入全域性配置檔案
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //建立SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //建立Sqlsession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //呼叫SqlSession的增刪改查方法
        User user=sqlSession.selectOne("test.findUserById",1);
        System.out.println(user);

        //關閉資源
        sqlSession.close();
    }

4、模糊查詢

(1)模糊查詢配置檔案程式碼:

<!-- ${}:表示一個sql的連線符 -->
    <!-- ${value}:裡面的value表示輸入引數的引數名稱,如果該引數是簡單型別,那麼${}裡面的引數名稱必須是value -->
    <!-- ${}這種寫法存在sql注入的風險,所以要慎用!!但是在一些場景下,必須使用${},
    比如排序時,動態傳入排序的列名,${}會原樣輸出,不加解釋 -->
    <!-- 根據使用者名稱模糊查詢 -->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.san.model.User">
        select * from user where username like '%${value}%'
    </select>

(2)測試程式碼:

//呼叫SqlSession的增刪改查方法
        List<User> list=sqlSession.selectList("test.findUserByName","小明");
        System.out.println(list);

5、新增使用者

(1)新增使用者配置檔案程式碼:

<!-- 新增使用者 -->
    <!-- selectKey:查詢主鍵,在標籤內需要輸入查詢主鍵的sql -->
    <!-- order:指定查詢主鍵的sql和insert語句的執行順序,相當於insert語句來說 -->
    <!-- LAST_INSERT_ID:該函式是mysql的函式,獲取自增主鍵的ID,它必須配合insert語句一起使用 -->
    <insert id="insertUser" parameterType="com.san.model.User">
        <selectKey keyProperty="id" resultType="int" order="BEFORE">
            SELECT LAST_INSERT_ID()
        </selectKey>
        insert into user (username,birthday,sex,address)
        values(#{username},#{birthday},#{sex},#{address})
    </insert>

    <!-- 自增主鍵(UUID) -->
    <!-- UUID時,order的值要選擇為before -->
    <insert id="insertUser2" parameterType="com.san.model.User">
        <selectKey keyProperty="id" resultType="string" order="BEFORE">
            SELECT UUID()
        </selectKey>
        insert into user (id,username,birthday,sex,address)
        values(#{id},#{username},#{birthday},#{sex},#{address})
    </insert>

(2)測試:

//獲得sqlSession
        SqlSession sqlSession = sessionFactory.openSession();
        User user=new User();
        user.setUsername("zhangsan");
        user.setAddress("北京");
        user.setSex("1");
        sqlSession.insert("test.insertUser",user);

        //提交事務,不提交不會將事務提交到資料庫,但是自增id還是會佔用
        sqlSession.commit();

6、更新使用者

(1)更新使用者配置檔案程式碼:

<!-- 更新使用者資訊 -->
    <update id="updateUser" parameterType="com.san.model.User"> 
        update user set username=#{username},sex=#{sex} where id=#{id}
    </update>

(2)測試:

        User user=new User();
        user.setUsername("李四");
        user.setId(1);
        user.setSex("男");
        sqlSession.update("test.updateUser",user);

        //增刪改都要提交事務
        sqlSession.commit();

7、刪除使用者

(1)刪除使用者配置檔案程式碼:

<!-- 刪除使用者 -->
    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>

(2)測試:

        sqlSession.delete("test.deleteUser",8);

        //增刪改都要提交事務
        sqlSession.commit();

相關推薦

mybatis入門環境搭建

一、mybatis概述 1、mybatis是什麼 (1)MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis,實質

萌新--關於vue.js入門環境搭建

art 安裝 list 建議 href pack 推薦 新手學 走了 十幾天閉關修煉,惡補了html跟css以及JavaScript相應的基礎知識,恰巧有個群友準備做開源項目,願意帶著我做,但是要求我必須懂vue.js,所以開始惡補vue.js相關的東西。 在淘寶上買了相關

MyBatis入門學習——環境搭建

在MyBatis官方文件上是這樣說的: MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,

(一)MyBatis入門環境搭建

持久層概念與初始MyBatis      MyBatis環境配置 1、持久層概念與初始MyBatis 根據百度給出的感念:“所謂“持久層”,也就是在系統邏輯層面上,專著於實現資料持久化的一個相對獨立的領域(Domain),是把數 據儲存到可掉電式儲存裝置中。持久層是負責

React入門之HelloWorld環境搭建

關注React也已經很久了,一直沒能系統地深入學習,最近準備好好研究一下,並且親自動手做一些實踐。 學習一門語言也好,學習一個框架也好,都是從最初的hello world程式開始的,今天我們也來用React寫一個hello world出來,瞭解一下如何編寫及執

mybatis介紹與環境搭建

mybatis一、不用純jdbc的原因,即缺點。1、數據庫理解,使用時創建,不用時釋放,會對數據庫進行頻繁的鏈接開啟和關閉,造成數據庫的資源浪費,影響數據庫的性能。設想:使用數據庫的連接池。2、將sql語句硬編碼到java代碼中,不利於系統維護。設想:將sql放到配置文件中。3、向preparedstatem

Python零基礎學習系列之二--Python介紹環境搭建

url 軟件包 三方庫 簡單的 lin 文件的 span 高級程序設計 擴展 1-1、Python簡介:  Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年

flask-系統介紹環境搭建1

技術 路由 退出 介紹 電影 登錄 pychar 前臺 處理 1.系統介紹 前臺首頁-電影篩選-電影列表- 播放詳情-評論:收藏-搜索-註冊-登錄-會員中心(修改會員資料,查看評論記錄,登錄日誌,收藏電影)。 後臺-標簽-電影管理-預告-會員-評論-收藏-日誌-權限管理-角

springboot整合mybatis(SSM開發環境搭建)

add bug fin () 3.0 config autoconf tro mysql 0.項目結構: 1.application.properties中配置整合mybatis的配置文件、mybatis掃描別名的基本包與數據源 server.po

Koa2介紹環境搭建

對象 運行 體積 初始 window ini 基於 ddl 執行   Koa2是現在最流行的基於Node.js平臺的web開發框架,它很小,但擴展性很強。Koa給人一種幹凈利落的感覺,體積小、編程方式幹凈。國內很多知名互聯網公司都在使用,BAT(百度、阿裏、騰訊)全部都在使

spring-boot入門之一——環境搭建

技術分享 aging 一次 span left spa acl 自帶 PE 一、版本準備eclipse: Eclipse Mars.2 (4.5.2)maven: Apache Maven 3.5.3spring boot:

NFS應用場景環境搭建

環境 上一個 nfs 光盤掛載 images sta process nfs應用 install 有LAMP架構的叫lamp 另一臺虛擬機叫luwenyue1.把兩臺虛擬機改成不同名字的虛擬機vi /etc/hostname一個用虛擬機用搭好LAMP架構的虛擬機,一個用新

新手學習Linux——NFS應用場景環境搭建

log 創建 watermark 51cto 輸入 ado dir ins 共享目錄 以上為解釋神圖。 ———————————————————分割線———————————————————一、接下來我們的操作在服務端進行。1、首先準備兩臺配置好IP地址和yum源的虛擬機。 2

MFS分布式文件系統的原理環境搭建

故障 firewalld 保存 tap 訪問 擴容 ports x86 pty 概述: NFS網絡文件系統在性能與容量上無法勝任更高的要求,而本篇講的MFS(MooseFS)可以提供容量PB級別的共享存儲,無需昂貴的專業硬件服務器,自身就擁有冗余功能及動態擴容功能,能保證數

Python數據分析與挖掘第一篇—基本介紹環境搭建

sim python 模塊 功能 對數 numpy 分析 沒有 兩種 一,數據分析與挖掘簡介   所謂數據分析,是對已有的數據進行分析,提取一些有價值的信息,比如平均數,標準差等。而數據挖掘,是對大量的信息進行分析和挖掘,得到一些未知的,有價值的信息。如今日頭條類的新聞推送

RN入門-01-環境搭建

環境搭建(作業系統Mac-10.13.4 ) 一:軟體安裝  1.1 Homebred Homebrew, Mac系統的包管理器,用於安裝NodeJS和一些其他必需的工具軟體。 /usr/bin/ruby -e "$(curl -fsSL https://raw

微信公共號(企業號)開發框架-gochat的從零開始教程(一): 前期準備環境搭建

最近開發了一個基於go語言的微信公共號/企業號的開發框架——gochat, 可以用來進行微信公共號/企業號的快速開發 gochat的架構是在 beego的基礎上完成的,而beego是一個非常強大的HTTP 框架框架(騰訊、京東、360、微博都有平臺使用了beego),

Python介紹環境搭建

1-1、Python簡介:  Python是一種解釋型、面向物件、動態資料型別的高階程式設計語言。Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年。像Perl語言一樣, Python 原始碼同樣遵循 GPL(GNU General Public

JAVA WEB快速入門環境搭建

公司 linux下 前言 變量 允許 簡要介紹 web開發 ces localhost 前言 我是一直致力於:.NET技術棧、WEB前端、架構設計相關的開發與管理工作,但因國內大環境影響及公司技術方向發生轉變(由.NET全部轉為JAVA),需要熟練掌握JAVA WEB相關

jQuery基礎—1、jQuery概述環境搭建

1.1JQuery是什麼? jQuery在javascript基礎上開發出來的,對javascript進行了封裝,功能更強大,操作更方便的一種javascript庫。 JQuery=Javascript + Query(查詢)= 通過Javascript從文件中查詢元素,並對其進行操作。