SpringMVC 集成 JFinal Dao

如今接觸到一個項目,使用的的是SpringMVC,持久層用了,Hibernate、MyBatis、JDBC.............................,幾百個表,人都要寫炸了................. java

開始懷戀之前使用JFinal的時候,方便的Dao操做; web

研究了一下,就集成進來了,通過測試,MySql,Oracle,事物這些也都正常。 sql

<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>jfinal</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>jfinal-ext</artifactId>
    <version>3.1.4</version>
</dependency>

使用 com.jfinal.ext.plugin.tablebind.AutoTableBindPlugin 自動掃描 Model app

Spring XML 文件中註冊bean webapp

<bean id="autoTableBindPlugin" class="com.jfinal.ext.plugin.tablebind.AutoTableBindPlugin" init-method="start">
    <constructor-arg ref="dataSource" name="dataSource"/>
    <property name="showSql" value="true"/>
    <!-- 用於Oracle,默認是MySql
    <property name="dialect">
        <bean class="com.jfinal.plugin.activerecord.dialect.OracleDialect"/>
    </property>
    <property name="containerFactory" >
        <bean class="com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory"/>
    </property>
    -->
</bean>

按照JFinal的方式,實體Model繼承 maven

extends com.jfinal.plugin.activerecord.Model

添加註解 測試

@TableBind(tableName = "表名", pkName = "主鍵")

如今啓動項目就能夠使用了。 this

可是有個問題。事物沒有讓Spring控制到。 spa

解決辦法以下, code

修改JFinal源碼

com.jfinal.plugin.activerecord.Config 中的 getConnection(),以及 3個close()方法中的獲取,關閉對象的方法,

獲取:java.sql.Connection 改成: DataSourceUtils.getConnection(this.getDataSource());
關閉:java.sql.ResultSet  改成: JdbcUtils.closeResultSet(rs);
關閉:java.sql.Statement  改成: JdbcUtils.closeStatement(st);

編譯以後,替換原有文件中的Config文件

使用Maven是朋友,能夠使用下面這種方式,添加本地的jar包,但須要注意依賴jar包是否所有倒入,在maven的依賴關係中就能夠看到具體依賴了那些包,那些版本。

<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>jfinal</artifactId>
    <version>2.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/jfinal-2.0-edit.jar</systemPath>
</dependency>

事物:這裏我使用註解的方式

<tx:annotation-driven transaction-manager="transactionManager" />

Service 中加入

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)


好了,能夠放心使用了。  :)

相關文章
相關標籤/搜索