mybatis熱載入的實現

魔豆發表於2016-12-04

最近在使用mybatis,由於是剛剛開始用,用的並不順手,目前是感覺有2個地方非常的不好用:

1、mybatis除錯不方便

  由於dao層只有介面,實現只是一個map的xml檔案,想加斷點都沒有地方加,直接導致的後果就是有時候出錯了,完全是各種閉眼嘗試,抓狂中。。。倒是可以把除錯級別改成debug,會把執行的sql,以及引數都輸出到控制檯,可是一改成debug,那控制檯輸出的內容,就實在多到讓人髮指,甚至都會影響到程式碼的編寫及除錯,而且輸出日誌跟打斷點除錯根本就不是一個級別的。目前仍舊無法解決改問題。

 

2、mybatis改sql要不停的重啟服務

  這個真心不能忍,map檔案在系統重動後,map檔案只載入一次,再修改map檔案就不會生效了,如果要生效,就需要不停的重啟服務。

  後來找到一個辦法,就是使用Mybatis-Plus外掛。

  

Mybatis-Plus外掛的用法:

1、pom.xml的內容:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.1</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
</dependency>
        
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>1.5</version>
    <scope>system</scope>
    <systemPath>${lib.dir}/mybatis-plus-1.5.jar</systemPath>
</dependency>

我這裡是本地引的包,因為看Mybatis-Plus外掛官網的說法,就是新增Mybatis-Plus外掛會新增mybatis的依賴包,我已經引過mybatis的包了,不想讓他再給我引了。

Mybatis-Plus外掛的地址:http://mvnrepository.com/artifact/com.baomidou/mybatis-plus/1.5

 

然後修改spring的配置檔案:

修改前:

 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dynamicDataSource" />
  <!-- 載入mybatis主配置檔案 -->
  <property name="configLocation" value="classpath:conf/mybatis-config.xml"></property>
  <!-- 自動掃描mapping.xml檔案 -->
  <property name="mapperLocations"
   value="classpath:com/huarui/mapping/${jdbc.dialect}/*.xml"></property>
 </bean>

 

修改後:

    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dynamicDataSource" />
        <!-- 載入mybatis主配置檔案 -->
        <property name="configLocation" value="classpath:conf/mybatis-config.xml"></property>
        <!-- 自動掃描mapping.xml檔案 -->
        <property name="mapperLocations"
            value="classpath:com/huarui/mapping/${jdbc.dialect}/*.xml"></property>
    </bean>
    
    <bean class="com.baomidou.mybatisplus.spring.MybatisMapperRefresh">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
        <constructor-arg name="mapperLocations" value="classpath:com/huarui/mapping/${jdbc.dialect}/*.xml"/>
        <constructor-arg name="delaySeconds" value="5"/>
        <constructor-arg name="sleepSeconds" value="10"/>
        <constructor-arg name="enabled" value="true"/>
    </bean>

 

修改後,改sql就會自動熱載入了,其實也不是實時載入,原理是每隔一個時間重新整理一下map,我這裡設定的是delaySeconds是5秒,sleepSeconds是10秒。

相關文章