1. 程式人生 > >MyBatis 使用筆記(1) 簡介、安裝、配置

MyBatis 使用筆記(1) 簡介、安裝、配置

之前做專案的時候,接觸到伺服器端開發,當時伺服器是用SpringMVC做後臺服務 MyBatis做資料庫連線 Mysql資料庫 在那之前 我只接觸過JavaWeb的簡單的Servlet的基本用法,在邊學邊開發的過程中學了一部分SpringMVC和MyBatis的技術 SpringMVC做介面 用到的東西比較少,主要是資料庫處理操作用MyBatis的時候遇到各種問題。現在終於有時間來系統化一些的學習MyBatis。

一:MyBatis 是什麼?

關於這個問題,我想你能看到我這個筆記 你就應該能知道他是什麼。這裡我借用百度百科的一句話來描述 MyBatis是什麼

MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。

二:MyBatis 能幹什麼?

簡單來說,MyBatis能幫助我們快速開發基於Java + 資料庫的程式,能幫助我們快速對映POJO物件和資料庫中的資料 同時支援普通 SQL查詢,儲存過程和高階對映的優秀持久層框架。

三:安裝MyBatis

安裝MyBatis 就是在我們的專案中配置 新增MyBatis 讓我們可以在專案中使用它。

下載後 我們得到一個 mybatis-3.4.2.zip 解壓之後找到 mybatis-3.4.2.jar 這個jar檔案。然後把它新增到我們的Java專案中的lib目錄下再新增一下專案依賴。我們的專案就可以使用MyBatis了。

<注意>


為了能夠讓我們的專案正常連線到資料。我們還需要下載我們所使用的資料庫的連線驅動 比如我使用的是mysql資料庫 我就下載了 mysql-connector-java:5.1.41的驅動新增到專案的依賴庫中。

四:配置MyBatis

MyBatis的配置 相對於其他框架來說應該算是比較簡單的。下面我們就來看看MyBatis的基本配置
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> <!-- JavaBean型別自動對映掃描包配置 Java類型別名 --> <typeAliases> <package name="com.brok1n.web.java.springmvcdemo1.bean"/> <!--<typeAlias alias="User" type="com.brok1n.web.java.springmvcdemo1.bean.User" />--> </typeAliases> <environments default="development"> <!-- 資料庫環境 --> <environment id="development"> <!-- 使用JDBC使用管理 --> <transactionManager type="JDBC"/> <!-- 資料來源配置 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 對映器 --> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>

這就是一個基本的一個檔案的的配置MyBatis的方式,配置了包級別的別名定義,配置了一個MySQL資料庫連線 還配置了一個對映器,我們先了解一下上面的內容。我們下面來看看兩個檔案的方式 具體的配置資訊後面會做詳細介紹
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>

    <properties resource="jdbc.properties" />

    <!--  JavaBean型別自動對映掃描包配置 Java類型別名  -->
    <typeAliases>
        <package name="com.brok1n.web.java.springmvcdemo1.bean"/>
        <!--<typeAlias alias="User" type="com.brok1n.web.java.springmvcdemo1.bean.User" />-->
    </typeAliases>

    <environments default="development">
        <!-- 資料庫環境 -->
        <environment id="development">
            <!-- 使用JDBC使用管理 -->
            <transactionManager type="JDBC"/>
            <!-- 資料來源配置 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 對映器 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
username=root
password=jacklist

好了。這裡是兩個配置檔案來配置MyBatis的方式。可以看到 兩個檔案的這種方式 我們把資料庫連線相關的資訊都配置到了properties檔案中 方便後期配置、維護等工作。 我們現在就用第二種 兩個檔案的這種方式來配置 MyBatis。

我們先來寫一個簡單的例子。讓我們的MyBatis展現一下它的能力。
這裡寫圖片描述

這是我們的基本的專案結構資訊。
我們來看看我們的程式碼。
UserMapper.xml

<?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.brok1n.web.java.springmvcdemo1.mapper.UserMapper">

    <select id="selectUser" resultType="user">
        select * from user where id = #{id}
    </select>

</mapper>

資料庫

id  username  password sex  age  qq     weichart   email
10000   brok1n  12345618  452700765       452700765@qq.com
10004   brok3n  12312318  245586408       245586408@qq.com
10005   brok3n  12312318  245586408       245586408@qq.com
10007   brok3n  12312318  245586408       245586408@qq.com
10008   brok3n  12312318  245586408       245586408@qq.com

DbUtils.java

public class DbUtils {

    private static volatile SqlSessionFactory sqlSessionFactory;

    public static SqlSessionFactory obtionSqlSessionFactory()
    {
        if( sqlSessionFactory == null )
        {
            synchronized (DbUtils.class)
            {
                if(sqlSessionFactory == null )
                {
                    sqlSessionFactory = getSqlSessionFactory();
                }
            }
        }
        return sqlSessionFactory;
    }

    private static SqlSessionFactory getSqlSessionFactory()
    {
        String resource = "mybatis-config.xml";
        SqlSessionFactory sqlSessionFactory = null;
        try {
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build( inputStream );
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSessionFactory;
    }

}

來看看我們的UserMapper.java

public interface UserMapper {
    User selectUser(String id);
}

User.java

public class User {

    private int id;
    private String username;
    private String password;
    private String sex;
    private int age;
    private String qq;
    private String weichart;
    private String email;

    getter and setter...
}

來看看我們的HelloController.java

@Controller
public class HelloController {

    @RequestMapping( value = "selectUser.do", method = RequestMethod.POST)
    @ResponseBody
    public String selectUser(HttpServletRequest request, String uid )
    {
        SqlSessionFactory factory = DbUtils.obtionSqlSessionFactory();
        SqlSession sqlSession = null;
        try {
            sqlSession = factory.openSession();
            UserMapper userMapper = sqlSession.getMapper( UserMapper.class );
            User user = userMapper.selectUser(uid);
            if( user != null )
            {
                System.out.println("" + user.toString());
            }
            return JSON.toJSONString( user );
        }
        catch (Exception e )
        {
            e.printStackTrace();
            sqlSession.rollback();
        }
        finally {
            if( sqlSession != null )
            {
                sqlSession.close();
            }
        }
        return "操作失敗";
    }
}

然後我們看看請求結果:
這裡寫圖片描述

我們來看看我們程式裡關鍵性程式碼:

SqlSessionFactory factory = DbUtils.obtionSqlSessionFactory();
SqlSession sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper( UserMapper.class );
User user = userMapper.selectUser(uid);

首先 我們獲取了全域性的SqlSessionFactory 用它來建立了一個SqlSession物件,之後呼叫getMapper方法獲得了傳入的UserMapper類型別的物件 然後直接呼叫它的方法 來操作資料庫。 UserMapper是一個介面 用來宣告要對資料庫做的sql操作。

這一篇 我們來基本的瞭解MyBatis的簡介、安裝、基礎配置、簡單用法。後面的文章 我會陸續的介紹MyBatis的更詳細的東西。

2017/3/27
by brok1n