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 模式即可
本文来自博客园,作者:lanwf,转载请注明原文链接:https://www.cnblogs.com/lccsdncnblogs/p/14889181.html