1. 程式人生 > >day61_Mybatis學習筆記_01

day61_Mybatis學習筆記_01

  • 今天內容安排:
    • 1、mybatis的介紹
    • 2、分析原生態jdbc程式中存在的問題
    • 3、mybatis的框架原理(重點)
    • 4、入門程式
      • 訂單商品案例(使用者表)
    • 5、Mybatis開發dao的方式(重點)
      • a) 原始dao的開發方式(開發dao介面和dao實現類,由ibatis遺留下來的風格)
      • b) Mapper代理的開發方式(推薦方式,開發mapper介面(相當於dao介面))
    • 6、全域性配置檔案
    • 7、對映檔案(重點)
      • a) 輸入對映
      • b) 輸出對映
      • c) 動態sql
    • 8、mybatis和hibernate的區別及應用場景

1、mybatis的介紹

  • mybatis就是一個封裝的jdbc的持久層框架,它和hibernate都屬於ORM(Object Relational Mapping)框架,但是具體的說,hibernate是一個完全的ORM框架,而mybatis是一個不完全的ORM框架。
  • mybatis讓程式設計師只關注sql本身,而不需要去關注如:註冊驅動、建立connection、建立statement、手動設定引數、結果集檢索等jdbc繁雜的過程程式碼。
  • mybatis會將輸入引數輸出結果進行對映。而不是把物件關係對映成sql

詳解如下:

    MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis,實質上Mybatis對ibatis進行一些改進。 
    MyBatis是一個優秀的持久層框架,它對jdbc的操作資料庫的過程進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如:註冊驅動、建立connection、建立statement、手動設定引數、結果集檢索等jdbc繁雜的過程程式碼。
    Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,並通過java物件和statement中的sql進行對映生成最終執行的sql語句,最後由mybatis框架執行sql並將結果對映成java物件並返回。

2、分析原生態jdbc程式中存在的問題

2.1、原生態Jdbc程式程式碼

    public static void main(String[] args{
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            // 1、載入資料庫驅動
            Class.forName("com.mysql.jdbc.Driver");
            // 2、通過驅動管理類獲取資料庫連結
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8""root""root");
            // 3、定義sql語句,?表示佔位符
            String sql = "select * from user where username = ?";
            // 4、獲取預處理statement物件
            preparedStatement = connection.prepareStatement(sql);
            // 5、設定引數,第一個引數為sql語句中引數的序號(從1開始),第二個引數為設定的引數值
            preparedStatement.setString(1"曉藝");
            // 6、向資料庫發出sql執行查詢,查詢出結果集
            resultSet = preparedStatement.executeQuery();
            // 7、遍歷查詢結果集
            while (resultSet.next()) {
                System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 8、釋放資源
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

2.2、Jdbc問題總結

  • 1、資料庫連線頻繁開啟和關閉,會嚴重影響資料庫的效能。
    • 資料庫連線池(全域性配置檔案中)
  • 2、程式碼中存在硬編碼,分別是資料庫部分(建立連線)的硬編碼和SQL執行部分的硬編碼。
    • 資料庫部分:配置檔案(全域性配置檔案中)
    • 和SQL執行部分:配置檔案(對映檔案中)

3、mybatis的框架原理(重點)

3.1、mybatis框架圖

3.2、分析結論

  • 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物件型別。

4、入門程式

  • Mybatis課程的所有程式碼程式將通過一個訂單商品案例來進行講解。
    • 訂單商品案例(使用者表)

4.1、需求

  • 對使用者資訊的增刪改查操作。
    • 1、根據使用者ID來查詢使用者資訊
    • 2、根據使用者名稱稱模糊查詢使用者資訊列表
    • 3、新增使用者
    • 4、刪除使用者(練習)
    • 5、修改使用者(練習)

4.2、環境準備

  • Jdk環境:jdk1.7.0_80
  • Ide環境:Eclipse Oxygen.2 Release (4.7.2)
  • 資料庫環境:MySQL 5X
  • Mybatis:3.2.7

4.2.1、資料庫初始化

4.2.1.1、資料庫指令碼


  1、執行sql_table.sql指令碼,建立資料庫表;
  2、執行sql_data.sql初始化測試資料。

4.2.1.2、資料庫表
訂單商品案例的資料庫指令碼中,總共包含四張表,其中入門程式只使用user表:


使用者表的表結構如下:

4.2.2、下載mybatis

4.3、工程搭建(三步)

4.3.1、第一步:建立java工程

  • 用eclipse建立一個java工程,jdk使用1.7.0_80,新建標準結構

4.3.2、第二步:加入jar包

  • 加入以下四部分jar包,其中junit的jar包,是非必須的。
    • Mybatis核心包
    • Mybatis依賴包(沒有框框的)
    • MySQL驅動包
    • Junit單元測試包(單元測試需要的包)
    • 之後新增至構建路徑

4.3.3、第三步:新增log4j.properties檔案

  Mybatis使用的日誌包是log4j的,所以需要新增log4j.properties
  在classpath下建立log4j.properties如下:
  檔案內容可以從mybatis-3.2.7.pdf中拷貝

# Global logging configuration
log4j.rootLogger=debug, stdout
# 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

  日誌級別在開發階段設定成debug,在生產階段設定成info或者error。

4.4、程式設計步驟

  • 1、建立PO類,根據需求建立;
  • 2、建立全域性配置檔案SqlMapConfig.xml
  • 3、編寫對應的對映檔案;
  • 4、載入對映檔案,在SqlMapConfig.xml中進行載入;
  • 5、編寫測試程式,即編寫Java程式碼,連線並操作資料庫。 思路:
    • a) 讀取配置檔案;
    • b) 通過SqlSessionFactoryBuilder建立SqlSessionFactory會話工廠
    • c) 通過SqlSessionFactory建立SqlSession
    • d) 呼叫SqlSession的操作資料庫方法
    • e) 關閉SqlSession

4.5、程式碼開發

4.5.1、建立PO類

  • 建立的po類的屬性要和資料庫中表的列名一致(如果表中的列名是帶有下劃線,那麼po類中對應的的屬性名要採用駝峰式命名)。

User.java類如下:

public class User {
    private int id;
    private String username; // 使用者姓名
    private String sex; // 性別
    private Date birthday; // 生日
    private String address; // 地址

    // getter和setter方法

4.5.2、建立全域性SqlMapConfig.xml配置檔案

  在classpath下,建立SqlMapConfig.xml檔案,該檔名稱不是固定不變的。
  SqlMapConfig.xml(檔案頭可以從mybatis-3.2.7.pdf文件的2.1.2小節中拷貝)
SqlMapConfig.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>
    <!-- 配置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>
</configuration>

4.5.3、需求開發

  在config目錄下,建立普通資料夾sqlmap。在sqlmap目錄下,建立User.xml對映檔案(這種命名規範是由ibatis遺留下來)。
  Mybatis的對映檔案頭(可以從mybatis-3.2.7.pdf檔案中拷貝)
User.xml


            
           

相關推薦

day61_Mybatis學習筆記_01

今天內容安排: 1、mybatis的介紹 2、分析原生態jdbc程式中存在的問題 3、mybatis的框架原理(重點) 4、入門程式 訂單商品案例(使用者表) 5、Mybatis開發dao的方

React學習筆記_01

壓縮 替換 log -s 直接 快速構建 使用 cal font 使用Facebook的create-react-app快速構建React開發環境 前言: create-react-app:來自Facebook官方的零配置命令行工具 create-react-app是

Ajax學習筆記_01

通過 xmlhttp orm imp 函數 java AD 交互 thead Ajax是一種方法,而不是一種編程語言。語言的話,用js就足夠了。 首先需要創建一個XMLHttpRequest對象,這個對象的方法包括: abort(); getAllResponseHe

Flask_學習筆記_01

公司有一哥們成立一個Python學習小組,於是果斷加入,雖然講的跳度比較大,但是還是學了點知識的。之前自學過一段時間Python,有點基礎。聽到要講Flask的時候,就有點感興趣了,說是比較輕量級的Web開發框架,嘗試了一下,確實上手比較快。由於也是剛入門,所以沒有資格對其評價,先玩一段時間再說吧。 Fla

Java學習筆記_01

Java程式三步走 原始檔(格式為.java檔案) 編譯器轉化(格式為.class檔案) 直譯器轉化(轉化為機器語言) 第一個java程式 建立檔案javatest.java 編輯程式碼: public class javates

day45_Webservice學習筆記_01

一、課程安排 Webservice就是一種遠端呼叫技術,它的作用就是從遠端系統中獲取業務資料。     客戶端通過網路通訊協議訪問服務端,網路協議包括TCP和UDP兩大通訊協議:    TCP是一種面向連線的協議,提供可靠的資料傳輸,一般服務質量要求比較高的情況,使用這個協議。TCP支援的應用協議主要

day63_SpringMVC學習筆記_01

1、JAVAEE體系結構 JAVAEE體系結構圖如下所示: 2、什麼是springmvc? 什麼是mvc? Model1 Model2 SpringMVC是什麼? SpringMVC是一個web層mvc框架,類似struts2。 SpringMVC和

day67_Redis學習筆記_01

課程計劃 1、Redis的介紹 a) 什麼是NoSql b) NoSql的分類 c) 什麼是Redis d) Redis的歷史發展 e) Redis的應用場景 2、Redis服務端的安裝(重點) 3、Redis客戶端的使用 a) redis自帶客戶端(命令列) b)

Robot Operating System (ROS)學習筆記4---語音控制

sla 語音 出現 tput http 學習 process 輸入 ubun 搭建環境:XMWare Ubuntu14.04 ROS(indigo) 轉載自古月居 轉載連接:http://www.guyuehome.com/260 一、語音識別包 1、安裝

MySQL學習筆記(六)—— MySQL自連接

概念 cor 子查詢 ron 表操作 例子 質量 _id order by 有的時候我們需要對同一表中的數據進行多次檢索,這個時候我們可以使用之前學習過的子查詢,先查詢出需要的數據,再進行一次檢索。 例如:一張products表,有產品id,供應商id(vend_

jquery 深入學習筆記之中的一個 (事件綁定)

color 動態 name his pan mouseover this pre con 【jquery 事件綁定】 1、加入元素事件綁定 (1) 加入事件為當前元素 $(‘p‘).on(‘click‘,function(){ //code here ..

AngularJS入門學習筆記

rect directive 技術分享 attr 兩個 ava 內容 module 大括號 首先聲明: 本博客源自於學習:跟我學AngularJs:AngularJs入門及第一個實例。通過學習,我自己的一些學習筆記。 1.AngularJS的一些基本特性 (1)使用雙大括號

Python學習筆記-2017.5.4

列表 lin 覆蓋範圍 復習 處理 pytho 內部 global txt 本文章記錄學習過程中的細節和心得: 復習所學課程: 1、文件的操作:   打開文件,對文件的操作打開方式有兩種:   第一種:      f = open("test.txt", "r")#以只讀

SAS學習筆記之函數應用

不能 oracle 理解 資料 oracl 函數應用 特殊 put acl 今天在做數據需求的時候遇到一些問題,因為不能夠在數據庫裏面做,僅僅好在SAS裏面實現。這就遇到了一些麻煩,須要使用一些函數實現部分功能,如查找字段中某個特殊字符出現的次數,查找某個字符的位置等,

OpenCV2學習筆記(十五):利用Cmake高速查找OpenCV函數源代碼

one 生成 img log 分享 lan 學習筆記 全部 modules 在使用OpenCV時,在對一個函數的調用不是非常了解的情況下,通常希望查到該函數的官方聲明。而假設想進一步研究OpenCV的函數,則必須深入到源碼。在VS中我們能夠選中想要查

avalonjs 學習筆記1---checkbox

nod item ack lex server ini npm 學習 define 一、vscode 安裝使用 1.vs code+node.js下載安裝 2.在node.js command prompt 中運行 npm install -g live-server 3

Linux學習筆記(三):系統執行級與執行級的切換

查看 用戶操作 回車 water hat ntsysv tde 文件表 config 1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要

Principle of Computing (Python)學習筆記(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

ide out generate depth sku color ati cond with 1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/prin

Java程序猿的JavaScript學習筆記(12——jQuery-擴展選擇器)

type write number article mat 我們 content ace val 計劃按例如以下順序完畢這篇筆記: Java程序猿的JavaScript學習筆記(1——理念) Java程序猿的JavaScript學習筆記(2——屬性復制和繼承) Jav

java學習筆記——String類

通過 ray [] 原理 log spl 2.3 -s 長度 一、概述 ·字符串是一個特殊的對象 ·字符串一旦初始化就不可以被改變 ·String str = "abc"; ·String str1 = new String("abc"); 有什麽區別? package