Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

fishlab/codegenius

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#code genius

##简介 code genius是一个代码生成器,用来生成各种程序代码。目前只支持java,主要是为java web应用程序生成通用代码,然后再根据具需求自己修改。

##使用说明 先看看效果,其他的后面说

需求:编写一个简单的图书信息管理程序 ###生成代码

  1. 打开MySQL命令行,新建一个数据库,例如 book_db
  2. 打开eclipse新建一个web项目 book_demo,Dynamic web module version选择2.5(重要),设置资源编码为UTF-8(否则会有乱码) s_1.PNG
  3. 由于暂时还没上传到maven中央库,手动将codegenius-1.0.0.nodep.jar 添加至项目构件路径,给项目添加maven支持(解决其他依赖)
  4. 新建两个源文件夹config和test分别用来放配置文件和测试用例,code genius默认是这两个文件夹,可以修改
  5. 编写代码
  • 在源文件夹下新建一个Book类
package org.fishlab.book_demo.data;
public class Book {
	private int id;
	private String name;
	private String author;
	private String description;
	private float price;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
}
  • 暂时还没时间写eclipse插件,就用Java写一个启动器吧
package test.generate;
import org.fishlab.codegenius.CodeGenius;
import org.fishlab.codegenius.CodeGeniusConfiguration;
import org.fishlab.codegenius.CodeGeniusException;
import org.fishlab.codegenius.GenerationContext;
import org.fishlab.codegenius.Project;
import org.fishlab.codegenius.datasource.MySQL5DataSource;
import org.junit.Test;
public class Luncher {
    @Test
    public void test() throws CodeGeniusException{
        Project project=new Project("org.fishlab.book_demo");
        project.setDataSource(new MySQL5DataSource("jdbc:mysql://localhost:3306/book_db","root","123456"));
        project.setVersion("1.0.0-demo");
        project.setProperty("hibernate.version", "4.1.7.Final");
        project.setProperty("spring.version","3.2.5.RELEASE");
        CodeGenius genius =CodeGeniusConfiguration.defaultGenius();//默认的配置实例
        GenerationContext context= genius.createContext();
        context.scanPackage("org.fishlab.book_demo.data");//扫描这个包下面的所有类
        context.setOutputDistination(".");//输出目录为当前目录
        context.setProject(project);
        genius.process(context);
    }
}
  • 执行它,如果最后看到如下字样则成功了
all generation done,have fun.
  • 最后生成的的代码如下

s_2.PNG

  • 生成的资源文件以及视图

s_3.PNG

###运行测试

  • 部署至Web服务器并启动
  • 打开浏览器,输入 http://localhost:8080/book_demo/index.html s_4.PNG
  • 由于我们只写了一个实体类,生成的数据类型只有一个 s_5.PNG
  • 点击 Book,现在没有任何记录 s_6.PNG
  • 点击新增数据,会出现一个表单,直接点提交,通不过前台校验 s_7.PNG
  • 按要求将数据填入表单 s_8.PNG
  • 提交,成功了会显示Book列表 s_9.PNG
  • 可以进行查看,编辑,删除操作
  • 查看 s_11.PNG
  • 编辑(图略,和添加差不多)
  • 删除 s_1.PNG

##起源 因为写java代码都写烦了,大部分都是重复的工作,写这样的程序既浪费了大量时间还不增加经验,这样下去生没时候才能升级啊... 很久以前就写过一些可以快速生成代码的程序片段,比如有生成SQL文件的,生成Hibernate映射文件及MyBatis映射文件的。这些程序在一定程度上加快了应用的开发,但是还远不够,因为还有大部分代码也可以按照一定的规则生成。

##原理 用到的原理很简单,主要是使用了模板技术还有java的反射技术,将写的代码修改为一个模板,然后把模板与数据合并输出为文件,输出的文件就是生成的代码。

##源码说明 如果需要修改源代码,除了pom.xml里面的依赖,还需要我写的一个小框架 app-framework

##框架说明 目前为java web项目使用如下框架

  • Spring(context,tx,aop,orm等)实现应用程序资源管理
  • Hibernate实现数据访问层
  • SpringMVC实现控制层
  • Bootstrap3 前台页面

##功能 目前内置的生成器可以生成的代码如下:

  • web配置文件(web.xml)
  • 项目总体框架
  • Spring配置文件以及SpringMVC配置文件
  • maven项目模型文件(POM.xml),包含项目依赖的构件
  • Hibernate映射文件,Hibernate-Spring配置文件
  • 数据访问层(Mapper)接口以及使用Hibernate的实现
  • 业务逻辑层(Serivce)接口以及实现
  • 控制层(Controller)实现
  • 前台页面(包括增删改查)
  • 简单的前台校验代码(javascript)
  • 测试用例(TestCase)

##下一步工作 主要

  • 调程序架构,使之更清晰
  • 分离项目,将基本的类抽取出来成为codegenius,此项目不包含任何代码生成器实现;对于java web代码生成器的实现抽取为codegenius-java-web
  • 嵌入脚本语言(BeanShell,lua或其它)
  • 增加xml配置文件支持

java web:

  • 增加jsr303,后台注解校验
  • 增加shiro,通用权限验证

About

auto generate code for kinds of programs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.