JFinal Dao 集成到 Spring

最近公司其它部门的同事还有朋友都表示对jfinal有很大的兴趣,我发现最主要的一点是jfianl极简风格和牛x的开发效率让大家为之兴奋,尤其是jfinal的dao设计。至于没有在新项目中进行尝试,因为好多项目需要对事务尤其是多库事务上进行处理,而这点也让大家犯难了起来。公司目前的项目是基于springmvc+mybatis,所以我将jfinal dao 集成到spring上,利用spring 强大的事务抽象能力解决事务难题。

不说了,先上代码。。

    <bean id="jFinalDaoConfig" class="com.jfinal.plugin.activerecord.JFinalDaoConfig" init-method="init">
        <property name="configName" value="main" />
        <property name="dataSource" ref="dataSource"/>
        <property name="dialect">
             <bean class="com.jfinal.plugin.activerecord.dialect.AnsiSqlDialect"/>
        </property>
        <property name="modelsClasses">
            <set>
                 <value>test.AAA</value>
            </set>
        </property>        
    </bean>
public class JFinalDaoConfig {
    
    protected final Logger log = Logger.getLogger(getClass());
    
    public void init(){
        if (null == dialect) {
            log.warn("Using mysql dialect as default.");
            dialect = new MysqlDialect();//默认mysql方言
        }
        
        //config与dataSource相关绑定
        Config config = new Config(configName, dataSource, dialect);
        
        DbKit.addConfig(config);
        
        Iterator<Class<Model>> iterModel = modelsClasses.iterator();
        Class modelClass = null;
        
        while (iterModel.hasNext()) {
            modelClass = iterModel.next();
            
            Class superClass = modelClass.getSuperclass();
            if (null==superClass || superClass!=Model.class) {
                log.warn(modelClass + " should extends com.jfinal.plugin.activerecord.Model");
                continue;
            }
            
            DbKit.addModelToConfigMapping(modelClass, config);//model与config绑定
            
            TableBinding tb = (TableBinding) modelClass.getAnnotation(TableBinding.class);//获取model对应的表信息
            if (tb != null) {
                Table table = null;
                if (StrKit.notBlank(tb.pkName())) {
                    table = new Table(tb.tableName(), tb.pkName(), modelClass);
                } else {
                    table = new Table(tb.tableName(), modelClass);
                }
                
                tableList.add(table);
            }
        }

        if (!tableList.isEmpty()){
            TableBuilder.build(tableList, config);
        }
        Db.init();
    }
    
    private List<Table> tableList = new ArrayList<Table>();
    
    private String configName;
    private DataSource dataSource;
    private Dialect dialect;
    private Set<Class<Model>> modelsClasses;
    
    public void setConfigName(String configName) {
        if (configName == null) {
            throw new IllegalArgumentException("Config name can not be null");
        }
        this.configName = configName;
    }
    public void setDataSource(DataSource dataSource) {
        if (dataSource == null) {
            throw new IllegalArgumentException("DataSource can not be null");
        }
        this.dataSource = dataSource;
    }
    public void setDialect(Dialect dialect) {
        this.dialect = dialect;
    }
    public void setModelsClasses(Set<Class<Model>> modelsClasses) {
        this.modelsClasses = modelsClasses;
    }
}

JFinalDaoConfig的作用就是将config与数据库绑定,模型与config进行绑定,这个类的作用我相信大家如果对jfinal比较熟悉,应该不难理解。

jfianl Model、DbPro 的获取和释放连接采用了spring的DataSourceUtils进行替换

//conn = config.getConnection();
       conn = DataSourceUtils.getConnection(config.getDataSource());

JdbcUtils.closeStatement(pst);
        DataSourceUtils.releaseConnection(conn, config.getDataSource());

由于jfianl某些类的可见性,JFinalDaoConfig需要放到com.jfinal.plugin.activerecord下

这样就可以利用spring的事务和jfinal dao的方便性了。

本文算是抛砖引玉,不正确之处还请大家指正。本文不涉及框架和轮子问题,可以理解为对jfianl致敬且需要对事务有更高期望的jfinaler。

时间: 2024-10-10 22:59:24

JFinal Dao 集成到 Spring的相关文章

一键式Spring集成工具 Spring Boot

最近公司使用Spring boot进行开发,稍微了解一下,不过自我感觉把集中式配置applicate.properties搞明白,注解用过Spring MVC的boot绝对没问题的 比如拦截器:@Aspect public class ControllerAspect { //对 com.store59.creditmall.controller包下面的所有类的所有带request对象的方法 进行拦截 @Before("execution(* com.store59.creditmall.con

Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm

java(样品集成框架spring、spring mvc、spring data jpa、hibernate)

这是你自己的参考springside集成框架的开源项目.主要的整合spring.spring mvc.spring data jpa.hibernate几个框架,对于这些框架中仍然感觉更舒适spring data jpa该框架,该框架编写dao上课时间,只需要编写一个接口声明,spring data jpa会自己主动的实现事实上现类,使用起来比較方便,至于具体的用法还请自己百度吧,由于我也不清楚. 个人感觉另一个比較不错的地方就是可以打印sql语句,都知道hibernate打印的sql语句并不会

第七次课:ssh的集成(SpringMV+Spring+Hibernate)

第一部分:程序结构 第二部分:配置 1.配置web.xml文件,启动spring和springMVC: 1)配置启动spring: <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/spring-core.xml</param-value> </context-param> <listener

Mina集成到Spring

原文地址:Apache Mina ch17-spring-integration 本文演示了将Spring集成MINA应用.我写这篇文章在我的博客上,虽然放在这里,实际上这些信息属于博客空间.可以找到原始的附件:Spring集成Mina 应用结构 我们应当采取一个标准Mina应用构造: 一个handler 两个过滤器--Logging过滤器和一个ProtocolCodec过滤器 NioDatagram 套接字 初始化代码 首先让我们看看代码.为简单起见,我们省略了无关代码. public voi

hibernate search5.3.0全文检索集成到spring data jpa

hibernate search 我就不多说了,它是基于lucene的全文检索工具,记得上大学那时候接触了compass全文检索工具,后来也没怎么用,再后来这家伙不更新了,所以hibernate就推出了自己的基于lucene的全文检索工具就是这家伙hibernate Search. 不用说天然的优势就是可以无缝的和hibernate集成甚至不需要什么配置,一直在更新中,最近想在自己的博客里面加入搜索功能,本想用比较热乎的solr,找了半天资料还是放弃了,用在我的博客里面有点大题小做了,所以自然就

不使用SpringBoot如何将原生Feign集成到Spring中来简化http调用

在微服务架构中,如果使用得是SpringCloud,那么只需要集成SpringFeign就可以了,SpringFeign可以很友好的帮我们进行服务请求,对象解析等工作. 然而SpingCloud是依赖于SpringBoot的.在老的Spring项目中通常是没有集成SpringBoot,那么我们又该如何使用Feign组件进行调用呢? 这种情况下就只能使用原生Feign了,Feign使用手册:https://www.cnblogs.com/chenkeyu/p/9017996.html 使用原生Fe

集成SpringMVC, Spring, Mybatis环境

web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app version="3.1"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns="http://xmlns.jcp.org/xml/ns/javaee"   xsi:schemaLocation="

Mybatis集成到spring boot

1, Mybatis简介 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 2, Mybatis安装 将下面的 dependency 代码置于 pom.xml 文件中: <dependency> &