文档章节

一个简单的JFinal代码生成器

玛雅牛
 玛雅牛
发布于 2013/07/01 00:35
字数 810
阅读 3170
收藏 16

抽空写了一个读取数据库信息,直接生成JFinal代码的生成器。

调用代码如下:


MyCodeMain main = new MyCodeMain();
		main.init();
		String dbName = "dbname";

		Table linkTable = new Table("链接","link");
		Table linkTypeTable = new Table("链接类型","link_type");
		Table siteTable = new Table("站点","site");

		TableInfoReader tir = new MySQLTableInfoReader();

		linkTable = tir.readTableInfo(dbName, linkTable);
		linkTypeTable = tir.readTableInfo(dbName, linkTypeTable);
		siteTable = tir.readTableInfo(dbName, siteTable);

		ModelClassCodeGenerater linkCg = new ModelClassCodeGenerater("com.lh.openapi.manager.model", linkTable);
		ModelClassCodeGenerater linkTypeCg = new ModelClassCodeGenerater("com.lh.openapi.manager.model", linkTypeTable);
		ModelClassCodeGenerater siteCg = new ModelClassCodeGenerater("com.lh.openapi.manager.model", siteTable);

		linkTypeCg.hasMany(linkTable);
		linkCg.belongsTo(linkTypeTable);

		siteCg.hasManyThrough(linkTypeTable, linkTable);

		siteCg.hasOneThrough(linkTypeTable, linkTable);


		linkCg.generate();
		linkTypeCg.generate();
		siteCg.generate();

		ControllerClassCodeGenerater ccg = new ControllerClassCodeGenerater("com.lh.openapi.manager.controller", linkTypeTable );
                ccg.setUseShiro(true);
                ccg.setUseFlash(true);
		ccg.generate();


生成的模型代码:


/*********************************************/
com.lh.openapi.manager.model;
import java.util.List;
import java.util.Map;
import java.util.Date;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.Page;

public class LinkType extends Model<LinkType> {

	public static LinkType dao = new LinkType();

	/**
	 *自增id
	 */
	public static final String KEY_ID = "id";
	/**
	 *站点id
	 */
	public static final String KEY_SITE_ID = "site_id";
	/**
	 *优先级,值越高优先级越高
	 */
	public static final String KEY_PRIORITY = "priority";
	/**
	 *是否启用,1:启用,2:禁用
	 */
	public static final String KEY_IS_ENABLE = "is_enable";
	/**
	 *类型名。
	 */
	public static final String KEY_NAME = "name";

	/**
	 * 设定 自增id
	 * @param id 自增id
	 */
	public void setId( Integer id){
		set(KEY_ID, id);
	}

	/**
	 * 获取 自增id
	 * @return 自增id
	 */
	public Integer getId(){
		return getInt(KEY_ID);
	}

	/**
	 * 设定 站点id
	 * @param siteId 站点id
	 */
	public void setSiteId( Integer siteId){
		set(KEY_SITE_ID, siteId);
	}

	/**
	 * 获取 站点id
	 * @return 站点id
	 */
	public Integer getSiteId(){
		return getInt(KEY_SITE_ID);
	}

	/**
	 * 设定 优先级,值越高优先级越高
	 * @param priority 优先级,值越高优先级越高
	 */
	public void setPriority( Integer priority){
		set(KEY_PRIORITY, priority);
	}

	/**
	 * 获取 优先级,值越高优先级越高
	 * @return 优先级,值越高优先级越高
	 */
	public Integer getPriority(){
		return getInt(KEY_PRIORITY);
	}

	/**
	 * 设定 是否启用,1:启用,2:禁用
	 * @param isEnable 是否启用,1:启用,2:禁用
	 */
	public void setIsEnable( Integer isEnable){
		set(KEY_IS_ENABLE, isEnable);
	}

	/**
	 * 获取 是否启用,1:启用,2:禁用
	 * @return 是否启用,1:启用,2:禁用
	 */
	public Integer getIsEnable(){
		return getInt(KEY_IS_ENABLE);
	}

	/**
	 * 设定 类型名。
	 * @param name 类型名。
	 */
	public void setName( String name){
		set(KEY_NAME, name);
	}

	/**
	 * 获取 类型名。
	 * @return 类型名。
	 */
	public String getName(){
		return getStr(KEY_NAME);
	}


	public List<LinkType> findByExample(LinkType linkType){
		Map<String, Object> conds= new HashMap <String, Object>();
		//如果设定了 自增id
		if(linkType.getId()!=null){
			conds.put(KEY_ID, linkType.getId());
		}
		//如果设定了 站点id
		if(linkType.getSiteId()!=null){
			conds.put(KEY_SITE_ID, linkType.getSiteId());
		}
		//如果设定了 优先级,值越高优先级越高
		if(linkType.getPriority()!=null){
			conds.put(KEY_PRIORITY, linkType.getPriority());
		}
		//如果设定了 是否启用,1:启用,2:禁用
		if(linkType.getIsEnable()!=null){
			conds.put(KEY_IS_ENABLE, linkType.getIsEnable());
		}
		//如果设定了 类型名。
		if(linkType.getName()!=null && linkType.getName().length() > 0){
			conds.put(KEY_NAME, linkType.getName());
		}
		return dao.searchByMap(conds, "");
	}

	public LinkType findFristByExample(LinkType linkType){
		List<LinkType> mList = findByExample(linkType);
		return mList!=null && mList.size()>0 ? mList.get(0):null;
	}

	public List<Link> getAllLinksOfLinkType(){
		String sql = "select * from link where link_type_id=?";
		return Link.dao.find(sql,getId());
	}

	public Page<Link> getPageLinksOfLinkType(int pageNumber, int pageSize){
		return Link.dao.paginate(pageNumber, pageSize, "select *", " from link where link_type_id=?", getId());
	}
}



生成的控制器代码如下:


/*********************************************/
package com.lh.openapi.manager.controller;
import java.util.List;
import java.util.Map;

import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.ext.flash.FlashInterceptor;
import com.jfinal.plugin.activerecord.Page;

@Before(FlashInterceptor.class)
@RequiresAuthentication
//@RequiresRoles("admin")
public class LinkTypeController  extends Controller {

	private static Logger log = LoggerFactory.getLogger(LinkTypeController.class);

	@RequiresPermissions("linktype:index")
	public void index(){
		setAttr("linkTypes", LinkType.dao.find("select * from link_type"));
		render("index.html");
	}

	@RequiresPermissions("linktype:new")
	public void newPage(){
		createToken("newToken", 120);
                setAttr("linkType",new LinkType());
		render("new.html");
	}

	@RequiresPermissions("linktype:create")
	public void create(){
		LinkType linkType = this.getModel(LinkType.class,"linkType");
		if(linkType.save()){
			setFlash("msg", "新增成功");
			redirect("show?id="+linkType.getId());
			return;
		}
		setFlash("msg", "新增失败");
		createToken("newToken", 120);
		keepModel(LinkType.class, "linkType");
		render("new.html");
	}

	@RequiresPermissions("linktype:show")
	public void show(){
		setAttr("linkType", LinkType.dao.findById(getParaToInt("id")));
		render("show.html");
	}

	@RequiresPermissions("linktype:edit")
	public void editPage(){
		setAttr("linkType", LinkType.dao.findById(getParaToInt("id")));
		createToken("editToken", 120);
		render("edit.html");
	}

	@RequiresPermissions("linktype:update")
	public void update(){
		LinkType linkType = this.getModel(LinkType.class,"linkType");
		if(linkType.update()){
			setFlash("msg", "更新成功");
			redirect("show?id="+linkType.getId());
			return;
		}
		setFlash("msg", "更新失败");
		createToken("editToken", 120);
		this.keepModel(LinkType.class, "linkType");
		render("edit.html");
	}

	@RequiresPermissions("linktype:delete")
	public void delete(){
		if(LinkType.dao.deleteById(getParaToInt("id"))){
			setFlash("msg", "删除成功");
			redirect("index");
			return;
		}
		setFlash("msg", "删除失败");
		redirect("index");
	}
} 


© 著作权归作者所有

共有 人打赏支持
玛雅牛

玛雅牛

粉丝 485
博文 113
码字总数 27360
作品 4
高级程序员
私信 提问
加载中

评论(11)

xiaoxin
xiaoxin
你写的这个是生成页面,所有增删改查的的代码吗
Tom-Lin
Tom-Lin
你经常 把 jfinal + httl 集成,你的代码生成器,是不是直接用 httl 做模板,然后直接调用 httl 的代码生成和编译?
Tom-Lin
Tom-Lin
什么时候分享一下你的代码生成器?发一个 demo 就行,很期待!
菜根乱谭
菜根乱谭
我不怎么看好脚手架生成,只能做些简单例子。不过如果集成到开发工具中,这个还是有些用处的。
小石头哥
小石头哥
我也写了个。不过结合前端,代码没有面向对象写法,只是直接后台输出,生成几个文件,然后改改
玛雅牛
玛雅牛

引用来自“vviqq”的评论

你好,想请教下,为何要写get set 方法,而不是用 model.getStr(" ") 等方法

为了让错误在编译期就能被发现,用model.getStr(" ")的话,错误可能只能在运行期发现。
vviqq
vviqq
你好,想请教下,为何要写get set 方法,而不是用 model.getStr(" ") 等方法
jeffsui
jeffsui
记着要分享哦!
玛雅牛
玛雅牛
还没有做完呢。半成品。
疯狂的逍遥
疯狂的逍遥
分享下!
JFinal-Code-Online 1.0 发布,极简自由的代码生成器

定制属于自己的代码生成器从JFinal-Code-Online Platform(JCOP)开始!! JCOP是一个轻量级的代码生成器内核,可加入一切自己想生成的文件的模板,绝对的灵活自由,你值得拥有!! JCOP基于Java,JFin...

绝望的八皮
2015/01/06
7.9K
88
jfinal类加载问题

@JFinal 你好,想跟你请教个问题:詹总好,我正在写一个代码生成器,生成的controller和model想自动注册到jfinal里,不需重启中间件,有没有好的办法呢?

首席救火队员
2016/12/23
197
1
弱弱的问一下,这么写不会产生资源浪费或者进入无限递归吗??

如图代码来自于jfinal框架的代码生成器,图中剪头所指的地方,这么写不会产生资源浪费或者进入无限递归吗??求科普…………@JFinal

chi_9
2017/12/19
119
1
Aooms 极速微服务开发,像 JFinal 一样简单 1.0.0-alpha

Aooms 极速微服务开发,像JFinal一样简单 一、Aooms 一款基于SpringCloud的微服务基础开发平台,旨在降低SpringCloud的复杂度,像使用JFinal一样简单(本人是JFinal用户,从1.9版本开始现在也...

风象南
09/17
1K
4
基于 Spring Cloud 的微服务基础开发平台 - Aooms

Aooms —— 极速微服务开发,像JFinal一样简单 一、Aooms 基于SpringCloud的微服务基础开发平台,旨在降低SpringCloud的复杂度,像使用JFinal一样简单(本人是JFinal用户,从1.9版本开始现在...

风象南
02/05
0
16

没有更多内容

加载失败,请刷新页面

加载更多

正则表达式匹配不包含

^((?!xxx).)*$

安小乐
6分钟前
1
0
python Windows tkinter应用开发3 列出目录的所有文件

在本章中,我们将编写程序来执行此操作。 1)选择文件夹。 2)在UI的标签部分打印该文件夹中的所有文件名(带文件扩展名)。 首先,修改selectFile函数以打开文件夹。主文件如下: from tki...

python测试开发人工智能安全
8分钟前
1
0
使用Laya引擎开发微信小游戏(上)

  使用一个简单的游戏开发示例,由浅入深,介绍了如何用Laya引擎开发微信小游戏。      img      作者:马晓东,腾讯前端高级工程师。      微信小游戏的推出也快一年时间了,...

SEOwhywhy
13分钟前
1
0
react程序开发问题记录

1、webpack.config.dev.js文件的publicpath配置

teamlog
25分钟前
2
0
javascript 值转换为布尔值

任意javascript 的值都可以转换为布尔值。 特别是在 if() 等判断中使用的时候: 下面这些值会被转换为 false undefined , null , 0 , -0 , NaN , "" 空字符串 来自 JavaScript 权威指南 书籍...

之渊
28分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部