文档章节

一个简单的JFinal代码生成器

玛雅牛
 玛雅牛
发布于 2013/07/01 00:35
字数 810
阅读 4K
收藏 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");
	}
} 


© 著作权归作者所有

玛雅牛

玛雅牛

粉丝 487
博文 115
码字总数 28117
作品 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-layui v1.4.2 强势来袭,XSS、CSRF防御、代码器

JFinal-layui 极速开发企业应用管理系统,是以 JFinal+layui 为核心的企业应用项目架构,利用 JFinal 的特性与 layui 完美结合,达到快速启动项目的目的。让开发更简单高效,即使你不会前端l...

琴海森林
03/30
1.7K
4
JFinal-Code-Online 1.0 发布,极简自由的代码生成器

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

绝望的八皮
2015/01/06
8.2K
88
从入门到大神精通JFinal视频教程

1.4JFinaldemo.zip 1.1 《精通JFinal》课程简介.mp4 1.2 JFinal入门认识JFinal.mp4 1.3 JFinal入门JFinal的HelloWorld.mp4 1.4 JFinal入门详解JFinalConfig配置.mp4 2.1 JFinal控制器详解控制......

osc_cd6k6fu1
2019/04/11
23
0
JFinal-layui 极速开发企业应用系统-代码器上线

JFinal-layui极速开发企业应用管理系统今天终于迎来了属于自己的社区-琴海森林 JFinal-layui官方社区,社区提供了代码生成器功能,可以定制专属自己的项目代码模板。 琴海森林 JFinal-layui...

琴海森林
2019/04/22
2.8K
5
JFinal极速开发框架使用笔记(三) 分析Model和ActiveRecord

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

osc_rlhs4hdf
2018/01/23
7
0

没有更多内容

加载失败,请刷新页面

加载更多

Oracle中单行函数操作详解

单行函数--PL/SQL (一)字符函数 函 数 说 明 CONCAT 拼接两个字符串,与 || 相同 INITCAP 将字符串的第一个字母变为大写 INSTR 找出某个字符串的位置 LENGTH 以字符给出字符串的长度 REPL...

煌sir
49分钟前
30
0
软件测试人常见问题解答,你一定想知道!

很多职场转行人员都会遇见这样那样的困惑与问题,今天小编针对同学们的问题作出了有效建议。 我是非计算机专业出身,可以学软件测试吗? 我年纪太大了,竞争不过年轻人,怎么办? 如果学完找...

爱码小哥
54分钟前
21
0
Java四种引用类型

引用与对象 每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。 在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的...

architect刘源源
55分钟前
16
1
python萌新日记

5.31日:安装python成功,更新pip失败,我都会背下命令行了,python -m pip install --upgrade pip,命令行意思:加载pip模组,安装,更新pip.可惜一直失败,嘤嘤嘤,哭了,升级不到pip2.0,后来在百度的...

老bia同学
57分钟前
17
0
Pycharm远程服务器编程环境并能使用Xming显示图像界面

本文主要使用pycharm+Xming实现使用服务器的编程环境,并在本地显示图像界面, 同时使用Putty远程服务器终端,使用WinSCP可以从局域网向服务器快速传输文件。 主要使用的几个软件:、 Pychar...

TimeBear
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部