MyBatis學習筆記:基本框架簡述和配置

這片文章是對自己學習的總結,學習材料是Java EE互聯網輕量級框架整合開發 SSM框架(Spring MVC + Spring + Mybatis)和Redis實現。作者是楊開振,周吉文,梁華輝和譚茂華。電子工業出版社出版。


MyBatis簡介

MyBatis是用來管理數據庫資源的。傳統操作數據庫的方法比較繁瑣,大部分代碼用來連接和關閉數據庫,而真正的業務代碼只佔了其中很小的一部分。使用MyBatis之後,開發者就不用花太多時間去管理數據庫資源了,只需要專注於業務本身的代碼即可。比如我們定義一個UserDao的接口,裏面有findAll()方法用來查找所有用戶。

public interface UserDao{
    public List<User> findAll();
}

傳統的寫法是定一個UserDaoImpl實現類實現findAll()方法,然後在業務層纔可以調用findAll方法,僞代碼如下所示

public class UserDaoImpl implements UserDao{
    public List<User> findAll(){...}
}

public class UserServiceImpl implements UserService{
    public List<User> findAll(){
        return new UserDaoImpl().findAll();
    }
}

其中UserDaoImpl中的findAll方法就必然會涉及到管理數據庫資源的代碼,數據庫的連接,關閉等操作。

如果我們使用Mybatis,就不需要寫UserDaoImpl的內容,不存在UserDaoImpl這個類,只需要寫一個配置文件,配置文件的關鍵內容如下所示

<select id="findAll" resultType="com.itheima.domain.User">
    select * from user
</select>

具體什麼意思先不用管,只需要注意其中的sql語句。使用Mybatis之後,我們就不用管數據庫的資源,只需要專注業務,也就是sql語句,select * from user。

數據庫真正的邏輯就寫在xml之中,那麼我們我們業務層調用持久層的函數就是下面這種寫法。

//先不管session是什麼,只要知道業務層怎麼調用持久層函數就行
SqlSession session = ctx.getBean("session");
List<User> users = userDao.findAll();
//對users進行一些操作

這寫法很簡單。

 

 


如何配置MyBatis

一般是在資源目錄下添加mybatis-config.xml用來專門配置mybatis信息。

首先要先引入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>標籤,mybatis的詳細配置信息放在其中,比如數據庫配置的信息,定義mysql語句的配置信息。

<configuration>
    ...
</configuration>

下面講解configuration裏的子標籤

 

  • <environment>標籤

回想使用傳統的JDBC方法,第一件事是獲取Connection。而獲取連接資源需要的參數如下所示

driver = com.mysql.cj.jdbc.driver
url = jdbc:mysql://localhost:3306/mybatis
username = root
password = 1234

這四個參數是獲取Connection的必須參數,java語句很麻煩,但是使用Mybatis就比較容易,直接使用<environment>標籤就可以。<environments>裏就是定義數據庫的配置信息。

<environments default="mysql">
    <environment id="mysql">
        <!--配置事務類型-->
        <transactionManager type="JDBC"></transactionManager>
        <!--配置數據源(連接池)-->
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="username" value="root"/>
            <property name="password" value="1234"/>
        </dataSource>
    </environment>
</environments>

enviromnets標籤下的其它標籤暫時不管。

現在數據庫資源就配置完成了,接下來就該是配置業務信息。

 

  • <mappers>標籤

<mappers>標籤下只有一個子標籤<mapper>,示例如下。

<mappers>
    <mapper resource="com/itheima/dao/UserDao.xml">
</mappers>

值得注意的信息就是resource,它的值表示之前配置的數據庫連接要應用在dao層的哪些類之中。

com.itheima.dao就是目錄名,在idea中我們放在resourceces之下,看下圖。

UserDao和UserDao.xml的路徑要“相對”一致。

那UserDao.xml的作用是什麼?前面我們提到Mybatis不需要寫UserDao接口的實現類也能實現功能,這是因爲具體的實現不是被定義在類中,而是被定義在UserDao.xml中。所以UserDao.xml和UserDao的路徑要“相對”一致。

 

接下這篇文章詳細說了UserDao.xml裏如何定義具體sql邏輯。

 

  • <settings>標籤

settings是用來規範整個Mybatis行爲的。通過對一些鍵值對的設定,就可以改變Mybatis的行爲。比如說數據庫users表中有一列列名爲user_id,實體類User中對應的成員變量是userId。Mybatis默認是要將實體類的成員變量和數據庫屬性名嚴格對應。比如映射器配置中的語句是

<mapper>
    <select id="com.itheima.dao.UserDao" resultType="com.itheima.domain.User">
        select user_id as userId from users
    </select>
</mapper>

我們必須把user_id重名名爲userId(和java實體內完全一樣),這樣才能將值賦給User類並返回。

但如果我們在<settings>中這樣設置。

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

那系統會自動爲我們完成名稱轉化。數據庫中的user_id會自動轉成駝峯形式userId,user_name會自動轉成userName,這樣就簡化了工作量。

<!--自動駝峯轉換-->
<mapper>
    <select id="com.itheima.dao.UserDao" resultType="com.itheima.domain.User">
        select user_id from users
    </select>
</mapper>

待續。。。。。。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章