jfinal 整合到其他框架内

如果springboot 或者 ssm 要使用 jfinal 提供的ActiveRecordPlugin功能呢

 

 

 1.首先去maven官网 引入jfinal 包 如果要独立使用 ActiveRecordPlugin,只需引入以下包

        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>activerecord</artifactId>
            <version>5.0.0</version>
        </dependency>

 

2 项目启动初始化final环境

import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import org.springblade.common.model._MappingKit;
import org.springblade.common.tool.CommonUtil;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;

import java.util.Properties;


@Service
public class InitListener implements ApplicationListener<ContextRefreshedEvent> {

    private Properties p = CommonUtil.getProperties();

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        DruidPlugin druidPlugin = new DruidPlugin(p.getProperty("url"), p.getProperty("username"), p.getProperty("password"));
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        //_MappingKit.mapping(arp); 有主键的情况下去掉注释
        druidPlugin.start();
        arp.start();
    }

}

 

3 项目中创建 实体启动类 _generator

import com.jfinal.kit.PathKit;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.druid.DruidPlugin;

import javax.sql.DataSource;

/**
 * 本 demo 仅表达最为粗浅的 jfinal 用法,更为有价值的实用的企业级用法
 * 详见 JFinal 俱乐部: https://jfinal.com/club
 *
 * 在数据库表有任何变动时,运行一下 main 方法,极速响应变化进行代码重构
 */
public class _generator {

    public static DruidPlugin createDruidPlugin() {

        return new DruidPlugin("jdbc:mysql://localhost:3306/xxx?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8", "root", "123456");
    }
    public static DataSource getDataSource() {
        DruidPlugin druidPlugin = createDruidPlugin();
        druidPlugin.start();
        return druidPlugin.getDataSource();
    }

    public static void main(String[] args) {
        // model 所使用的包名 (MappingKit 默认使用的包名)
        String modelPackageName = "org.springblade.common.model";

        // base model 所使用的包名
        String baseModelPackageName = modelPackageName + ".base";

        // base model 文件保存路径
        String baseModelOutputDir = PathKit.getWebRootPath()
                + "/src/main/java/" + baseModelPackageName.replace('.', '/');

        System.out.println("输出路径:"+ baseModelOutputDir);

        // model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
        String modelOutputDir = baseModelOutputDir + "/..";

        // 创建生成器
        Generator generator = new Generator(getDataSource(), baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);

        // 配置是否生成备注
        generator.setGenerateRemarks(true);

        // 设置数据库方言
        generator.setDialect(new MysqlDialect());

        // 设置是否生成链式 setter 方法,强烈建议配置成 false,否则 fastjson 反序列化会跳过有返回值的 setter 方法
        generator.setGenerateChainSetter(false);

        // 添加不需要生成的表名
        generator.addExcludedTable("adv");

        // 设置是否在 Model 中生成 dao 对象
        generator.setGenerateDaoInModel(true);

        // 设置是否生成字典文件
        generator.setGenerateDataDictionary(false);

        // 设置需要被移除的表名前缀用于生成modelName。例如表名 "osc_user",移除前缀 "osc_"后生成的model名为 "User"而非 OscUser
        //generator.setRemovedTableNamePrefixes("t_");

        // 生成
        generator.generate();
    }
}

 

注意(不设置自增主键情况):

Active Record 模式之下,试想一下,如果没有主键,如何去实现: model.save()、model.update()、model.delete() 这类基本的功能,这些基本 API 实现的前提就是有主键存在

Model 使用的是 Active record 设计模式,这个模式的基本点就是一个 model 对象唯一对应一条数据表记录,对应关系的建立依靠的就是主键,所以必须要有主键,单主键多主键都可以

如果不想使用主键用一下 jfinal 提供的 Db + Record 模式即可

posted @ 2021-06-16 14:10  lanwf  阅读(128)  评论(0编辑  收藏  举报