1. 程式人生 > >mybatis框架入門介紹

mybatis框架入門介紹

mybatis(持久層框架)jdbc

第一天

課程計劃

  1. 總結jdbc開發的問題
  2. mybatis介紹
  3. mybatis入門程式
  4. mybatis框架原理
  5. mybatis兩種開發方法
  6. mybatis核心配置檔案
  7. mybatis與hibernate比較

 

  1. 總結jdbc開發的問題
    1. jdbc開發的步驟
  1. 載入驅動
  2. 建立資料庫連線物件
  3. 定義sql語句
  4. 建立statement語句物件
  5. 設定引數
  6. 執行
  7. 處理結果集
  8. 釋放資源

 

    1. jdbc示例程式
      1. 準備環境

jdk:1.7

ide:eclipse

資料庫:mysql

 

      1. 準備資料

 

      1. 建立專案

 

      1. 加入資料庫驅動依賴到lib目錄

 

      1. 編寫程式碼

package cn.bdqn.test;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

import org.junit.Test;

 

public class MySqlConnectionTest {

//測試傳統訪問資料庫方式

@Test

public void testMySqlConnection() {

     try

{

         //1.載入驅動

         Class.forName("com.mysql.jdbc.Driver");

         //2.建立資料庫連線物件

         Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbqn", "root", "root");

         //3.定義sql語句

         String sql="select * from user where id=?";

         //4.建立statement語句物件

         PreparedStatement psmt  = connection.prepareStatement(sql);

         //5.設定引數

         psmt.setInt(1, 10);

         //6.執行

         ResultSet resultSet = psmt.executeQuery();

         //7.處理結果集

         while(resultSet.next()) {

             System.out.println("使用者id:"+resultSet.getString("id")+"使用者名稱:"+resultSet.getString("username"));

         }

         //關閉資源連線

         resultSet.close();

         psmt.close();

         connection.close();

     } catch (Exception e) {

         e.printStackTrace();

     }

}

}

 

執行結果

:

    1. 總結jdbc的問題
  1. 頻繁建立資料庫連線物件、和釋放。容易造成系統資源的浪費,影響系統性能。在企業專案中可以使用連線池解決這個問題。但是使用jdbc需要自己編寫連線池。mybatis內部已經提供了連線池。
  2. sql語句定義、引數設定、結果集處理存在硬編碼。在企業專案中sql語句變化的可能性較大,一旦發生變化,需要修改java程式碼,系統需要重新編譯,重新發布。不好維護。
  3. 結果集處理存在重複程式碼,處理麻煩。如果可以對映為java物件會比較方便。

 

  1. mybatis介紹

mybatis是Apache軟體基金會下的一個開源專案,前身是Ibatis框架。2010年這個專案由apache 軟體基金會遷移到google code下,改名為mybatis。2013年11月又遷移到了github(https://github.com/mybatis/mybatis-3/releases)。

mybatis是一個持久層的框架,是對JDBC操作資料庫的封裝,使開發者只需要關注業務本身,不需要花費精力去處理載入驅動、建立資料庫連線物件、建立statement語句物件、引數設定、結果集處理等一系列繁雜的過程程式碼。

mybatis通過xml或註解進行配置,將java物件與sql語句中的引數自動對映生成最終執行的sql語句,並將sql語句執行結果自動對映成java物件,返回給業務層(service)應用。

 

說明:

  1. mybatis早期版本叫Ibatis,目前託管在github
  2. mybatis是物件jdbc的封裝,是一個持久層的框架
  3. mybatis是通過xml或者註解進行配置,完成java物件與sql語句的對映(對應關係)。

 

  1. mybatis入門程式
    1. 需求

實現使用者表(user)的增、刪、改、查操作(CRUD)。

  1. 根據使用者id查詢使用者
  2. 根據使用者名稱稱模糊查詢使用者
  3. 新增一個使用者
  4. 根據使用者id修改使用者
  5. 根據使用者id刪除使用者

 

    1. 需求實現
      1. 在lib目錄,加入mybatis框架依賴包

 

      1. 準備配置檔案
        1.  mybatis-config.xml

說明:它是mybatis框架的主配置檔案。檔案的名稱可以進行修改。

<?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是我們框架的根標籤  -->

<configuration>

    <!-- 配置框架的執行環境 -->

    <environments default="development">

        <environment id="development">

            <!-- 配置事務管理器   這裡預設JDBC -->

            <transactionManager type="JDBC"/>

            <!-- 資料來源配置  mybatis內部預設提供的資料庫連線池  POOLED -->

            <dataSource type="POOLED">

                <!-- 連線資料庫的四要素 -->

                <property name="driver" value="com.mysql.jdbc.Driver"/>

                <property name="url" value="jdbc:mysql://localhost:3306/dbqn"/>

                <property name="username" value="root"/>

                <property name="password" value="root"/>

            </dataSource>

        </environment>

    </environments>

</configuration>

 

        1. log4j.properties

# 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

 

      1. 編寫使用者pojo

package cn.bdqn.pojo;

import java.util.Date;

public class User {

     private Integer id; // 使用者id

     private String username; // 使用者名稱

     private Date birthday; // 出生日期

     private String sex; // 性別

     private String address; // 家庭住址

    public User() {

        super();

    }

    public Integer getId() {

        return id;

    }

    public void setId(Integer id) {

        this.id = id;

    }

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public Date getBirthday() {

        return birthday;

    }

    public void setBirthday(Date birthday) {

        this.birthday = birthday;

    }

    public String getSex() {

        return sex;

    }

    public void setSex(String sex) {

        this.sex = sex;

    }

    public String getAddress() {

        return address;

    }

    public void setAddress(String address) {

        this.address = address;

    }

    //重寫輸出使用者資訊  toString方法

    @Override Shift+alt+s+s

    public String toString() {

        return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="

                + address + "]";

    }

   

}

 

 

      1. 準備sql語句

select * from `user` where id=10

 

      1. 準備mapper對映檔案

說明:它是用於配置java物件與sql語句的對應關係。

<?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 相當於java語言中的包 (用以防止sql語句名稱衝突)實現sql語句隔離

 -->

<mapper namespace="test">

    <!-- mybatis框架針對資料庫的每一種不同的操作提供了相應的標籤

         分別是: select delete insert update

     -->

     <!-- select標籤

     id 用於標識該sql語句的唯一識別符號

     parameterType 輸入引數型別  用於指定傳入sql語句的引數型別

     resultType    輸出引數型別  用於執行執行sql語句返回結果型別

     #{id}         佔位符   相當於jdbc中的  ?

      -->

    <select id="queryUserById" parameterType="int" resultType="cn.bdqn.pojo.User">

        select * from user where id=#{id}

     </select>

</mapper>

 

      1. 在mybatis-config.xml檔案中,載入UserMapper.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是我們框架的根標籤  -->

<configuration>

    <!-- 配置框架的執行環境 -->

    <environments default="development">

        <environment id="development">

            <!-- 配置事務管理器   這裡預設JDBC -->

            <transactionManager type="JDBC"/>

            <!-- 資料來源配置  mybatis內部預設提供的資料庫連線池  POOLED -->

            <dataSource type="POOLED">

                <!-- 連線資料庫的四要素 -->

                <property name="driver" value="com.mysql.jdbc.Driver"/>

                <property name="url" value="jdbc:mysql://localhost:3306/dbqn"/>

                <property name="username" value="root"/>

                <property name="password" value="root"/>

            </dataSource>

        </environment>

    </environments>

    <mappers>

        <!-- mappper標籤 載入對映檔案到主配置檔案

        resource用於指定對映檔案的位置

         -->

        <mapper resource="cn/bdqn/dao/UserMapper.xml" />

    </mappers>

</configuration>

 

      1. 編寫測試程式碼

@Test

    public void queryUserById() throws Exception {

        //載入框架主配置檔案

        InputStream ins = Resources.getResourceAsStream("mybatis-config.xml");

        //建立SqlSessinFactoryBuilder物件 用於讀取配置檔案

        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();

        //呼叫build()方法 讀取配置檔案

        SqlSessionFactory sqlSessionFactory = builder.build(ins);

        //使用工廠物件  建立SqlSession物件

        /**

         * SqlSession物件  相當於 jdbc中的Connection物件

         * 該物件提供了相應的操作資料的api方法

         */

        SqlSession sqlSession = sqlSessionFactory.openSession();

        //根據使用者id查詢使用者資訊

        /**

         * 第一個引數是執行的sql語句  名稱空間+sql語句id

         * 第二個引數 sql語句執行的引數

         */

        User user = sqlSession.selectOne("test.queryUserById", 10);

        //輸出使用框架查詢出的物件

        System.out.println(user);

   }

 

    1. 其它需求實現
      1. 根據使用者名稱稱模糊查詢使用者
        1. 準備sql語句

select * from `user` where username like '%小%'

 

        1. 配置對映檔案

<!-- 根據使用者名稱稱模糊查詢使用者 -->

     <select id="queryUserByName" parameterType="String" resultType="cn.bdqn.pojo.User">

        select * from user where username like #{username}

 </select>

 

        1. 編寫測試程式碼

@Test

    public void queryUserByUsername() throws Exception {

        //載入主配置檔案

        InputStream ins = Resources.getResourceAsStream("mybatis-config.xml");

        //讀取主配置檔案  並建立SqlSessionFactory物件

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ins);

        //建立SqlSession物件

        SqlSession sqlSession = sqlSessionFactory.openSession();

        //呼叫查詢資料列表方法

        List<User> userList = sqlSession.selectList("test.queryUserByName", "%%");

        //迴圈遍歷 輸出列表資料

        for (User user : userList) {

            System.out.println(user);

        }

}

 

        1. 使用字串拼接符${}拼接引數

 <!-- 根據使用者名稱稱模糊查詢使用者 -->

 <select id="queryUserByName" parameterType="string" resultType="cn.bdqn.po.User">

    <!-- select * from `user` where username like #{username} -->

   

    <!-- where username like '%小%',說明:

        ${value}:使用字串拼接符拼接引數

     -->

    select * from `user` where username like '%${value}%'

 </select>

 

        1. 佔位符#{}與字串拼接符${}區別
  1. 佔位符#{},相當於jdbc中的問號。當引數傳遞的是java簡單型別(八種基本型別+字串String)的時候,花括號中的內容可以是任意字串。
  2. 字串拼接符${},當引數傳遞的是java簡單型別的時候,花括號中的內容只能是:value。
  3. 佔位符#{}與字串拼接符${},當引數傳遞的是pojo的時候,花括號中的內容都是pojo的屬性。
      1. 新增一個使用者
        1. 準備sql語句

insert into `user`(id,username,birthday,sex,address) values(2,'小李飛刀','2018-04-08','1','明朝人')

 

        1. 配置對映檔案

<!-- 新增使用者,說明:

    insert標籤:用於放置新增sql語句

    #{id}:字串拼接符,當引數傳遞的是pojo的時候,花括號中的內容是pojo的屬性

  -->

  <insert id="insertUser" parameterType="cn.bdqn.pojo.User">

    insert into `user`(id,username,birthday,sex,address)

    values(#{id},#{username},#{birthday},#{sex},#{address})

  </insert>

 

 

        1. 編寫測試程式碼

/**

 * 測試新增使用者

 */

@Test

public void insertUserTest(){

    

     // 1.建立sqlSession物件

     SqlSession sqlSession = this.sqlSessionFactory.openSession();

    

     // 2.使用sqlSession物件,呼叫方法執行

     /**

      * insert方法:新增記錄

      * statement:執行的sql語句(名稱空間+"."+sql語句id)

      * parameter:傳入的引數值

      */

     // 建立使用者物件

     User user = new User();

     user.setId(3);

     user.setUsername("林姑娘");

     user.setBirthday(new Date());

     user.setSex("2");

     user.setAddress("明朝人");

    

     sqlSession.insert("test.insertUser", user);

    

     // 3.釋放資源

     sqlSession.close();

    

}

 

問題:java程式執行成功,但是資料庫中沒有記錄。原因是沒有提交事務。

 

        1. 提交事務
          1. 方式一

/**

 * 測試新增使用者

 */

@Test

public void insertUserTest(){

    

     // 1.建立sqlSession物件

     SqlSession sqlSession = this.sqlSessionFactory.openSession();

    

     // 2.使用sqlSession物件,呼叫方法執行

     /**

      * insert方法:新增記錄

      * statement:執行的sql語句(名稱空間+"."+sql語句id)

      * parameter:傳入的引數值

      */

     // 建立使用者物件

     User user = new User();

     user.setId(3);

     user.setUsername("林姑娘");

     user.setBirthday(new Date());

     user.setSex("2");

     user.setAddress("明朝人");

    

     sqlSession.insert("test.insertUser", user);

    

     // 資料庫中提交事務:commit

     // 手動提交事務

     sqlSession.commit();

    

     // 3.釋放資源

     sqlSession.close();

    

}

 

          1. 方式二

/**

 * 測試新增使用者

 */

@Test

public void insertUserTest(){

    

     // 1.建立sqlSession物件

     //SqlSession sqlSession = this.sqlSessionFactory.openSession();

    

     /**

      * 建立sqlSession的物件,指定自動提交事務。true:自動提交;false:不提交。預設是false

      */

     SqlSession sqlSession = this.sqlSessionFactory.openSession(true);

    

     // 2.使用sqlSession物件,呼叫方法執行

     /**

      * insert方法:新增記錄

      * statement:執行的sql語句(名稱空間+"."+sql語句id)

      * parameter:傳入的引數值

      */

     // 建立使用者物件

     User user = new User();

     user.setId(4);

     user.setUsername("林姑娘");

     user.setBirthday(new Date());

     user.setSex("2");

     user.setAddress("明朝人");

    

     sqlSession.insert("test.insertUser", user);

    

     // 資料庫中提交事務:commit

     // 手動提交事務

     //sqlSession.commit();

    

     // 3.釋放資源

     sqlSession.close();

    

}

 

說明:自動提交事務的方式,只要sql語句一旦執行,就提交了事務。如果同時有多個操作,需要使用手動提交事務的方式。

 

      1. 根據使用者id修改使用者
        1. 準備sql語句

update `user` set username='李尋歡',sex='2' where id=2

 

 

        1. 配置對映檔案

<!-- 根據使用者id修改使用者,說明:

    update:用於放置修改sql語句

   -->

   <update id="updateUserById" parameterType="cn.bdqn.pojo.User">

        update `user`

        set username=#{username},sex=#{sex} where id=#{id}

   </update>

 

        1. 編寫測試程式碼

/**

 * 測試根據使用者id修改使用者

 */

@Test

public void updateUserByIdTest(){

     // 1.建立sqlSession物件

     SqlSession sqlSession = this.sqlSessionFactory.openSession(true);

    

     // 2.使用sqlSession物件,呼叫方法執行

     /**

      * update方法:修改記錄

      * statement:執行的sql語句(名稱空間+"."+sql語句id)

      * parameter:傳入的引數值

      */

     // 建立使用者物件

     User user = new User();

     user.setId(2);

     user.setUsername("小李飛刀");

     user.setSex("1");

    

     sqlSession.update("test.updateUserById", user);

    

     // 3.釋放資源

     sqlSession.close();

}

 

      1. 根據使用者id刪除使用者
        1. 準備sql語句

delete from `user` where id=3

相關推薦

mybatis框架入門介紹

mybatis(持久層框架)jdbc 第一天 課程計劃 總結jdbc開發的問題 mybatis介紹 mybatis入門程式 mybatis框架原理 mybatis兩種開發方法 mybatis核心配置檔案 mybatis與hibernate比較

Mybatis框架入門

https 關閉 public cursor 執行器 token Go bold batis Mybatis官網:http://www.mybatis.org/mybatis-3/ Mybatis的介紹 Mybatis是一個操作數據庫的框架。最開始叫做ibatis

MyBatis框架入門小案例(關於用mybatis框架對數據庫的增刪改查)

throw gets ioe ssa 靜態代碼塊 文件 boolean 實現 where 1.新建一個maven項目,建好相對應的包,在https://mvnrepository.com中導入MyBatis需要的依賴,復制到配置文件中 2.在resources文件下

MyBatis框架入門基本開發步驟

1、引入mybatis包,同時使用資料庫jar包也需要引入     a、mybatis-3.3.0.jar     b、資料庫jar 2、編寫mybatis配置檔案configuration.xml,配置資料庫相關連線,以及對映資原

MyBatis框架入門(一)

                                         第一章 MyBatis簡介 要有核心配置檔案,要有資料模型對應的mapper。 通過以上的兩個元件就能產生SqlSessionFactory,這個工廠能生產出SqlSession,就能使

mybatis框架入門程式:演示通過mybatis實現資料庫的模糊查詢操作

1. mybatis的基本準備操作見我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2. 根據使用者名稱查詢使用者資訊: (1)對映檔案:   在User.xml中新增: <!-- 模糊查詢 返回結果可能

iOS7新JavaScriptCore框架入門介紹

原文地址http://blog.iderzheng.com/introduction-to-ios7-javascriptcore-framework/ 前陣子,Apple正式釋出了新的iOS 7系統,最大最直觀的改變在於介面變得小清新範了,我也提到《iOS,你真的越來越像Androi

mybatis框架——入門

sed pri 操作 ride inpu 框架 統一 字段 ESS 什麽是mybatis框架?   MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBati

(一)log4j框架入門介紹與使用

一.日誌框架的作用       使用日誌框架的好處顯而易見,方便、自在、功能強大能夠滿足各種需求,不好的地方也是有的,比如:如果你也進行了試驗你會發現,程式變慢了,需要一定的時間和精力作為學習的成本。       能夠控制日誌資訊想

Mybatis框架入門學習(一)

什麼是MyBatis?        MyBatis是一個支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始對映,將介面和Java

Java - Struts框架教程 Hibernate框架教程 Spring框架入門教程(新版) sping mvc spring boot spring cloud Mybatis

java ee cloud pac .cn java get pin nat 輕量級 https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html

MyBatis 框架之快速入門程序

用戶 框架 oot utf-8 文章 puts inter RM sco 一、使用 IDEA 快速創建 Maven 項目 關於如何快速創建 Maven 項目,這個可以參考下面這篇文章: Maven 項目管理工具基礎入門系列(一) 二、快速配置 MyBatis 依賴 jar

MyBatis入門介紹

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

MyBatis框架簡單入門

· MyBatis 起步: (1)MyBatis 是一個優秀的資料庫持久化框架 (2)可以解決java中進行JDBC操作時的繁雜步驟 將物件作為SQL的引數傳入 將查詢的結果轉換為Java物件 (3)

入門Mybatis框架

一、思路: XML方法: 第一步:建立一個數據庫,名字為frank;在該資料庫中建立一張資料表,名字為users;該表具有3個欄位,分別是整形的id;varchar型別的name;int型別的age。 Create database frank;(建立資料庫) Create tabl

30分鐘入門MyBatis框架學習

       當專案框架SSH(spring、Struts、Hibernate)日落西山時,SSM(spring、SpringMVC、MyBatis)就大行其道,大部分專案都漸漸轉至SSM,因此MyBatis也成了Java程式設計師的必學知識,本文就mybat

新手入門java中Spring+SpringMVC+MyBatis框架整合詳細步驟

Springmvc+spring+mybatis環境搭建 注意:這裡我是用Spring的famerwork的參考文件聯合搭建 搭建spring環境 Spring的基本包+SpringMVC基本+MyBatis基本+mybatis-spring整合,增加tx包,aop包,c

mybatis框架介紹

前端時間學了mybatis,現在終於擠出時間來整理下了. 1.mybatis介紹: 1.MyBatis 原來是apache的一個開源專案ibatis,後來改名為mybatis,所以說ibatis和mybatis是同一個概念.MyBatis 是一款優秀的持久層框架,它支援定

MyBatis入門介紹,鳳凰涅槃:從 iBatis 到 MyBatis

       對於從事 Java EE 的開發人員來說,iBatis 是一個再熟悉不過的持久層框架了,在 Hibernate、JPA 這樣的一站式物件 / 關係對映(O/R Mapping)解決方案盛行之前,iBaits 基本是持久層框架的不二選擇。即使在持久層框架層出不

Mybatis框架學習1:入門

一框架介紹 1.Mybatis介紹 ​ MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis。是一個基於Java的持久層框架。 ​ Mybatis本質和Hiberna