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