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

mybatis框架介紹

前端時間學了mybatis,現在終於擠出時間來整理下了.

1.mybatis介紹:

1.MyBatis 原來是apache的一個開源專案ibatis,後來改名為mybatis,所以說ibatis和mybatis是同一個概念.MyBatis 是一款優秀的持久層框架,它支援定製化 SQL儲存過程以及高階對映。

2.物件關係對映(ORM)的持久化層框架,這點上它和hibernate一樣,不一樣的是mybatis是半自動化實現sql語句,hibernate是全自動化實現sql語句,因為是半自動化,所以自己寫的sql是不能跨資料庫的,開發效率較hibernate低些.MyBatis 可以使用簡單的 XML

註解來配置和對映原生資訊,將介面和 Java 的 POJOs(普通的 Java物件)對映成資料庫中的記錄。

2.mybatis的功能架構

我們把Mybatis的功能架構分為三層

(1)API介面層:提供給外部使用的介面API,開發人員通過這些本地API來操縱資料庫。介面層一接收到呼叫請求就會呼叫資料處理層來完成具體的資料處理。Mapper包,給外部呼叫的介面,方法名進行對映

(2)資料處理層:負責具體的SQL查詢、SQL解析、SQL執行和執行結果對映處理等。它主要的目的是根據呼叫的請求完成一次資料庫操作。採用.xml檔案或直接採用註解寫sql

(3)基礎支撐層:負責最基礎的功能支撐,包括連線管理、事務管理、配置載入和快取處理

,這些都是共用的東西,將他們抽取出來作為最基礎的元件。為上層的資料處理層提供最基礎的支撐。

3.mybatis的優點

  • 簡單易學:本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar檔案+配置幾個sql對映檔案易於學習,易於使用,通過文件和原始碼,可以比較完全的掌握它的設計思路和實現。

  • 靈活:mybatis不會對應用程式或者資料庫的現有設計強加任何影響。 sql寫在xml裡,便於統一管理和優化。通過sql語句可以滿足操作資料庫的所有需求。

4.mybatis的實現 

1:先匯入mybatis用的jar包:mybatis的包以及你要連線資料庫的包(我用的是mysql資料庫),因為我的是在maven環境下進行開發,所以我就要在pom.xml

引入這倆個依賴.

 <!-- 引入對mybatis的依賴 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>


        <!-- 引入對mysql-connector的依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>

2.配好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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/struts2"/>
                <property name="username" value="root"/>
                <property name="password" value="sasa"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--放對映實體xml-->
        <mapper resource="com/zking/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

dataSource標籤:資料來源,裡面寫資料庫的連線地址,驅動,賬號,密碼。

Mappers標籤:載入所需的寫入了sql語句的配置檔案。

Mybatis框架使用的是面向介面程式設計所以我們還需要準備介面

第一步:寫一個介面類:

package com.zking.dao;

import com.zking.pojo.T_user;

import java.util.List;

public interface IUserMapper {
    /**
     * 查詢所有根據使用者姓名
     * @param name
     * @return
     */
    public List<T_user> findUserByname(String name);
}

第二步:寫一個有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">
<mapper namespace="com.zking.dao.IUserMapper">
    <select id="findUserByname" resultType="com.zking.pojo.T_user" parameterType="java.lang.String">
        select * from t_user where user_name like '%${value}%'
    </select>
</mapper>

這個配置檔案中要注意mapper標籤中的 namespace要放你介面的相對路徑

還有方法的id要與你的方法名相同

這個配置檔案中寫的是select方法需要特別注意的有sql標籤以及include標籤因為這兩個標籤與資料庫的優化有關。

Select在sql語句中是經常被我們寫的語句,每當類名過多時我們可能會將這些類名替換成一個*但是這種做法是不太好的,因為*在sql語句中代表的是所有,所以我們每用一次*都代表這資料庫將它的所有東西都查詢過了一次。所以說用*這種方法不可取,但是在SQL語句中select出現的次數又過多,如果類名比較多的話會比較麻煩,所以Mybatis框架給我們提供了一個sql標籤,我們可以將這些列名存入到sql標籤中然後通過include標籤取出來使用。

注意:我們寫jdbc時書寫的sql語句進入預編譯時它的佔位符時?,在Mybatis中#{}代表佔位符。

在Mybatis框架中關於sql配置檔案還有許多標籤:比如insert,delete,update即對應這CURD

這寫標籤中有兩個屬性需要注意:

result Type:這個代表著執行這個方法返回的型別

ParameterType:代表這執行這個方法需要放入的引數。

第三步:具體的使用

 @Test
    public void findUserByname()throws Exception{
        //載入mybatis核心配置檔案 生成sqlsessionfactory物件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-Config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2:通過sqlsessionFactory獲得sqlsession物件
        SqlSession sqlSession =sqlSessionFactory.openSession();
        //獲取介面 呼叫方法 呼叫dao層的方法相當於調xml配置的那個方法id
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        List<T_user> lu=mapper.findUserByname("a");
        System.out.println(lu.size());

    }

要注意sqlsession的執行緒是不安全的所以sqlsession是不能共享的所以使用一次就需要關閉一次。

以上就是我自學Mybatis框架所得到的初級感悟。希望能對你們有用