现在接触到一个项目,使用的的是SpringMVC,持久层用了,Hibernate、MyBatis、JDBC.............................,几百个表,人都要写炸了.................
开始怀恋以前使用JFinal的时候,方便的Dao操作;
研究了一下,就集成进来了,经过测试,MySql,Oracle,事物这些也都正常。
<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
Spring XML 文件中注册bean
<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继承
extends com.jfinal.plugin.activerecord.Model
添加注解
@TableBind(tableName = "表名", pkName = "主键")
现在启动项目就可以使用了。
但是有个问题。事物没有让Spring控制到。
解决办法如下,
修改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)
好了,可以放心使用了。 :)