Mybatis【3】-- Mybatis使用工具類讀取配置文件以及初始化

1.使用工具類獲取sqlSession實例對象

在上一個demo中瘦棋,處理了多個namespace的問題蛇尚,那么我們可以看到代碼還是會有一定的冗余啼肩,比如下面這段代碼中我們每一個增刪改查操作都需要讀取一遍配置文件:

public class StudentDaoImpl implements IStudentDao {
    private SqlSession sqlSession;
    public void insertStu(Student student) {
        try {
            InputStream inputStream;
            inputStream = Resources.getResourceAsStream("mybatis.xml");
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            sqlSession=sqlSessionFactory.openSession();
            sqlSession.insert("mapper1.insertStudent",student);
            sqlSession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }
}

我們的思路應該是寫一個工具類來替我們獲取配置文件的信息亿笤,只要返回一個sqlSession實例就可以了净当。所以就有了MyBatisUtils.class,下面這樣的方式内斯,只要使用sqlSession=MyBatisUtils.getSqlSession();就可以獲取到sqlsession的實例。

public class MyBatisUtils {
    public SqlSession getSqlSession(){
        InputStream is;
        try {
            is = Resources.getResourceAsStream("mybatis.xml");
            return new SqlSessionFactoryBuilder().build(is).openSession();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}

但是以上的方式并不是最好的蚯瞧,還是會浪費資源嘿期,如果sqlsession已經(jīng)存在了,這段代碼還是會去創(chuàng)建一個新的實例對象埋合。我們知道sqlsession沒有可修改的屬性备徐,是線程安全的,所以我們需要把它改寫成單例模式甚颂。

public class MyBatisUtils {
    static private SqlSessionFactory sqlSessionFactory;
    // 單例模式
    static public SqlSession getSqlSession() {
        InputStream is;
        try {
            is = Resources.getResourceAsStream("mybatis.xml");
            if (sqlSessionFactory == null) {
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            }
            return sqlSessionFactory.openSession();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}

使用的時候只需要獲取即可

sqlSession=MyBatisUtils.getSqlSession();

2.DB配置改造成讀取配置文件

現(xiàn)在我們需要將DB使用配置文件讀取蜜猾,不是用xml配置,很多人會問振诬,為什么這樣做蹭睡,有人可能會回答是因為改動的時候容易改,但是xml改動的時候不是挺容易改么赶么?

其實肩豁,寫到屬性文件的原因與上面的一樣,就是為了更好改辫呻,要是上線了需要該數(shù)據(jù)庫我們只需要改動<properties resource="jdbc_mysql.properties">這一個地方就可以了清钥,xml文件就變得更加簡潔清晰了。

原來在mybatis.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>
        <!-- 配置運行環(huán)境 -->
        <!-- default 表示默認使用哪一個環(huán)境放闺,可以配置多個祟昭,比如開發(fā)時的測試環(huán)境,上線后的正式環(huán)境等 -->
        <environments default="mysqlEM">
            <environment id="mysqlEM">
                <!--事務管理器-->
                <transactionManager type="JDBC">        
                </transactionManager>
                <!--數(shù)據(jù)源-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <!-- 注冊映射文件 -->
        <mappers>
            <mapper resource="mapper/mapper.xml"/>
            <mapper resource="mapper/mapper1.xml"/>
        </mappers>
  </configuration>

現(xiàn)在我們定義一個jdbc-mysql.properties文件怖侦,將數(shù)據(jù)庫連接的屬性直接寫進屬性文件里(我們可以有好幾個不一樣的.properties文件,配置著不同的數(shù)據(jù)庫):

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.user=root
jdbc.password=123456

將mybatis.xml改造成(注意下面需要配置屬性文件篡悟,然后才能在environment標簽里面使用谜叹,直接使用key就可以了,屬性文件配置是按照key-value的模式配置的):

<?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>
        <!-- 配置數(shù)據(jù)庫文件 -->
        <properties  resource="jdbc_mysql.properties">
        </properties>
        <!-- 配置運行環(huán)境 -->
        <!-- default 表示默認使用哪一個環(huán)境搬葬,可以配置多個荷腊,比如開發(fā)時的測試環(huán)境,上線后的正式環(huán)境等 -->
        <environments default="mysqlEM">
            <environment id="mysqlEM">
                <transactionManager type="JDBC">
                </transactionManager>
                <environment type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.user}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
            </environment>
        </environments>
        <!-- 注冊映射文件 -->
        <mappers>
            <mapper resource="mapper/mapper.xml"/>
            <mapper resource="mapper/mapper1.xml"/>
        </mappers>
  </configuration>

【作者簡介】
秦懷急凰,公眾號【秦懷雜貨店】作者停局,技術之路不在一時,山高水長香府,縱使緩慢,馳而不息码倦。這個世界希望一切都很快企孩,更快,但是我希望自己能走好每一步袁稽,寫好每一篇文章勿璃,期待和你們一起交流。

此文章僅代表自己(本菜鳥)學習積累記錄推汽,或者學習筆記补疑,如有侵權(quán),請聯(lián)系作者核實刪除歹撒。人無完人莲组,文章也一樣,文筆稚嫩暖夭,在下不才锹杈,勿噴,如果有錯誤之處迈着,還望指出竭望,感激不盡~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市裕菠,隨后出現(xiàn)的幾起案子咬清,更是在濱河造成了極大的恐慌,老刑警劉巖奴潘,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旧烧,死亡現(xiàn)場離奇詭異,居然都是意外死亡萤彩,警方通過查閱死者的電腦和手機粪滤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雀扶,“玉大人杖小,你說我怎么就攤上這事肆汹。” “怎么了予权?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵昂勉,是天一觀的道長。 經(jīng)常有香客問我扫腺,道長岗照,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任笆环,我火速辦了婚禮攒至,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘躁劣。我一直安慰自己迫吐,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布账忘。 她就那樣靜靜地躺著志膀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鳖擒。 梳的紋絲不亂的頭發(fā)上溉浙,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音蒋荚,去河邊找鬼戳稽。 笑死,一個胖子當著我的面吹牛期升,可吹牛的內(nèi)容都是我干的广鳍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吓妆,長吁一口氣:“原來是場噩夢啊……” “哼赊时!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起行拢,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祖秒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舟奠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竭缝,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年沼瘫,在試婚紗的時候發(fā)現(xiàn)自己被綠了抬纸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡耿戚,死狀恐怖湿故,靈堂內(nèi)的尸體忽然破棺而出阿趁,到底是詐尸還是另有隱情,我是刑警寧澤坛猪,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布脖阵,位于F島的核電站,受9級特大地震影響墅茉,放射性物質(zhì)發(fā)生泄漏命黔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一就斤、第九天 我趴在偏房一處隱蔽的房頂上張望悍募。 院中可真熱鬧,春花似錦洋机、人聲如沸搜立。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忧设,卻和暖如春刁标,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背址晕。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工膀懈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谨垃。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓启搂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刘陶。 傳聞我的和親對象是個殘疾皇子胳赌,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容