JFinal极速开发框架使用笔记(四) _JFinalDemoGenerator实体类生成及映射自动化

运行_JFinalDemoGenerator生成实体类和映射之前的项目结构:

运行之后:

生成和改变的文件:

实体类:

package com.wazn.model;

import com.wazn.model.base.BaseStudent;

/**
 * Generated by JFinal.
 */
@SuppressWarnings("serial")
public class Student extends BaseStudent<Student> {
    public static final Student dao = new Student().dao();
}
package com.wazn.model.base;

import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.IBean;

/**
 * Generated by JFinal, do not modify this file.
 */
@SuppressWarnings({"serial", "unchecked"})
public abstract class BaseStudent<M extends BaseStudent<M>> extends Model<M> implements IBean {

    public M setStudentid(java.lang.Integer studentid) {
        set("studentid", studentid);
        return (M)this;
    }
    
    public java.lang.Integer getStudentid() {
        return getInt("studentid");
    }

    public M setStudentname(java.lang.String studentname) {
        set("studentname", studentname);
        return (M)this;
    }
    
    public java.lang.String getStudentname() {
        return getStr("studentname");
    }

}
package com.wazn.model;

import com.wazn.model.base.BaseBlog;

/**
 * Generated by JFinal.
 */
@SuppressWarnings("serial")
public class Blog extends BaseBlog<Blog> {
    public static final Blog dao = new Blog().dao();
}
package com.wazn.model.base;

import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.IBean;

/**
 * Generated by JFinal, do not modify this file.
 */
@SuppressWarnings({"serial", "unchecked"})
public abstract class BaseBlog<M extends BaseBlog<M>> extends Model<M> implements IBean {

    public M setId(java.lang.Integer id) {
        set("id", id);
        return (M)this;
    }
    
    public java.lang.Integer getId() {
        return getInt("id");
    }

    public M setTitle(java.lang.String title) {
        set("title", title);
        return (M)this;
    }
    
    public java.lang.String getTitle() {
        return getStr("title");
    }

    public M setContent(java.lang.String content) {
        set("content", content);
        return (M)this;
    }
    
    public java.lang.String getContent() {
        return getStr("content");
    }

    public M setDate(java.lang.String date) {
        set("date", date);
        return (M)this;
    }
    
    public java.lang.String getDate() {
        return getStr("date");
    }

}

自动写入映射:

package com.wazn.model;

import com.jfinal.plugin.activerecord.ActiveRecordPlugin;

/**
 * Generated by JFinal, do not modify this file.
 * <pre>
 * Example:
 * public void configPlugin(Plugins me) {
 *     ActiveRecordPlugin arp = new ActiveRecordPlugin(...);
 *     _MappingKit.mapping(arp);
 *     me.add(arp);
 * }
 * </pre>
 */
public class _MappingKit {
    
    public static void mapping(ActiveRecordPlugin arp) {
        arp.addMapping("blog", "id", Blog.class);
        arp.addMapping("student", "studentid", Student.class);
    }
}

这里需要注意的是,JFinal中的这个自动映射文件_MappingKit因为在继承JFinalConfig类的主文件中需要指定,所以生成后会在该文件中写入,但是,如在 _JFinalDemoGenerator

中指定的 _MappingKit路径和原来的_MappingKit文件路径不一致,将会在新的指定的路径生成一个新的_MappingKit文件。

接下来是主文件:

package com.wazn.common;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;
import com.wazn.model._MappingKit;

public class GeneratorConfig extends JFinalConfig{
    
    public static void main(String[] args) {
        JFinal.start("src/main/webapp", 80, "/", 5);
    }

    @Override
    public void configConstant(Constants me) {
        // 加载少量必要配置,随后可用PropKit.get(...)获取值
        PropKit.use("a_little_config.txt");
        me.setDevMode(PropKit.getBoolean("devMode", false));
        
    }

    @Override
    public void configEngine(Engine me) {

        
    }

    @Override
    public void configHandler(Handlers arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void configInterceptor(Interceptors arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void configPlugin(Plugins me) {
        // 配置 druid 数据库连接池插件
        DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
        me.add(druidPlugin);
        
        // 配置ActiveRecord插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        // 所有映射在 MappingKit 中自动化搞定
        _MappingKit.mapping(arp);
        me.add(arp);
        
    }

    @Override
    public void configRoute(Routes arg0) {
        // TODO Auto-generated method stub
        
    }

    public static DruidPlugin createDruidPlugin() {
        return new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
    }

}

这里因为只是测试使用_JFinalDemoGenerator生成实体类,所以只有相关的代码,没有其他的代码配置。

_JFinalDemoGenerator生成器:

package com.wazn.model;

import javax.sql.DataSource;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.druid.DruidPlugin;
import com.wazn.common.GeneratorConfig;

public class _JFinalDemoGenerator {
    
    public static DataSource getDataSource() {
        PropKit.use("a_little_config.txt");
        DruidPlugin druidPlugin = GeneratorConfig.createDruidPlugin();
        druidPlugin.start();
        return druidPlugin.getDataSource();
    }
    
    public static void main(String[] args) {
        // base model 所使用的包名
        String baseModelPackageName = "com.wazn.model.base";
        // base model 文件保存路径
        String baseModelOutputDir = PathKit.getWebRootPath() + "/src/main/java/com/wazn/model/base";
        
        // model 所使用的包名 (MappingKit 默认使用的包名)
        String modelPackageName = "com.wazn.model";
        // model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
        String modelOutputDir = baseModelOutputDir + "/..";
        
        // 创建生成器
        Generator generator = new Generator(getDataSource(), baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);
        // 设置是否生成链式 setter 方法
        generator.setGenerateChainSetter(false);
        // 添加不需要生成的表名
        generator.addExcludedTable("adv");
        // 设置是否在 Model 中生成 dao 对象
        generator.setGenerateDaoInModel(true);
        // 设置是否生成链式 setter 方法
        generator.setGenerateChainSetter(true);
        // 设置是否生成字典文件
        generator.setGenerateDataDictionary(false);
        // 设置需要被移除的表名前缀用于生成modelName。例如表名 "osc_user",移除前缀 "osc_"后生成的model名为 "User"而非 OscUser
        generator.setRemovedTableNamePrefixes("t_");
        // 生成
        generator.generate();
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏电光石火

@ConditionalOnxxx相关注解

@Conditional(TestCondition.class) 这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,...

28550
来自专栏Jed的技术阶梯

zookeeper案例之4个逻辑思维训练小题目

13820
来自专栏battcn

一起来学SpringBoot | 第十八篇:轻松搞定全局异常

实际项目开发中,程序往往会发生各式各样的异常情况,特别是身为服务端开发人员的我们,总是不停的编写接口提供给前端调用,分工协作的情况下,避免不了异常的发生,如果直...

15020
来自专栏Android 研究

Android跨进程通信IPC之4——AndroidIPC基础1

这里强烈建议把前面两篇文章看一遍,因为前面两篇文章对后面大家对android的IPC的理解帮助很大,本片文章主要内容如下

13830
来自专栏javathings

Spring 中的自动装配,如果遇到多个实例如何处理?

标记了@Autowired 注解的字段/方法,会由 Spring 容器自动的赋值一个实例化的对象。@Autowired 总是采用 byType 的方式实现自动装...

95210
来自专栏闻道于事

Mybatis,Spring,SpringMVC框架面试题

Mybatis测试 1,   Mybatis的核心是(  sqlsessionfactory    ) 2,   使用Mybatis持久化框架进行数据查询需要返...

2.2K50
来自专栏企鹅号快讯

渗透技巧——”隐藏”注册表的创建

0x00 前言 知名恶意软件Poweliks曾使用过的一个后门技术,在注册表启动位置创建一个特殊的注册表键值,通过mshta来执行payload 对于这个特殊的...

21380
来自专栏JavaQ

深入理解Spring系列之十:DispatcherServlet请求分发源码分析

DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请求的入口,本篇将深入源码分析它的请求分发过程。可点击文末左下角“阅...

36490
来自专栏小灰灰

SpringMVC之请求参数的获取方式

一般最常见的请求为GET和POST,get请求的参数在url上可以获取,post请求参数除了url上还有可能在表单中,文件上传时,获取方式又和一般的参数获取不一...

43850
来自专栏禁心尽力

springmvc框架开发常用的注解总结

1、@Controller使用:表示表现层中的JavaBean被spring容器管理。 2、@requestMapping使用:   a) 在方法上: 标记ur...

23550

扫码关注云+社区

领取腾讯云代金券