Mybatis入門(一)

學(xué)習(xí)Mybatis的過程(一)

  • 什么是Mybatis
  • 原生jdbc開發(fā)的總結(jié)
  • Mybatis框架的流程圖
  • Mybatis的學(xué)習(xí)思路

1.什么是Mybatis

Mybatis是一個持久層的框架,開源的的,是Apache下的一個頂級項(xiàng)目,現(xiàn)在這個項(xiàng)目托管到github里面了。點(diǎn)擊傳送門查看這個開源項(xiàng)目。



Mybatis讓程序員把主要的精力放在sql上,自己編寫sql,根據(jù)需要去靈活的編寫。

官網(wǎng)的解釋:

MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。

2.原生jdbc開發(fā)的總結(jié)

先看一段代碼:

    Class Test{
        public static void main(String[] args) {
        
            //數(shù)據(jù)庫連接
            Connection connection = null;
            //預(yù)編譯的Statement,使用預(yù)編譯的Statement提高數(shù)據(jù)庫性能
            PreparedStatement preparedStatement = null;
            //結(jié)果 集
            ResultSet resultSet = null;
            
            try {
                //加載數(shù)據(jù)庫驅(qū)動
                Class.forName("com.mysql.jdbc.Driver");
                
                //通過驅(qū)動管理類獲取數(shù)據(jù)庫鏈接
                connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "mysql");
                //定義sql語句 ?表示占位符
                String sql = "select * from user where username = ?";
                //獲取預(yù)處理statement
                preparedStatement = connection.prepareStatement(sql);
                //設(shè)置參數(shù),第一個參數(shù)為sql語句中參數(shù)的序號(從1開始),第二個參數(shù)為設(shè)置的參數(shù)值
                preparedStatement.setString(1, "王五");
                //向數(shù)據(jù)庫發(fā)出sql執(zhí)行查詢,查詢出結(jié)果集
                resultSet =  preparedStatement.executeQuery();
                //遍歷查詢結(jié)果集
                while(resultSet.next()){
                    System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                //釋放資源
                if(resultSet!=null){
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(preparedStatement!=null){
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(connection!=null){
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
    
            }


    }

單獨(dú)使用jdbc開發(fā)存在的問題:主要是
數(shù)據(jù)庫連接和硬編碼的問題

1、數(shù)據(jù)庫連接,使用時就創(chuàng)建,不使用立即釋放,對數(shù)據(jù)庫進(jìn)行頻繁連接開啟和關(guān)閉,造成數(shù)據(jù)庫資源浪費(fèi),影響 數(shù)據(jù)庫性能。
設(shè)想:使用數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接。

2、將sql語句硬編碼到j(luò)ava代碼中,如果sql 語句修改,需要重新編譯java代碼,不利于系統(tǒng)維護(hù)。
設(shè)想:將sql語句配置在xml配置文件中,即使sql變化,不需要對java代碼進(jìn)行重新編譯。

3、向preparedStatement中設(shè)置參數(shù),對占位符號位置和設(shè)置參數(shù)值,硬編碼在java代碼中,不利于系統(tǒng)維護(hù)。
設(shè)想:將sql語句及占位符號和參數(shù)全部配置在xml中。

4、從resutSet中遍歷結(jié)果集數(shù)據(jù)時,存在硬編碼,將獲取表的字段進(jìn)行硬編碼,,不利于系統(tǒng)維護(hù)。
設(shè)想:將查詢的結(jié)果集,自動映射成java對象。

3.Mybatis框架的流程圖

image

1.SqlMapConfig.xml

是mybatis的全局配置文件,名稱不固定的。
配置數(shù)據(jù)源等,配置映射文件(配置sql語句)

2.SqlSessionFactory

會話工廠,根據(jù)配置文件來創(chuàng)建工廠,創(chuàng)建SqlSession

3.SqlSession

會話,只一個接口,面向用戶(程序員),操作數(shù)據(jù)庫

4.Excutor

執(zhí)行器,是一個接口(基本執(zhí)行器,緩存執(zhí)行器),作用是SqlSession內(nèi)部通過執(zhí)行器操作數(shù)據(jù)庫。

5.mapped statemnt

底層封裝對象,作用對數(shù)據(jù)庫存儲封裝,包括sql語句,輸入?yún)?shù),輸出結(jié)果類型

6.輸入?yún)?shù)類型

java簡單類型,pojo自定義,hashmap

7.輸出結(jié)果類型

java簡單類型,pojo自定義,hashmap

4.Mybatis的學(xué)習(xí)重點(diǎn)

  • Mybatis開發(fā)Dao的兩種方法

    原始的dao開發(fā)(程序需要編寫dao接口和dao的實(shí)現(xiàn)類) (掌握)

    Mybatis的mapper接口(相當(dāng)于dao接口)代理的開發(fā)(掌握)

  • Mybatis的SqlMapConfig.xml配置(全局的配置文件)

  • Mybatis的核心

    Mybatis的輸入映射(掌握)

    Mybatis的輸出映射(掌握)

  • Mybatis的動態(tài)sql(掌握)

  • 高級映射

  • 高級緩存

  • spring和mybatis整合

  • 逆向工程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容