运行_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();
}
}

JFinal极速开发框架使用笔记(四) _JFinalDemoGenerator实体类生成及映射自动化的更多相关文章

  1. JFinal极速开发框架使用笔记(三) 分析Model和ActiveRecord

    JFinal框架的一些新发现的用法: 在JFinal框架中,实体类并不需要设置属性,更不需要配置getset方法就可以很方便的操作数据库,如果需要设置或者获取属性,可以直接使用一下方式: User u ...

  2. JFinal极速开发框架使用笔记

    记录第一次使用JFinal,从简单的框架搭建到增删改查,从自带的方法到正常框架习惯的使用方式. JFinal官网:http://www.jfinal.com/ JFinal 是基于 Java 语言的极 ...

  3. JFinal极速开发框架使用笔记(二) 两个问题,一个发现

    最近给新人出了一个小测试,我也用JFinal框架做了一下,记录一下使用过程中遇到的坑和新学到的知识点 首先是遇到的两个小问题, 一个是用最新版的eclipse运行JFinal的maven项目报错,经过 ...

  4. EF:根据实体类生成表结构SQL

    根据实体类生成表结构SQL: PM> Enable-Migrations -ProjectName Domain -StartUpProjectName Handler -Force PM> ...

  5. C#实体类生成XML与XML Schema文档

    一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...

  6. C# T4 模板 数据库实体类生成模板(带注释,娱乐用)

     说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程    1.htt ...

  7. Jpa实体类生成图解

    Jpa实体类生成图解   创建连接     创建项目  

  8. 【干货分享】C# 实体类生成工具

    前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...

  9. [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码

    前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...

随机推荐

  1. 关于php中,记录日志中,将数组转为json信息记录日志时遇到的问题总结

    1 中文编码化,无法看到具体的中文,如:你好  =>  \u4F60\u597D 解决方案:可以使用 json_encode($arr,JSON_UNESCAPED_UNICODE) 转义中文[ ...

  2. 各类模块的粗略总结(time,re,os,sys,序列化,pickle,shelve.#!json )

    ***collections 扩展数据类型*** ***re 正则相关操作 正则 匹配字符串*** ***time 时间相关 三种格式:时间戳,格式化时间(字符串),时间元组(结构化时间).***`` ...

  3. Web程序员们,你准备好迎接HTML5了吗?

    HTML5作为下一代的web开发标准,其特性已经慢慢地出现在主流的浏览器中,这种新的HTML将会让浏览器不必再依赖Flash.QuickTime.Silverlight等插件,也简化了原来需要大量JS ...

  4. python并开发编程之协程

    一 引出协成 并发的本质是:切换+保存状态 CPU在运行行一个任务时,会在两种情况下切走去执行其他任务,一是该任务发生了阻塞,二是运行该任务的时间过长 yeild可以保存状态,yeild状态保存与操作 ...

  5. Ftplib模块的用法

    login(user='',passwd='', acct='') 登录到FTP 服务器,所有的参数都是可选的 pwd() 当前工作目录 cwd(path) 把当前工作目录设置为path dir([p ...

  6. random seed()函数

    用seed()生成随机数字,生成的法则与seed内部的数字相关,如果数字相同,则生成的随机数是相同的. 刷题宝上面的题目: >>> import random >>> ...

  7. addEventListener attachEvent和解决IE 6 7 8 this指向错误

    [JS] addEventListener attachEvent和解决IE 6 7 8 this指向错误   电梯直达 1#    php 发表于 2014/4/13 01:17 | 只看该作者  ...

  8. DeepLearning.ai学习笔记(四)卷积神经网络 -- week3 目标检测

    一.目标定位 这一小节视频主要介绍了我们在实现目标定位时标签该如何定义. 上图左下角给出了损失函数的计算公式(这里使用的是平方差) 如图示,加入我们需要定位出图像中是否有pedestrian,car, ...

  9. Zabbix实战-简易教程--低层次发现(LLD)

    一.概述 自动发现(LLD)提供了一种在为不同实体自动创建监控项,触发器和图形的方法.例如,Zabbix可以在你的机器上自动监控磁盘或网卡,而无需为每个磁盘或网卡手动创建监控项.(LLD) 此外,可以 ...

  10. Yii2.0源码阅读-从路由到控制器

    之前的文章弄清了一次请求的开始到结束.主要讲了Yii Applicaton实例的创建.初始化,UrlManager如何返回Yii中的路由信息,到runAction,最后将Response发送给客户端. ...