最近在使用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秒。