{
  "author" : "Peter Cheung",
  "version" : "1.2.8",
  "userSecure" : "",
  "currTypeMapperGroupName" : "Default",
  "currTemplateGroupName" : "mybatis-mvc",
  "currColumnConfigGroupName" : "Default",
  "currGlobalConfigGroupName" : "Default",
  "typeMapper" : { },
  "template" : {
    "mybatis-mvc" : {
      "name" : "mybatis-mvc",
      "elementList" : [ {
        "name" : "domain.java.vm",
        "code" : "##引入宏定义\n$!{define.vm}\n\n##使用宏定义设置回调(保存位置与文件后缀)\n#save(\"/domain\", \".java\")\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain;\n\nimport lombok.extern.slf4j.Slf4j;\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n##使用宏定义实现类注释信息\n#tableComment(\"对象\")\n@Slf4j\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@ApiModel(\"$!{tableInfo.comment}($!{tableInfo.name})对象\" )\npublic class $!{tableInfo.name} implements Serializable {\n    private static final long serialVersionUID = $!tool.serial();\n    #foreach($column in $tableInfo.fullColumn)\n        #if(${column.comment})/**${column.comment}*/#end\n        @ApiModelProperty(value = \"#if(${column.comment})${column.comment}#end\" )\n        private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n    #end\n    /**用此变量排序*/\n    @ApiModelProperty(value = \"用此变量排序\" )\n    private String orderByMe;\n/**\n     * 升降序\n     * <p>\n     * ASC:表示按升序排序\n     * <p>\n     * DESC:表示按降序排序\n     */\n    @ApiModelProperty(value = \"升降序 ASC:表示按升序排序 DESC:表示按降序排序\" )\n    private String orderByMeSort;\n    /**\n * 页码\n */\n    @ApiModelProperty(value = \"页码\" )\n    private int pageNum;\n    /**\n     * 一页数量\n     */\n    @ApiModelProperty(value = \"一页数量\" )\n    private int pageSize;\n}\n"
      }, {
        "name" : "mapper.java.vm",
        "code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Mapper\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/mapper\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}mapper;\n\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层\n *\n * @author $!author\n * @since $!time.currTime()\n */\n@Mapper\npublic interface $!{tableName} {\n\n        /**\n         * 通过ID查询单条数据\n         *\n         * @param $!pk.name 主键\n         * @return 实例对象\n         */\n        $!{tableInfo.name} queryById($!pk.shortType $!pk.name);\n\n        /**\n         * 查询指定行数据\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 查询条件\n         * @return 对象列表\n         */\n        List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 模糊查询指定行数据\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 查询条件\n         * @return 对象列表\n         */\n        List<$!{tableInfo.name}> queryAllLike($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 统计总行数\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 查询条件\n         * @return 总行数\n         */\n        long count($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 新增数据\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n         * @return 影响行数\n         */\n        int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 批量新增数据(MyBatis原生foreach方法)\n         *\n         * @param entities List<$!{tableInfo.name}> 实例对象列表\n         * @return 影响行数\n         */\n        int insertBatch(@Param(\"entities\") List<$!{tableInfo.name}> entities);\n\n        /**\n         * 批量新增或按主键更新数据(MyBatis原生foreach方法)\n         *\n         * @param entities List<$!{tableInfo.name}> 实例对象列表\n         * @return 影响行数\n         * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参\n         */\n        int insertOrUpdateBatch(@Param(\"entities\") List<$!{tableInfo.name}> entities);\n\n        /**\n         * 修改数据\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n         * @return 影响行数\n         */\n        int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 修改全部非null数据\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n         * @return 影响行数\n         */\n        int updateAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 通过主键删除数据\n         *\n         * @param $!pk.name 主键\n         * @return 影响行数\n         */\n        int deleteById($!pk.shortType $!pk.name);\n\n}\n"
      }, {
        "name" : "mapper.xml.vm",
        "code" : "##引入mybatis支持\n$!{mybatisSupport.vm}\n\n##设置保存名称与保存位置\n$!callback.setFileName($tool.append($!{tableInfo.name}, \"Mapper.xml\"))\n$!callback.setSavePath($tool.append($modulePath, \"/src/main/resources/mapper\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"$!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper\">\n\n    <resultMap type=\"$!{tableInfo.savePackageName}.domain.$!{tableInfo.name}\" id=\"$!{tableInfo.name}Map\">\n        #foreach($column in $tableInfo.fullColumn)\n            <result property=\"$!column.name\" column=\"$!column.obj.name\" jdbcType=\"$!column.ext.jdbcType\"/>\n        #end\n    </resultMap>\n\n    <!--查询单个-->\n    <select id=\"queryById\" resultMap=\"$!{tableInfo.name}Map\">\n        select\n            #allSqlColumn()\n\n        from $!tableInfo.obj.name\n            where $!pk.obj.name = #{$!pk.name}\n    </select>\n\n    <!--查询指定行数据-->\n    <select id=\"queryAll\" resultMap=\"$!{tableInfo.name}Map\">\n        select\n        #allSqlColumn()\n        from $!tableInfo.obj.name\n        <where>\n            #foreach($column in $tableInfo.fullColumn)\n                <if test=\"$!column.name != null#if($column.type.equals(\n                    \"java.lang.String\")) and $!column.name != ''#end\">\n                    and $!column.obj.name = #{$!column.name}\n                </if>\n            #end\n        </where>\n        <if test=\"orderByMe != null and orderByMe != '' and orderByMeSort != null and orderByMeSort != ''\">\n            order by\n            <choose>\n                #foreach($column in $tableInfo.fullColumn)\n                    <when test=\"orderByMe == '$!column.name' and orderByMeSort == 'ASC'\">\n                        $!column.obj.name\n                    </when>\n                #end\n                #foreach($column in $tableInfo.fullColumn)\n                    <when test=\"orderByMe == '$!column.name' and orderByMeSort == 'DESC'\">\n                        $!column.obj.name desc\n                    </when>\n                #end\n                <otherwise>\n                    1\n                </otherwise>\n            </choose>\n        </if>\n    </select>\n\n    <!--模糊查询指定行数据-->\n    <select id=\"queryAllLike\" resultMap=\"$!{tableInfo.name}Map\">\n        select\n        #allSqlColumn()\n        from $!tableInfo.obj.name\n        <where>\n            #foreach($column in $tableInfo.fullColumn)\n                <if test=\"$!column.name != null#if($column.type.equals(\n                    \"java.lang.String\")) and $!column.name != ''#end\">\n                    and $!column.obj.name like concat('%',#{$!column.name},'%')\n                </if>\n            #end\n        </where>\n        <if test=\"orderByMe != null and orderByMe != '' and orderByMeSort != null and orderByMeSort != ''\">\n            order by\n            <choose>\n                #foreach($column in $tableInfo.fullColumn)\n                    <when test=\"orderByMe == '$!column.name' and orderByMeSort == 'ASC'\">\n                        $!column.obj.name\n                    </when>\n                #end\n                #foreach($column in $tableInfo.fullColumn)\n                    <when test=\"orderByMe == '$!column.name' and orderByMeSort == 'DESC'\">\n                        $!column.obj.name desc\n                    </when>\n                #end\n                <otherwise>\n                    1\n                </otherwise>\n            </choose>\n        </if>\n    </select>\n\n    <!--统计总行数-->\n    <select id=\"count\" resultType=\"java.lang.Long\">\n        select count(*)\n        from $!tableInfo.obj.name\n        <where>\n            #foreach($column in $tableInfo.fullColumn)\n                <if test=\"$!column.name != null#if($column.type.equals(\n                    \"java.lang.String\")) and $!column.name != ''#end\">\n                    and $!column.obj.name = #{$!column.name}\n                </if>\n            #end\n        </where>\n    </select>\n\n    <!--新增所有列-->\n    <insert id=\"insert\" keyProperty=\"$!pk.name\">\n        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($foreach.hasNext), #end#end)\n                values (#foreach($column in $tableInfo.fullColumn)#{$!{column.name}}#if($foreach.hasNext), #end#end)\n    </insert>\n\n    <insert id=\"insertBatch\" keyProperty=\"$!pk.name\">\n        insert into $!{tableInfo.obj.name}\n        (#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($foreach.hasNext), #end#end)\n        values\n        <foreach collection=\"entities\" item=\"entity\" separator=\",\">\n            (#foreach($column in $tableInfo.fullColumn)#{entity.$!{column.name}}#if($foreach.hasNext), #end#end)\n        </foreach>\n    </insert>\n\n    <insert id=\"insertOrUpdateBatch\" keyProperty=\"$!pk.name\">\n        insert into $!{tableInfo.obj.name}\n        (#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($foreach.hasNext), #end#end)\n        values\n        <foreach collection=\"entities\" item=\"entity\" separator=\",\">\n            (#foreach($column in $tableInfo.fullColumn)#{entity.$!{column.name}}#if($foreach.hasNext), #end#end)\n        </foreach>\n        on duplicate key update\n        #foreach($column in $tableInfo.fullColumn)$!column.obj.name = values($!column.obj.name)#if($foreach.hasNext),\n        #end\n        #end\n\n    </insert>\n\n    <!--通过主键修改数据-->\n    <update id=\"update\">\n        update $!{tableInfo.obj.name}\n        <set>\n            #foreach($column in $tableInfo.fullColumn)\n                <if test=\"$!column.name != null#if($column.type.equals(\n                    \"java.lang.String\")) and $!column.name != ''#end\">\n                    $!column.obj.name = #{$!column.name},\n                </if>\n            #end\n        </set>\n        where $!pk.obj.name = #{$!pk.name}\n    </update>\n\n    <!--通过主键修改全部非null数据-->\n    <update id=\"updateAll\">\n        update $!{tableInfo.obj.name}\n        <set>\n            #foreach($column in $tableInfo.fullColumn)\n                <if test=\"$!column.name != null\">\n                    $!column.obj.name = #{$!column.name},\n                </if>\n            #end\n        </set>\n        where $!pk.obj.name = #{$!pk.name}\n    </update>\n\n    <!--通过主键删除-->\n    <delete id=\"deleteById\">\n        delete\n        from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}\n    </delete>\n\n</mapper>\n"
      }, {
        "name" : "r.java.vm",
        "code" : "##设置回调\n$!callback.setFileName($tool.append(\"R.java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/util\"))\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}util;\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Getter;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\n\nimport java.io.Serializable;\n\n/**\n * 统一返回对象R\n *\n * @author $!author\n * @since $!time.currTime()\n */\n@Slf4j\n@Getter\n@ApiModel(\"统一返回对象R\")\npublic class R implements Serializable {\n    private static final long serialVersionUID = $!tool.serial();\n    @ApiModelProperty(value = \"响应编码\")\n    private int code;\n    @ApiModelProperty(value = \"响应信息\")\n    private String message;\n    @ApiModelProperty(value = \"响应数据\")\n    private Object data;\n\n    /**\n     * 私有构造方法\n     */\n    private R() {\n    }\n\n    /**\n     * 设置数据\n     *\n     * @param data 数据\n     * @return R\n     */\n    public R data(Object data) {\n        this.data = data;\n        return this;\n    }\n\n    /**\n     * 成功\n     *\n     * @return R\n     */\n    public static R ok() {\n        R r = new R();\n        r.code = HttpStatus.OK.value();\n        r.message = HttpStatus.OK.getReasonPhrase();\n        return r;\n    }\n\n    /**\n     * 由于被认为是客户端错误\n     * 错误的请求语法\n     * 无效的请求消息帧或欺骗性的请求路由\n     * 服务器无法或不会处理请求。\n     *\n     * @return R\n     */\n    public static R badRequest() {\n        R r = new R();\n        r.code = HttpStatus.BAD_REQUEST.value();\n        r.message = HttpStatus.BAD_REQUEST.getReasonPhrase();\n        return r;\n    }\n\n\n    /**\n     * 认证授权失败 Unauthorized\n     * 请求要求用户的身份认证\n     * 客户端必须对自身进行身份验证才能获得请求的响应\n     *\n     * @return R\n     */\n    public static R unauthorized() {\n        R r = new R();\n        r.code = HttpStatus.UNAUTHORIZED.value();\n        r.message = HttpStatus.UNAUTHORIZED.getReasonPhrase();\n        return r;\n    }\n\n    /**\n     * Forbidden\n     * 服务器理解请求客户端的请求,但是拒绝执行此请求\n     * 客户端没有访问内容的权限,也就是说,它是未经授权的,因此服务器拒绝提供请求的资源。\n     * 与401Unauthorized不同,服务器知道客户端的身份。\n     *\n     * @return R\n     */\n    public static R forbidden() {\n        R r = new R();\n        r.code = HttpStatus.FORBIDDEN.value();\n        r.message = HttpStatus.FORBIDDEN.getReasonPhrase();\n        return r;\n    }\n\n    /**\n     * Internal Server Error\n     * 服务器内部错误,无法完成请求\n     *\n     * @return R\n     */\n    public static R exp() {\n        R r = new R();\n        r.code = HttpStatus.INTERNAL_SERVER_ERROR.value();\n        r.message = HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase();\n        return r;\n    }\n\n    /**\n     * 将R转换为ResponseEntity\n     *\n     * @param r body\n     * @return 响应实体\n     */\n    public static ResponseEntity<R> deal(R r) {\n        switch (r.getCode()) {\n            case 400:\n                return ResponseEntity.badRequest().body(r);\n            case 401:\n                return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(r);\n            case 403:\n                return ResponseEntity.status(HttpStatus.FORBIDDEN).body(r);\n            case 500:\n                return ResponseEntity.internalServerError().body(r);\n            default:\n                return ResponseEntity.ok(r);\n        }\n    }\n}"
      }, {
        "name" : "service.java.vm",
        "code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Service\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/service\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;\n\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};\nimport $!{tableInfo.savePackageName}.util.R;\n\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表服务接口\n *\n * @author $!author\n * @since $!time.currTime()\n */\npublic interface $!{tableName} {\n\n        /**\n         * 通过ID查询单条数据\n         *\n         * @param $!pk.name 主键\n         * @return 实例对象\n         */\n        R queryById($!pk.shortType $!pk.name);\n\n        /**\n         * 全查询\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 筛选条件\n         * @return 查询结果\n         */\n        R queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 模糊全查询\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 筛选条件\n         * @return 查询结果\n         */\n        R queryAllLike($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 分页查询\n         *\n         * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n         * @return 查询结果\n         */\n        R page($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 分页模糊查询\n         *\n         * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n         * @return 查询结果\n         */\n        R pageLike($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 新增数据\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n         * @return 实例对象\n         */\n        R insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 修改数据\n         *\n         * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n         * @return 实例对象\n         */\n        R update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n        /**\n         * 通过主键删除数据\n         *\n         * @param $!pk.name 主键\n         * @return 是否成功\n         */\n        R deleteById($!pk.shortType $!pk.name);\n\n        }"
      }, {
        "name" : "serviceimpl.java.vm",
        "code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"ServiceImpl\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/service/impl\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;\n\nimport com.github.pagehelper.PageHelper;\nimport lombok.extern.slf4j.Slf4j;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};\nimport $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;\nimport $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;\nimport $!{tableInfo.savePackageName}.util.R;\nimport org.springframework.stereotype.Service;\n\nimport javax.annotation.Resource;\n\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表服务实现类\n *\n * @author $!author\n * @since $!time.currTime()\n */\n@Slf4j\n@Service\npublic class $!{tableName} implements $!{tableInfo.name}Service {\n@Resource\nprivate $!{tableInfo.name}Mapper $!tool.firstLowerCase($!{tableInfo.name})Mapper;\n\n/**\n * 通过ID查询单条数据\n *\n * @param $!pk.name 主键\n * @return 实例对象\n */\n@Override\npublic R queryById($!pk.shortType $!pk.name) {\n        return R.ok().data(this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.queryById($!pk.name));\n        }\n\n/**\n * 全查询\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n * @return 查询结果\n */\n@Override\npublic R queryAll($!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {\n        return R.ok().data(this.$!{tool.firstLowerCase($tableInfo.name)}Mapper.queryAll($!{tool.firstLowerCase($tableInfo.name)}));\n        }\n\n/**\n * 模糊全查询\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n * @return 查询结果\n */\n@Override\npublic R queryAllLike($!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {\n        return R.ok().data(this.$!{tool.firstLowerCase($tableInfo.name)}Mapper.queryAllLike($!{tool.firstLowerCase($tableInfo.name)}));\n        }\n\n/**\n * 分页查询\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n * @return 查询结果\n */\n@Override\npublic R page($!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {\n        return R.ok().data(PageHelper.startPage($!{tool.firstLowerCase($tableInfo.name)}.getPageNum(), $!{tool.firstLowerCase($tableInfo.name)}.getPageSize()).doSelectPageInfo(() -> this.$!{tool.firstLowerCase($tableInfo.name)}Mapper.queryAll($!{tool.firstLowerCase($tableInfo.name)})));\n        }\n\n/**\n * 分页模糊查询\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n * @return 查询结果\n */\n@Override\npublic R pageLike($!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {\n        return R.ok().data(PageHelper.startPage($!{tool.firstLowerCase($tableInfo.name)}.getPageNum(), $!{tool.firstLowerCase($tableInfo.name)}.getPageSize()).doSelectPageInfo(() -> this.$!{tool.firstLowerCase($tableInfo.name)}Mapper.queryAllLike($!{tool.firstLowerCase($tableInfo.name)})));\n        }\n\n/**\n * 新增数据\n *\n * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n * @return 实例对象\n */\n@Override\npublic R insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {\n        this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.insert($!tool.firstLowerCase($!{tableInfo.name}));\n        return R.ok().data($!tool.firstLowerCase($!{tableInfo.name}));\n        }\n\n/**\n * 修改数据\n *\n * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n * @return 实例对象\n */\n@Override\npublic R update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {\n        this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.updateAll($!tool.firstLowerCase($!{tableInfo.name}));\n        return R.ok().data(this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.queryById($!{tool.firstLowerCase($!{tableInfo.name})}.get$!tool.firstUpperCase($pk.name)()));\n        }\n\n/**\n * 通过主键删除数据\n *\n * @param $!pk.name 主键\n * @return 是否成功\n */\n@Override\npublic R deleteById($!pk.shortType $!pk.name) {\n        boolean del = this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.deleteById($!pk.name) > 0;\n        return R.ok().data(del);\n        }\n        }"
      }, {
        "name" : "controller.java.vm",
        "code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Controller\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/controller\"))\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport lombok.extern.slf4j.Slf4j;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};\nimport $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;\nimport $!{tableInfo.savePackageName}.util.R;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\n\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表控制层\n *\n * @author $!author\n * @since $!time.currTime()\n */\n@Slf4j\n@RestController\n@RequestMapping(\"api/$!{tableInfo.name}\")\n@Api(tags = \"$!{tableInfo.comment}($!{tableInfo.name})表控制层\")\npublic class $!{tableName} {\n/**\n * 服务对象\n */\n@Resource\nprivate $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;\n\n/**\n * 全查询\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n * @return 查询结果\n */\n@ApiOperation(\"全查询\")\n@GetMapping(\"all\")\npublic R queryAll(@ApiParam(value = \"$!{tool.firstLowerCase($tableInfo.name)} 筛选条件\") $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}){\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Service.queryAll($!{tool.firstLowerCase($tableInfo.name)});\n        }\n\n/**\n * 模糊全查询\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n * @return 查询结果\n */\n@ApiOperation(\"模糊全查询\")\n@PostMapping(\"like\")\npublic R queryAllLike(@ApiParam(value = \"$!{tool.firstLowerCase($tableInfo.name)} 筛选条件\") $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}){\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Service.queryAllLike($!{tool.firstLowerCase($tableInfo.name)});\n        }\n\n/**\n * 通过主键查询单条数据\n *\n * @param id 主键\n * @return 单条数据\n */\n@ApiOperation(\"通过主键查询单条数据\")\n@GetMapping(\"one\")\npublic R queryById(@ApiParam(value = \"id 主键\") $!pk.shortType id){\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Service.queryById(id);\n        }\n\n/**\n * 分页查询\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n * @return 查询结果\n */\n@ApiOperation(\"分页查询\")\n@PostMapping(\"page\")\npublic R page(@ApiParam(value = \"$!{tool.firstLowerCase($tableInfo.name)} 筛选条件\") @RequestBody $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}){\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Service.page($!{tool.firstLowerCase($tableInfo.name)});\n        }\n\n/**\n * 分页模糊查询\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件\n * @return 查询结果\n */\n@ApiOperation(\"分页模糊查询\")\n@PostMapping(\"page/like\")\npublic R pageLike(@ApiParam(value = \"$!{tool.firstLowerCase($tableInfo.name)} 筛选条件\") @RequestBody $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}){\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Service.pageLike($!{tool.firstLowerCase($tableInfo.name)});\n        }\n\n/**\n * 新增数据\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 实体\n * @return 新增结果\n */\n@ApiOperation(\"新增数据\")\n@PostMapping(\"add\")\npublic R add(@ApiParam(value = \"$!{tool.firstLowerCase($tableInfo.name)} 实体\") @RequestBody $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}){\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Service.insert($!{tool.firstLowerCase($tableInfo.name)});\n        }\n\n/**\n * 编辑数据\n *\n * @param $!{tool.firstLowerCase($tableInfo.name)} 实体\n * @return 编辑结果\n */\n@ApiOperation(\"编辑数据\")\n@PostMapping(\"edit\")\npublic R edit(@ApiParam(value = \"$!{tool.firstLowerCase($tableInfo.name)} 实体\") @RequestBody $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}){\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Service.update($!{tool.firstLowerCase($tableInfo.name)});\n        }\n\n/**\n * 删除数据\n *\n * @param id 主键\n * @return 删除是否成功\n */\n@ApiOperation(\"删除数据\")\n@GetMapping(\"delete\")\npublic R deleteById(@ApiParam(value = \"id 主键\") $!pk.shortType id){\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Service.deleteById(id);\n        }\n        }\n"
      } ]
    }
  },
  "columnConfig" : { },
  "globalConfig" : { }
}