抽空写了一个读取数据库信息,直接生成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");
}
}