当小白遇到--代码生成器
2017-08-11 00:00
148 查看
摘要: 代码生成器
这两天刚刚接触了一个叫代码生成器的东西,太神奇了,以后不用写代码了吗?
呵呵呵......程序员不写代码干什么?
前言:
大家都知道,在做业务开发的时候,通常的模式都是如下过程:
先按业务需要建立好数据库表
按数据库表分别实现它们相关的 Entity , Dao , Service, Controller , Dao层等,解决数据的基本操作,如增删查改等基本的数据操作。
......
然而第二部分这些细活往往比较简单且没有挑战性,纯粹苦力活。能不能有一个模板,直接一键生成上面的一些基本的操作呢?
那是肯定的。
预备知识:
freemacker模板引擎:http://www.sojson.com/tag_freemarker.html
一定Java语言基础
spring 框架
实现思路:
首先我们请来了强大的模板引擎:FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
然后在其基础上按数据库表的结构建立它们相关的 Entity , Dao , Service, Controller , Dao层等的模板。
通过数据库表和模板生成相应的Entity , Dao , Service, Controller , Dao层等。
代码实例:
以数据库表:test表为例:
将test表建立基础数据模板:test.yml
基础代码模板:
Dao层:dao.template
Entity层:entity.template
Controller层:controller.template
service层:service.template
配置文件:base.yml
未完待续。。。。
相关大神博客:
【1】Freemarker官网
【2】可用于企业级开发的JAVA代码生成器
【3】 一个java代码生成器的简单实现
这两天刚刚接触了一个叫代码生成器的东西,太神奇了,以后不用写代码了吗?
呵呵呵......程序员不写代码干什么?
前言:
大家都知道,在做业务开发的时候,通常的模式都是如下过程:
先按业务需要建立好数据库表
按数据库表分别实现它们相关的 Entity , Dao , Service, Controller , Dao层等,解决数据的基本操作,如增删查改等基本的数据操作。
......
然而第二部分这些细活往往比较简单且没有挑战性,纯粹苦力活。能不能有一个模板,直接一键生成上面的一些基本的操作呢?
那是肯定的。
预备知识:
freemacker模板引擎:http://www.sojson.com/tag_freemarker.html
一定Java语言基础
spring 框架
实现思路:
首先我们请来了强大的模板引擎:FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
然后在其基础上按数据库表的结构建立它们相关的 Entity , Dao , Service, Controller , Dao层等的模板。
通过数据库表和模板生成相应的Entity , Dao , Service, Controller , Dao层等。
代码实例:
以数据库表:test表为例:
CREATE TABLE `test`( `id` varchar(64) NOT NULL COMMENT'ID', `content` text NOT NULL COMMENT'描述', PRIMARY KEY (`id`) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
将test表建立基础数据模板:test.yml
# 示例数据 author: "Cedar" package: "com.zxs.application" #生成包名 domain: "test" # 属性列表 fields: - description: "id" type: String java: name: id type: String db: name: id type: varchar length: 64 notnull: true view: name: id input_type: text_area validator: {} - description: "描述" type: String # 业务类型, 还有 url,数字,ip地址,中国手机号码, 数据校验的第一项?? java: name: content type: String db: name: content type: text notnull: true # 是不是重复的? view: name: content # 可以用默认值 input_type: simple_text # input[text], input[email] ?? simple_text, email, url, select, radio search_type: simple_text_like # 可以用默认, simple_text_like, simple_text_eq, simple_select, multiple_select validator: notblank: {}
基础代码模板:
Dao层:dao.template
package ${package}.dao; import ${package}.Basedao; import ${package}.entity.${domain?cap_first}Eentity; @MybatisDao public interface ${domain?cap_first}Dao extends BaseDao<${domain?cap_first}Eentity> { }
Entity层:entity.template
package ${package}.entity; /** * ${domain?cap_first}Entity */ public class ${domain?cap_first} { <#list fields as field> private ${field.java.type} ${field.java.name}; </#list> <#list fields as field> public ${field.java.type} get${field.java.name?cap_first}() { return this.${field.java.name}; } public void set${field.java.name?cap_first}(${field.java.type} ${field.java.name}) { this.${field.java.name} = ${field.java.name}; } </#list> }
Controller层:controller.template
package ${package}.web; import ${package}.entity.${domain?cap_first}Eentity; import ${package}.service.${domain?cap_first}Service; import info.ideatower.infra.shared.query.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; /** * ${domain?cap_first} */ @Controller @RequestMapping("/${domain}") public class ${domain?cap_first}Controller { @Autowired private ${domain?cap_first}Service ${domain}Service; /** * ${domain?cap_first}列表页 * @param model * @return */ @GetMapping(value = {"", "/list"}) public String index(Model model) { Page page = this.${domain}Service.selectPage(Page.DEFAULT,null); model.addAttribute("page", page); return "/${domain}/list"; } /** * ${domain?cap_first}创建页面 * @return */ @GetMapping("/create") public String create(Model model) { model.addAttribute(new ${domain?cap_first}()); return "/${domain}/edit"; } /** * ${domain?cap_first}创建操作 * @param ${domain} * @return */ @PostMapping("/create") public String createForm(${domain?cap_first}Eentity ${domain}Eentity) { this.${domain}Service.insert(${domain}); return "redirect:/${domain}?repage"; } /** * ${domain?cap_first}编辑页面 * @param id ${domain?cap_first}标识 * @param model * @return */ @GetMapping("/{id}") public String edit( @PathVariable(value = "id", required = true) String id, Model model) { ${domain?cap_first}Eentity ${domain}Eentity = this.${domain}Service.selectById(id); model.addAttribute("${domain}", ${domain}); return "/${domain}/edit"; } /** * ${domain?cap_first}编辑 * @param id ${domain?cap_first}标识 * @param ${domain} ${domain?cap_first}数据 * @return */ @PostMapping("/{id}") public String editForm( @PathVariable(value = "id", required = true) String id, ${domain?cap_first}Eentity ${domain}Eentity) { this.${domain}Service.updateById(${domain}); return "redirect:/${domain}?repage"; } /** * ${domain?cap_first}删除 * @param id * @return */ @DeleteMapping("/{id}") public String remove(@PathVariable(value = "id", required = true) String id) { this.${domain}Service.deleteById(id); return "redirect:/${domain}?repage"; } }
service层:service.template
package ${package}.service; import ${package}.dao.${domain?cap_first}Dao; import ${package}.entity.${domain?cap_first}Eentity; import ${package}.service.BaseService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional( readOnly = false) public class ${domain?cap_first}Service extends BaseService<${domain?cap_first}Dao, ${domain?cap_first}Eentity> { }
配置文件:base.yml
source: data: data template: template dest: dest encoding: UTF-8 # datasource # path could specify both file path and directory path #datasource: # type: "jdbc" # user: "simple.yml" # password: "xxx" # include: ['single', 'multiple'] # exclude: [ # excel datasource # datasource: # type: "excel" # map: # A: "erector" # B: "build" datasource: type: "yaml" include: ["single_one"] # for plenty template: - file: entity to: "src/test/entity/${domain?cap_first}Entity.java" - file: controller to: "src/test/web/${domain?cap_first}Controller.java" - file: service to: "src/test/service/${domain?cap_first}Service.java" - file: dao.class to: "src/test/dao/${domain?cap_first}Dao.java" - file: mybatis.mapping.xml to: "src/test/mybatis/${domain?cap_first}Dao.xml" # - # file: single # type: all # to: demo.html
未完待续。。。。
相关大神博客:
【1】Freemarker官网
【2】可用于企业级开发的JAVA代码生成器
【3】 一个java代码生成器的简单实现
相关文章推荐
- 对于一个小白来说,遇到的前端问题(2)
- IAR 疑难杂症一直更新(遇到一个记录一个,小白帖,大神勿进)
- 【小白注意】Windows XP 大胆拥抱Linux系统所遇到的问题
- 理解AC_GAN源码中遇到的一些函数(–小白笔记)
- JDBC连接数据库遇到的问题(小白的错误)
- 小白Android Studio遇到一些BUG整理
- 对于一个小白来说,遇到的前端问题(2)
- 当Zero级小白遇到数据库
- Android-00 小白遇到的第一堆问题
- 对于一个小白来说,遇到的前端问题(1)
- angular2-英雄指南教程(详讲小白上手会遇到的坑)
- 小白学python时候总会遇到的几个问题
- PHP小白遇到的第一个问题Warning: mysql_connect() [function.mysql-connect]
- Oracle小白第一次折腾Oracle遇到的问题
- 【边做项目边学Android】小白会遇到的问题--Appcompat_V7问题
- 阿里云ECS服务器折腾记(一):小白入门遇到的各类问题
- 【小白】记初学百度地图遇到的简单小问题
- 【边做项目边学Android】小白会遇到的问题--Appcompat_V7问题
- 工作中常遇到的小白问题