表明前缀选项(感谢@wwlg的建议)。 是否带字段注释设置(感谢@fengpojian的建议)。优化Mybatis的''!=判断(感谢@zhongsb的建议)。 Mybatis-Plus增加Service层(感谢@yf466532479的建议)。

This commit is contained in:
MOSHOW郑锴 2021-01-16 17:37:30 +08:00
parent f5359f871f
commit a10a330e48
14 changed files with 139 additions and 106 deletions

View File

@ -20,7 +20,7 @@
> #支持`MySQL`、Oracle、PgSQL三大主流数据库
>
>generate to many popular templates by ddl-sql/insert-sql/simple json<br>
>可通过`建表SQL语句``INSERT语句`或者`简单JSON`生成`JPA/JdbcTemplate/Mybatis/MybatisPlus/BeetlSQL`相关模板代码.
> 可通过`建表SQL语句``INSERT语句`或者`简单JSON`生成`JPA/JdbcTemplate/Mybatis/MybatisPlus/BeetlSQL`相关模板代码.
>
>thanks for your using and feedback,I'm inspired by the 600PV every day and github more than 700 stars <br>
> 感谢大家的使用和反馈每天六百的PV和获得超过七百多的星星是我前进和继续做下去的动力。
@ -29,14 +29,15 @@
> 愿大家可以维持生活和工作平衡,保持健康和安全,祝大家工作顺利!
# Tips or Features
- 支持DDL SQL/INSERT SQL/SIMPLE JSON生成模式
- 自动记忆最近生成的内容最多保留9个
- 支持DDL SQL/INSERT SQL/SIMPLE JSON三种生成模式
- `自动记忆`最近生成的内容最多保留9个
- 提供众多`通用模板`易于使用复制粘贴加简单修改即可完成CRUD操作
- 支持`特殊字符`模板(`#`请用`井`代替;`$`请用`¥`代替)
- `Util集合`提供一些基本对象的使用方法供方便COPY如对应的CRUD SQL语句、setMap、getMap、get属性等等
- 关于`类名注释`,根据`comment=(mysql)`或者`comment on table(pgsql/oracle)`生成
- 关于`类名注释`根据`comment=(mysql)`或者`comment on table(pgsql/oracle)`生成
- 可设置是否`自动引包`(java中的import)及`引入包路径`(java类中的package)建议取消并配合IDEA的自动引包更智能(Settings→Editor→General→Auto Import,勾选Add unambiguous imports on the fly以及Optimize imports on the fly)。
- 可设置`表名前缀`例如sys_user前缀为sys_之后可以正确生成user类
- 可切换`header.html`中的include文件为`header-local.html`(本地模式)/`header-CDN.html`(云CDN模式)
# Url
@ -58,10 +59,10 @@ Thanks for `JetBrains` providing us the `Licenses for Open Source Development`
# Update Logs
|更新日期|更新内容|
|:----|:----|
|2021.01.17|生成后自动trim掉前后空格输出。完善ReadMe文档。|
|2021.01.17|生成后自动trim掉前后空格输出。<br>完善ReadMe文档。<br>优化云CDN引入部分。<br>优化returnUtil部分。<br>表明前缀选项(感谢@wwlg的建议)。 <br>是否带字段注释设置(感谢@fengpojian的建议)。<br>优化Mybatis的''!=判断(感谢@zhongsb的建议)。<br>Mybatis-Plus增加Service层(感谢@yf466532479的建议)。 |
|2021.01.16|全新3.0版本:<br>一、前端半vue半js化更多动态加载项。<br>二、支持更多生成设置,优化生成场景。<br>三、js导入支持本地/CDN模式支持断网环境轻松使用。|
|2020.10.22|1.tinyint多加一个Short类型转换感谢@wttHero的建议|
|2020.10.20|1.修复mapper2 insert代码问题感谢@mXiaoWan的PR<br>2.优化对fulltext/index关键字的处理感谢@WEGFan的反馈)。<br>3.新增日期类型的转换选择(感谢@qingkediguo的建议)。<br>4.新增是否包装类型的转换选择。|
|2020.10.20|1.修复mapper2 insert代码问题感谢@mXiaoWan的PR<br>2.优化对fulltext/index关键字的处理感谢@WEGFan的反馈)。<br>3.新增日期类型的转换选择(感谢@qingkediguo的建议)。<br>4.新增是否包装类型的转换选择(感谢@gzlicanyi的建议)。|
|2020.06.28|优化Util下的BeanUtil支持更多map.put的操作。整合CRUD模板到SQL(CRUD)模板。|
|2020.06.21|修复FreemarkerUtil的Path问题导致JAR包运行时无法获取template的问题。|
|2020.05.25|1.一些fix,关于封装工具类以及layui模板优化等.<br> 2.优化表备注的获取逻辑.<br> 3.生成时间格式改为yyyy-MM-dd,移除具体的时间,只保留日期|

View File

@ -130,11 +130,16 @@
},
{
"id": "61",
"name": "plusservice",
"description": "plusservice"
},
{
"id": "62",
"name": "plusmapper",
"description": "plusmapper"
},
{
"id": "62",
"id": "63",
"name": "plusentity",
"description": "plusentity"
}

View File

@ -27,10 +27,10 @@ public class ${classInfo.className}Controller {
${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,${classInfo.className?uncap_first}.getId());
if(${classInfo.className?uncap_first}!=null){
sqlManager.updateById(${classInfo.className?uncap_first});
return ${returnUtil}.success("编辑成功");
return ${returnUtilSuccess}("编辑成功");
}else{
sqlManager.insert(${classInfo.className?uncap_first});
return ${returnUtil}.error("保存成功");
return ${returnUtilFailure}("保存成功");
}
}
@ -42,9 +42,9 @@ public class ${classInfo.className}Controller {
${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,id);
if(${classInfo.className?uncap_first}!=null){
sqlManager.deleteById(id);
return ${returnUtil}.success("删除成功");
return ${returnUtilSuccess}("删除成功");
}else{
return ${returnUtil}.error("没有找到该对象");
return ${returnUtilFailure}("没有找到该对象");
}
}
@ -55,9 +55,9 @@ public class ${classInfo.className}Controller {
public Object find(int id){
${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,id);
if(${classInfo.className?uncap_first}!=null){
return ${returnUtil}.success(${classInfo.className?uncap_first});
return ${returnUtilSuccess}(${classInfo.className?uncap_first});
}else{
return ${returnUtil}.error("没有找到该对象");
return ${returnUtilFailure}("没有找到该对象");
}
}
@ -69,7 +69,7 @@ public class ${classInfo.className}Controller {
@RequestParam(required = false, defaultValue = "0") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize) {
List<${classInfo.className}> list = sqlManager.query(${classInfo.className}.class).select();
return ${returnUtil}.success(list);
return ${returnUtilSuccess}(list);
}
}

View File

@ -42,9 +42,9 @@ public class ${classInfo.className}Controller {
Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Repository.findById(id);
if(${classInfo.className?uncap_first}.isPresent()){
${classInfo.className?uncap_first}Repository.deleteById(id);
return ${returnUtil}.success("删除成功");
return ${returnUtilSuccess}("删除成功");
}else{
return ${returnUtil}.error("没有找到该对象");
return ${returnUtilFailure}("没有找到该对象");
}
}
@ -55,9 +55,9 @@ public class ${classInfo.className}Controller {
public Object find(int id){
Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Repository.findById(id);
if(${classInfo.className?uncap_first}.isPresent()){
return ${returnUtil}.success(${classInfo.className?uncap_first}.get());
return ${returnUtilSuccess}(${classInfo.className?uncap_first}.get());
}else{
return ${returnUtil}.error("没有找到该对象");
return ${returnUtilFailure}("没有找到该对象");
}
}

View File

@ -18,7 +18,7 @@ import java.util.List;
import java.util.Map;
</#if>
/**
* @description ${classInfo.classComment}
* @description ${classInfo.classComment}控制器
* @author ${authorName}
* @date ${.now?string('yyyy-MM-dd')}
*/
@ -42,12 +42,12 @@ public class ${classInfo.className}Controller {
${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first});
}else{
if(${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("${classInfo.className?uncap_first}_name",${classInfo.className?uncap_first}.get${classInfo.className}Name()))!=null){
return ${returnUtil}.ERROR("保存失败,名字重复");
return ${returnUtilFailure}("保存失败,名字重复");
}
${classInfo.className?uncap_first}.setCreateTime(new Date());
${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first});
}
return ${returnUtil}.SUCCESS("保存成功");
return ${returnUtilSuccess}("保存成功");
}
/**
@ -58,9 +58,9 @@ public class ${classInfo.className}Controller {
${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("${classInfo.className?uncap_first}_id",id));
if(${classInfo.className?uncap_first}!=null){
${classInfo.className?uncap_first}Mapper.deleteById(id);
return ${returnUtil}.SUCCESS("删除成功");
return ${returnUtilSuccess}("删除成功");
}else{
return ${returnUtil}.ERROR("没有找到该对象");
return ${returnUtilFailure}("没有找到该对象");
}
}
@ -71,9 +71,9 @@ public class ${classInfo.className}Controller {
public Object find(int id){
${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("${classInfo.className?uncap_first}_id",id));
if(${classInfo.className?uncap_first}!=null){
return ${returnUtil}.SUCCESS(${classInfo.className?uncap_first});
return ${returnUtilSuccess}(${classInfo.className?uncap_first});
}else{
return ${returnUtil}.ERROR("没有找到该对象");
return ${returnUtilFailure}("没有找到该对象");
}
}
@ -101,8 +101,8 @@ public class ${classInfo.className}Controller {
/**
* 手工分页查询(按需使用)
*/
@PostMapping("/list2")
public ReturnT list2(String searchParams,
/*@PostMapping("/list2")
public Object list2(String searchParams,
@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int limit) {
log.info("searchParams:"+ JSON.toJSONString(searchParams));
@ -116,8 +116,8 @@ public class ${classInfo.className}Controller {
List<${classInfo.className}> itemList = ${classInfo.className?uncap_first}Mapper.pageAll(queryParamDTO,(page - 1)* limit,limit);
Integer itemCount = ${classInfo.className?uncap_first}Mapper.countAll(queryParamDTO);
//返回结果
return ReturnT.PAGE(itemList,itemCount);
}
return ${returnUtilSuccess}.PAGE(itemList,itemCount);
}*/
@GetMapping("/list")
public ModelAndView listPage(){
return new ModelAndView("${classInfo.className?uncap_first}-list");
@ -139,11 +139,11 @@ public class ${classInfo.className}Controller {
${classInfo.className?uncap_first}.setUpdateTime(new Date());
${classInfo.className?uncap_first}.setStatus(status);
${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first});
return ReturnT.SUCCESS((status==1)?"已发布":"已暂停");
return ${returnUtilSuccess}((status==1)?"已发布":"已暂停");
}else if(status.equals(${classInfo.className?uncap_first}.getStatus())){
return ReturnT.SUCCESS("状态不正确");
return ${returnUtilFailure}("状态不正确");
}else{
return ReturnT.ERROR();
return ${returnUtilFailure}();
}
}
@ -152,7 +152,7 @@ public class ${classInfo.className}Controller {
*/
@PostMapping("/execute")
public Object execute(){
return ReturnT.SUCCESS();
return ${returnUtilSuccess};
}
}
}

View File

@ -7,7 +7,7 @@ import ${packageName}.entity.${classInfo.className};
import java.util.List;
</#if>
/**
* @description ${classInfo.classComment}
* @description ${classInfo.classComment}Mapper
* @author ${authorName}
* @date ${.now?string('yyyy-MM-dd')}
*/

View File

@ -0,0 +1,16 @@
<#if isWithPackage?exists && isWithPackage==true>package ${packageName}.service;</#if>
<#if isAutoImport?exists && isAutoImport==true>
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.IService;
</#if>
/**
* @description ${classInfo.classComment}服务层
* @author ${authorName}
* @date ${.now?string('yyyy-MM-dd')}
*/
@Service
public interface ${classInfo.className}Service extends IService<${classInfo.className}> {
}

View File

@ -28,7 +28,7 @@ public class ${classInfo.className}Controller {
* @date ${.now?string('yyyy/MM/dd')}
**/
@RequestMapping("/insert")
public ReturnT<String> insert(${classInfo.className} ${classInfo.className?uncap_first}){
public Object insert(${classInfo.className} ${classInfo.className?uncap_first}){
return ${classInfo.className?uncap_first}Service.insert(${classInfo.className?uncap_first});
}
@ -58,7 +58,7 @@ public class ${classInfo.className}Controller {
* @date ${.now?string('yyyy/MM/dd')}
**/
@RequestMapping("/load")
public ReturnT<String> load(int id){
public Object load(int id){
return ${classInfo.className?uncap_first}Service.load(id);
}

View File

@ -25,7 +25,7 @@
<#if classInfo.fieldList?exists && classInfo.fieldList?size gt 0>
<#list classInfo.fieldList as fieldItem >
<#if fieldItem.columnName != "id" >
${r"<if test ='null != "}${fieldItem.fieldName}${r"'>"}
<if "null != ${fieldItem.fieldName} and '' != ${fieldItem.fieldName}">
${fieldItem.columnName}<#if fieldItem_has_next>,</#if>
${r"</if>"}
</#if>
@ -41,7 +41,7 @@
NOW()<#if fieldItem_has_next>,</#if>
${r"</if>"}
<#else>-->
${r"<if test ='null != "}${fieldItem.fieldName}${r"'>"}
<if "null != ${fieldItem.fieldName} and '' != ${fieldItem.fieldName}">
${r"#{"}${fieldItem.fieldName}${r"}"}<#if fieldItem_has_next>,</#if>
${r"</if>"}
<#--</#if>-->
@ -61,7 +61,7 @@
<set>
<#list classInfo.fieldList as fieldItem >
<#if fieldItem.columnName != "id" && fieldItem.columnName != "AddTime" && fieldItem.columnName != "UpdateTime" >
${r"<if test ='null != "}${fieldItem.fieldName}${r"'>"}${fieldItem.columnName} = ${r"#{"}${fieldItem.fieldName}${r"}"}<#if fieldItem_has_next>,</#if>${r"</if>"}
<if "null != ${fieldItem.fieldName} and '' != ${fieldItem.fieldName}">${fieldItem.columnName} = ${r"#{"}${fieldItem.fieldName}${r"}"}<#if fieldItem_has_next>,</#if>${r"</if>"}
</#if>
</#list>
</set>

View File

@ -11,17 +11,17 @@ public interface ${classInfo.className}Service {
/**
* 新增
*/
public ReturnT<String> insert(${classInfo.className} ${classInfo.className?uncap_first});
public Object insert(${classInfo.className} ${classInfo.className?uncap_first});
/**
* 删除
*/
public ReturnT<String> delete(int id);
public Object delete(int id);
/**
* 更新
*/
public ReturnT<String> update(${classInfo.className} ${classInfo.className?uncap_first});
public Object update(${classInfo.className} ${classInfo.className?uncap_first});
/**
* 根据主键 id 查询

View File

@ -19,29 +19,29 @@ public class ${classInfo.className}ServiceImpl implements ${classInfo.className}
@Override
public ReturnT<String> insert(${classInfo.className} ${classInfo.className?uncap_first}) {
public Object insert(${classInfo.className} ${classInfo.className?uncap_first}) {
// valid
if (${classInfo.className?uncap_first} == null) {
return ${returnUtil}.ERROR("必要参数缺失");
return ${returnUtilFailure}("必要参数缺失");
}
${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first});
return ${returnUtil}.SUCCESS;
return ${returnUtilSuccess}();
}
@Override
public ReturnT<String> delete(int id) {
public Object delete(int id) {
int ret = ${classInfo.className?uncap_first}Mapper.delete(id);
return ret>0?${returnUtil}.SUCCESS():${returnUtil}.ERROR();
return ret>0?${returnUtilSuccess}():${returnUtilFailure}();
}
@Override
public ReturnT<String> update(${classInfo.className} ${classInfo.className?uncap_first}) {
public Object update(${classInfo.className} ${classInfo.className?uncap_first}) {
int ret = ${classInfo.className?uncap_first}Mapper.update(${classInfo.className?uncap_first});
return ret>0?${returnUtil}.SUCCESS():${returnUtil}.ERROR();
return ret>0?${returnUtilSuccess}():${returnUtilFailure}();
}

View File

@ -8,12 +8,19 @@
<!--### CDN version-->
<!--#################-->
<!--jquery | vue | element-ui | axios-->
<script src="//cdn.staticfile.org/jquery/3.5.1/jquery.min.js"></script>
<script src="//cdn.staticfile.org/vue/2.6.12/vue.min.js"></script>
<script src="//cdn.staticfile.org/element-ui/2.15.0/index.min.js"></script>
<link rel="stylesheet" href="//cdn.staticfile.org/element-ui/2.15.0/theme-chalk/index.min.css">
<script src="//cdn.staticfile.org/axios/0.1.0/axios.min.js"></script>
<script src="${request.contextPath}/statics/js/common.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/css/main.css">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<script src="//cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
@ -23,7 +30,10 @@
<script src="//cdn.staticfile.org/codemirror/5.59.1/mode/xml/xml.min.js"></script>
<script src="//cdn.staticfile.org/codemirror/5.59.1/mode/clike/clike.min.js"></script>
<script src="//cdn.staticfile.org/codemirror/5.59.1/mode/javascript/javascript.min.js"></script>
<link rel="stylesheet" href="//cdn.staticfile.org/codemirror/5.59.1/codemirror.css">
<link rel="stylesheet" href="//cdn.staticfile.org/codemirror/5.59.1/codemirror.min.css">
<link rel="stylesheet" href="//cdn.staticfile.org/codemirror/5.59.1/theme/idea.min.css">
<!-- import axios -->
<script src="//cdn.staticfile.org/axios/0.1.0/axios.min.js"></script>
<!--bootsrap -->
<link rel="stylesheet" href="${request.contextPath}/statics/css/all-skins.min.css">
<link rel="stylesheet" href="//cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="//cdn.staticfile.org/admin-lte/2.3.7/css/AdminLTE.min.css">

View File

@ -0,0 +1,50 @@
<meta charset="UTF-8">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>SQL转Java JPA、MYBATIS实现类代码生成平台</title>
<meta name="keywords" content="sql转实体类,sql转DAO,SQL转service,SQL转JPA实现,SQL转MYBATIS实现">
<!--#################-->
<!--### local version-->
<!--#################-->
<!--jquery | vue | element-ui | axios-->
<script src="${request.contextPath}/statics/libs/jquery.min.js"></script>
<script src="${request.contextPath}/statics/libs/vue.min.js"></script>
<script src="${request.contextPath}/statics/plugins/element-ui/index.min.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/element-ui/theme-chalk/index.min.css">
<script src="${request.contextPath}/statics/plugins/axios/axios.min.js"></script>
<script src="${request.contextPath}/statics/js/common.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/css/main.css">
<!--[if lt IE 9]>
<script src="${request.contextPath}/statics/plugins/IE/html5shiv.min.js"></script>
<script src="${request.contextPath}/statics/plugins/IE/respond.min.js"></script>
<![endif]-->
<!-- codemirror -->
<script src="${request.contextPath}/statics/plugins/codemirror/codemirror.min.js"></script>
<script src="${request.contextPath}/statics/plugins/codemirror/javascript.min.js"></script>
<script src="${request.contextPath}/statics/plugins/codemirror/clike.min.js"></script>
<script src="${request.contextPath}/statics/plugins/codemirror/sql.min.js"></script>
<script src="${request.contextPath}/statics/plugins/codemirror/xml.min.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/codemirror/codemirror.min.css">
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/codemirror/idea.min.css">
<!-- bootstrap -->
<link rel="stylesheet" href="${request.contextPath}/statics/css/AdminLTE.min.css">
<link rel="stylesheet" href="${request.contextPath}/statics/css/all-skins.min.css">
<link rel="stylesheet" href="${request.contextPath}/statics/css/bootstrap.min.css">
<!--<link rel="stylesheet" href="${request.contextPath}/statics/css/font-awesome.min.css">-->
<!--<script src="${request.contextPath}/statics/libs/bootstrap.min.js"></script>-->
<!-- layer -->
<script src="${request.contextPath}/statics/plugins/layer/layer.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/layer/theme/default/layer.css">
<!--<script src="${request.contextPath}/statics/plugins/layer/mobile/layer.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/layer/mobile/layer.css">-->

View File

@ -1,50 +1 @@
<meta charset="UTF-8">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>SQL转Java JPA、MYBATIS实现类代码生成平台</title>
<meta name="keywords" content="sql转实体类,sql转DAO,SQL转service,SQL转JPA实现,SQL转MYBATIS实现">
<!--#################-->
<!--### local version-->
<!--#################-->
<!--jquery | vue | element-ui | axios-->
<script src="${request.contextPath}/statics/libs/jquery.min.js"></script>
<script src="${request.contextPath}/statics/libs/vue.min.js"></script>
<script src="${request.contextPath}/statics/plugins/element-ui/index.min.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/element-ui/theme-chalk/index.min.css">
<script src="${request.contextPath}/statics/plugins/axios/axios.min.js"></script>
<script src="${request.contextPath}/statics/js/common.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/css/main.css">
<!--[if lt IE 9]>
<script src="${request.contextPath}/statics/plugins/IE/html5shiv.min.js"></script>
<script src="${request.contextPath}/statics/plugins/IE/respond.min.js"></script>
<![endif]-->
<!-- codemirror -->
<script src="${request.contextPath}/statics/plugins/codemirror/codemirror.min.js"></script>
<script src="${request.contextPath}/statics/plugins/codemirror/javascript.min.js"></script>
<script src="${request.contextPath}/statics/plugins/codemirror/clike.min.js"></script>
<script src="${request.contextPath}/statics/plugins/codemirror/sql.min.js"></script>
<script src="${request.contextPath}/statics/plugins/codemirror/xml.min.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/codemirror/codemirror.min.css">
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/codemirror/idea.min.css">
<!-- bootstrap -->
<link rel="stylesheet" href="${request.contextPath}/statics/css/AdminLTE.min.css">
<link rel="stylesheet" href="${request.contextPath}/statics/css/all-skins.min.css">
<link rel="stylesheet" href="${request.contextPath}/statics/css/bootstrap.min.css">
<!--<link rel="stylesheet" href="${request.contextPath}/statics/css/font-awesome.min.css">-->
<!--<script src="${request.contextPath}/statics/libs/bootstrap.min.js"></script>-->
<!-- layer -->
<script src="${request.contextPath}/statics/plugins/layer/layer.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/layer/theme/default/layer.css">
<!--<script src="${request.contextPath}/statics/plugins/layer/mobile/layer.js"></script>
<link rel="stylesheet" href="${request.contextPath}/statics/plugins/layer/mobile/layer.css">-->
<#include "/header-local.html">