请问在springboot中如何集成JFinal的ActiveRecord插件?

发布于 2021-12-05 23:06:06 字数 92 浏览 864 评论 3

厌倦了MyBatis和JPA的繁琐配置,我想在一个springboot项目中集成JFinal的ActiveRecord插件,应该怎么做呢?(官方文档中并没有提及这个问题)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不乱于心 2021-12-08 15:31:10

这里是我自己的实现方式:

import org.okampfer.ruanshizi.model.Collection;
import org.okampfer.ruanshizi.model.CollectionItem;
import org.okampfer.ruanshizi.model.Item;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;

import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;

@SpringBootConfiguration
public class DatasourceConfig implements InitializingBean {
    private static final Logger LOGGER = LoggerFactory.getLogger(DatasourceConfig.class);

    @Value("${spring.datasource.url}")
    private String datasourceUrl;

    @Value("${spring.datasource.username}")
    private String datasourceUsername;

    @Value("${spring.datasource.password}")
    private String datasourcePassword;

    @Value("${spring.datasource.initialSize}")
    private int datasourceInitialSize;

    @Value("${spring.datasource.maxActive}")
    private int datasourceMaxActive;

    @Value("${spring.datasource.minIdle}")
    private int datasourceMinIdle;

    private DruidPlugin druidPlugin;
    private ActiveRecordPlugin activeRecordPlugin;

    public String getDatasourceUrl() {
        return datasourceUrl;
    }

    public String getDatasourceUsername() {
        return datasourceUsername;
    }

    public String getDatasourcePassword() {
        return datasourcePassword;
    }

    public int getDatasourceInitialSize() {
        return datasourceInitialSize;
    }

    public int getDatasourceMaxActive() {
        return datasourceMaxActive;
    }

    public int getDatasourceMinIdle() {
        return datasourceMinIdle;
    }

    public DruidPlugin getDruidPlugin() {
        return druidPlugin;
    }

    public ActiveRecordPlugin getActiveRecordPlugin() {
        return activeRecordPlugin;
    }

    @Override
    public void afterPropertiesSet() {
        this.initDruidPlugin();
        this.initActiveRecordPlugin();
    }

    private void initDruidPlugin() {
        LOGGER.debug("Init druid plugin...");
        druidPlugin = new DruidPlugin(datasourceUrl, datasourceUsername, datasourcePassword);
        druidPlugin.setInitialSize(datasourceInitialSize);
        druidPlugin.setMinIdle(datasourceMinIdle);
        druidPlugin.setMaxActive(datasourceMaxActive);
        LOGGER.debug("Start druid plugin...");
        druidPlugin.start();
        LOGGER.debug("Start druid plugin completed.");
    }

    private void initActiveRecordPlugin() {
        LOGGER.debug("Init activerecord plugin...");
        activeRecordPlugin = new ActiveRecordPlugin("ruanshizi_global", druidPlugin);
        LOGGER.debug("Start adding DB table mappings into activerecord plugin...");
        this.addActiveRecordPluginMapping();
        LOGGER.debug("Done adding DB table mappings into activerecord plugin.");
        LOGGER.debug("Start activerecord plugin...");
        activeRecordPlugin.start();
        LOGGER.debug("Start activerecord plugin completed.");
    }

    /**
     * NOTE: by default JFinal assume column named "id" is the primary key.
     */
    private void addActiveRecordPluginMapping() {
        activeRecordPlugin.addMapping(Collection.TABLE_NAME, Collection.Field.COLLECTION_ID, Collection.class);
        activeRecordPlugin.addMapping(Item.TABLE_NAME, Item.Field.ITEM_ID, Item.class);

        activeRecordPlugin.addMapping(CollectionItem.TABLE_NAME,
                CollectionItem.Field.COLLECTION_ID + "," + CollectionItem.Field.ITEM_ID, CollectionItem.class);
    }
}

"Collection", "Item", "CollectionItem"是与数据库表对应的实体类。方法"afterPropertiesSet"会在这个configuration class的属性值都设定好以后被自动调用,文档是这样写的:

Invoked by a BeanFactory after it has set all bean properties supplied

这样就不需要再在其它地方去显式调用initDruidPlugin()和initActiveRecordPlugin()了。

哑剧 2021-12-06 20:33:24

请问arp.getEngine().setSourceFactory(new ClassPathSourceFactory());这句的目的是什么呢?

平定天下 2021-12-06 11:04:50

在手册的:
5.13  任意用 环境下使用 ActiveRecord
ActiveRecordPlugin 可以独立于 java web 环境运行在任何普通的 java 程序中,使用方式极
度简单,相对于 web 项目只需要手动调用一下其 start() 方法即可立即使用。以下是代码示例:

public class ActiveRecordTest {
public static void main(String[] args) {
DruidPlugin dp = new DruidPlugin("localhost", "userName", "password");
ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
arp.addMapping("blog", Blog.class);
// 与web环境唯一的不同是要手动调用一次相关插件的start()方法
dp.start();
arp.start();
// 通过上面简单的几行代码,即可立即开始使用
new Blog().set("title", "title").set("content", "cxt text").save();
Blog.dao.findById(123);
}
}

注意:ActiveRecordPlugin 所依赖的其它插件也必须手动调用一下 start()方法,如上例中的
dp.start()。
--- 3.3手册(之前也是这样用的)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文