- watch项目,因为还要完善
- fork项目,有bug和好建议,然后pull request给我
- 有问题,email我:[email protected]
- 2秒内生成代码,启动,postman直接调用接口
- 从此告别创建xml,bean,controller,service
- 节省70%的时间,用来做更意义的事情
- 开除所有初级程序员
- clone请选择1.0.x分支
- 从之前的单module变成多module
- 直接支持微服务
- springboot版本为2.0.x
- 其他常见的配置都有:redis集群,邮箱,不同的环境变量
- 该生成springmvc+spring+mybatis的服务端代码
- 生成的模块包括controller、bean、service、mapper、mapperXML
- 其中controller为restful接口
- 该工具使用了freemarker,大家要可以在我的基础上自定义开发
- 执行zlinks-sample的CodeGenApp main()方法
- 修改jdbc.properties为自己的数据库配置
- conf.properties可以配置表的数量、模块的类型。默认为全数据库表,全模块的代码
- templates下面为模块的模板文件。
- IDE建议用IntelliJ IDEA
- zlinks-sample的有建表sql脚本:create.sql
package com.zlinks.controller;
import com.zlinks.Routes;
import com.zlinks.domain.RoleInfo;
import com.zlinks.service.RoleInfoService;
import com.zlinks.common.web.BaseController;
import com.zlinks.common.web.JsonResult;
import com.zlinks.common.web.PageResult;
import com.zlinks.common.web.RestDoing;
import com.zlinks.Routes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* Copyright (C), 2017-2020, cn.zlinks
* FileName: RoleInfoController
* Author: zhangjh
* Date: 2018-7-10 19:31:43
* Description: 控制层
*/
@RestController
@RequestMapping(value = Routes.API_VERSION)
public class RoleInfoController extends BaseController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private RoleInfoService roleInfoService;
/**
* @api {post} /roleInfos/save 01. RoleInfo删除
* @apiPermission Login in Users
* @apiGroup RoleInfo
* @apiVersion 1.0.1
* @apiParam {Number} id <code>必须参数</code> id
* @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK
* {
* "code": 0,
* "data": 1
* "desc": "Success",
* "timestamp": "2018-7-10 19:31:43:082"
* }
* @apiErrorExample {json} Error-Response:
* HTTP/1.1 200 OK
* {
* "code": 110002,
* "desc": "Param is null or error",
* "timestamp": "2018-7-10 19:31:43:479"
* }
*/
@RequestMapping(value = "/roleInfos/delete/{id}", method = RequestMethod.DELETE)
public JsonResult deleteJson(HttpServletRequest request, @PathVariable("id") int id) {
RestDoing doing = jsonResult -> {
int counts = roleInfoService.deleteById(id);
jsonResult.data = counts;
};
return doing.go(request, logger);
}
/**
* @api {post} /roleInfos/save 02. RoleInfo详细信息
* @apiPermission Login in Users
* @apiGroup RoleInfo
* @apiVersion 1.0.1
* @apiParam {Long} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiParam {Long} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiParam {String} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK
* {
* "code": 0,
* "data": 1
* "desc": "Success",
* "timestamp": "2018-7-10 19:31:43:082"
* }
* @apiErrorExample {json} Error-Response:
* HTTP/1.1 200 OK
* {
* "code": 110002,
* "desc": "Param is null or error",
* "timestamp": "2018-7-10 19:31:43:479"
* }
*/
@RequestMapping(value = "/roleInfos/info/{id}")
public JsonResult info(HttpServletRequest request, @PathVariable("id") Long id) {
RestDoing doing = jsonResult -> {
RoleInfo entity = roleInfoService.queryInfoById(id);
jsonResult.data = entity;
};
return doing.go(request, logger);
}
/**
* @api {post} /roleInfos/list 03. RoleInfo列表查询
* @apiPermission Login in Users
* @apiGroup RoleInfo
* @apiVersion 1.0.1
* @apiParam {Number} pageNo <code>必须参数</code> 页码,从1开始
* @apiParam {Number} pageSize <code>必须参数</code> 页码,每页显示的记录数量
* @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK
* {
* "code": 0,
* "data": 1
* "desc": "Success",
* "timestamp": "2018-7-10 19:31:43:082"
* }
* @apiErrorExample {json} Error-Response:
* HTTP/1.1 200 OK
* {
* "code": 110002,
* "desc": "Param is null or error",
* "timestamp": "2018-7-10 19:31:43:479"
* }
*/
@RequestMapping(value = "/roleInfos/list")
public JsonResult page(HttpServletRequest request, RoleInfo roleInfo) {
RestDoing doing = jsonResult -> {
RoleInfo pageInfo = getPage(roleInfo, RoleInfo.class);
PageResult<RoleInfo> pageResult = roleInfoService.findPage(roleInfo);
jsonResult.data = pageResult;
};
return doing.go(request, logger);
}
/**
* @api {post} /roleInfos/save 03. RoleInfo新增
* @apiPermission Login in Users
* @apiGroup RoleInfo
* @apiVersion 1.0.1
* @apiParam {Long} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiParam {Long} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiParam {String} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK
* {
* "code": 0,
* "data": 1
* "desc": "Success",
* "timestamp": "2018-7-10 19:31:43:082"
* }
* @apiErrorExample {json} Error-Response:
* HTTP/1.1 200 OK
* {
* "code": 110002,
* "desc": "Param is null or error",
* "timestamp": "2018-7-10 19:31:43:479"
* }
*/
@RequestMapping(value = "/roleInfos/save", method = RequestMethod.POST)
public JsonResult add(HttpServletRequest request, @RequestBody RoleInfo roleInfo) {
RestDoing doing = jsonResult -> {
int counts = roleInfoService.add(roleInfo);
jsonResult.data = counts;
};
return doing.go(request, logger);
}
/**
* @api {post} /roleInfos/update/{id} 03. RoleInfo修改
* @apiPermission Login in Users
* @apiGroup RoleInfo
* @apiVersion 1.0.1
* @apiParam {Long} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiParam {Long} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiParam {String} prop.propertyName <code>必须参数</code> RoleInfo的prop.propertyName
* @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK
* {
* "code": 0,
* "data": 1
* "desc": "Success",
* "timestamp": "2018-7-10 19:31:43:082"
* }
* @apiErrorExample {json} Error-Response:
* HTTP/1.1 200 OK
* {
* "code": 110002,
* "desc": "Param is null or error",
* "timestamp": "2018-7-10 19:31:43:479"
* }
*/
@RequestMapping(value = "/roleInfos/save", method = RequestMethod.PUT)
public JsonResult update(HttpServletRequest request, @RequestBody RoleInfo roleInfo) {
RestDoing doing = jsonResult -> {
int counts = roleInfoService.update(roleInfo);
jsonResult.data = counts;
};
return doing.go(request, logger);
}
}
package com.zlinks.domain;
import com.alibaba.fastjson.JSON;
import com.zlinks.common.dto.pager.PagerInfo;
/**
* Copyright (C), 2017-2020, cn.zlinks
* FileName: RoleInfo
* Author: zhangjh
* Date: 2018-7-10 19:31:43
* Description: 表名:role_info,描述:
*/
public class RoleInfo extends PagerInfo {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
/**
*
*/
private Long id;
/**
*
*/
private Long roleId;
/**
*
*/
private String roleName;
/**
* 获取
*/
public Long getId() {
return this.id;
}
/**
* 设置
*/
public void setId(Long id) {
this.id = id;
}
/**
* 获取
*/
public Long getRoleId() {
return this.roleId;
}
/**
* 设置
*/
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
/**
* 获取
*/
public String getRoleName() {
return this.roleName;
}
/**
* 设置
*/
public void setRoleName(String roleName) {
this.roleName = roleName;
}
@Override
public String toString() {
return JSON.toJSONStringWithDateFormat(this, "yyyy-MM-dd HH:mm:ss");
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zlinks.mapper.RoleInfoMapper">
<sql id="basicSelectSql">
`id` AS `id`,
`role_id` AS `roleId`,
`role_name` AS `roleName`
</sql>
<sql id="basicWhereColumn">
<if test="id != null">
AND `id` = #{id}
</if>
<if test="roleId != null">
AND `role_id` = #{roleId}
</if>
<if test="roleName != null">
AND `role_name` = #{roleName}
</if>
</sql>
<sql id="basicWhereEntitySql">
<where>
<include refid="basicWhereColumn"/>
</where>
</sql>
<sql id="basicWhereMapSql">
<where>
<include refid="basicWhereColumn"/>
</where>
</sql>
<select id="queryInfoById" resultType="com.zlinks.domain.RoleInfo">
SELECT
<include refid="basicSelectSql"/>
FROM `role_info`
<where>
`id` = #{id}
</where>
LIMIT 1;
</select>
<select id="selectCount" resultType="Integer">
SELECT COUNT(*)
FROM `role_info`
;
</select>
<select id="selectByCondition" resultType="Integer">
SELECT COUNT(*)
FROM `role_info`
<include refid="basicWhereEntitySql"/>
;
</select>
<select id="getList" resultType="com.zlinks.domain.RoleInfo">
SELECT
<include refid="basicSelectSql"/>
FROM `role_info`
;
</select>
<update id="update">
UPDATE `role_info`
<set>
<if test="roleId != null">
`role_id` = #{roleId},
</if>
<if test="roleName != null">
`role_name` = #{roleName},
</if>
</set>
<where>
`id` = #{id}
</where>
</update>
<update id="deleteById">
UPDATE `role_info`
SET `isDeleted`=1
<where>
`id` = #{id}
</where>
</update>
<insert id="add" useGeneratedKeys="true" keyProperty="id">
INSERT INTO
`role_info`
(`role_id`,`role_name`)
VALUES
(#{roleId},#{roleName})
</insert>
<insert id="addList">
INSERT INTO
`role_info`
(`role_id`,`role_name`)
VALUES
<foreach collection="list" item="item" index="index" separator="," >
(#{item.roleId},#{item.roleName})
</foreach>
</insert>
<sql id="orderSql">
<if test="orderSql != null and orderSql != ''">
${orderSql}
</if>
</sql>
<sql id="pageSql">
<if test="pageSql != null and pageSql != ''">
${pageSql}
</if>
</sql>
<sql id="whereContentAll">
<where>
<include refid="basicWhereColumn"/>
<if test="findSql != null" >
${findSql}
</if>
</where>
</sql>
<select id="findByPage" resultType="com.zlinks.domain.RoleInfo" >
SELECT
<include refid="basicSelectSql" />
FROM `role_info`
<include refid="whereContentAll"/>
<include refid="orderSql" />
<include refid="pageSql" />
</select>
<select id="findByPageCount" >
SELECT COUNT(`id`)
FROM `role_info`
<include refid="whereContentAll"/>
<include refid="orderSql" />
</select>
</mapper>