Commit 66de6d3d authored by matianhao's avatar matianhao

整合mp

依赖调整

mybatis plus通用字段自动填充
parent a3cd3433
{
"author": "MaTianHao",
"version": "1.2.4",
"userSecure": "",
"currTypeMapperGroupName": "My Type Mapper",
"currTemplateGroupName": "My MybatisPlus with Swagger Annonation",
"currColumnConfigGroupName": "Default",
"currGlobalConfigGroupName": "My Global Config",
"typeMapper": {
"My Type Mapper": {
"name": "My Type Mapper",
"elementList": [
{
"columnType": "varchar(\\(\\d+\\))?",
"javaType": "java.lang.String"
},
{
"columnType": "char(\\(\\d+\\))?",
"javaType": "java.lang.String"
},
{
"columnType": "text",
"javaType": "java.lang.String"
},
{
"columnType": "decimal(\\(\\d+\\))?",
"javaType": "java.lang.Double"
},
{
"columnType": "decimal(\\(\\d+,\\d+\\))?",
"javaType": "java.lang.Double"
},
{
"columnType": "integer",
"javaType": "java.lang.Integer"
},
{
"columnType": "int(\\(\\d+\\))?",
"javaType": "java.lang.Integer"
},
{
"columnType": "int4",
"javaType": "java.lang.Integer"
},
{
"columnType": "int8",
"javaType": "java.lang.Long"
},
{
"columnType": "bigint(\\(\\d+\\))?",
"javaType": "java.lang.Long"
},
{
"columnType": "datetime",
"javaType": "java.time.LocalDateTime"
},
{
"columnType": "timestamp",
"javaType": "java.util.Date"
},
{
"columnType": "boolean",
"javaType": "java.lang.Boolean"
},
{
"columnType": "tinyint(\\(\\d+\\))?",
"javaType": "java.lang.Integer"
}
]
},
"Default": {
"name": "Default",
"elementList": [
{
"columnType": "varchar(\\(\\d+\\))?",
"javaType": "java.lang.String"
},
{
"columnType": "char(\\(\\d+\\))?",
"javaType": "java.lang.String"
},
{
"columnType": "text",
"javaType": "java.lang.String"
},
{
"columnType": "decimal(\\(\\d+\\))?",
"javaType": "java.lang.Double"
},
{
"columnType": "decimal(\\(\\d+,\\d+\\))?",
"javaType": "java.lang.Double"
},
{
"columnType": "integer",
"javaType": "java.lang.Integer"
},
{
"columnType": "int(\\(\\d+\\))?",
"javaType": "java.lang.Integer"
},
{
"columnType": "int4",
"javaType": "java.lang.Integer"
},
{
"columnType": "int8",
"javaType": "java.lang.Long"
},
{
"columnType": "bigint(\\(\\d+\\))?",
"javaType": "java.lang.Long"
},
{
"columnType": "datetime",
"javaType": "java.util.Date"
},
{
"columnType": "timestamp",
"javaType": "java.util.Date"
},
{
"columnType": "boolean",
"javaType": "java.lang.Boolean"
},
{
"columnType": "tinyint(\\(\\d+\\))?",
"javaType": "java.lang.Integer"
}
]
}
},
"template": {
"My MybatisPlus with Swagger Annonation": {
"name": "My MybatisPlus with Swagger Annonation",
"elementList": [
{
"name": "controller.java",
"code": "##导入宏定义\n$!define\n\n##设置表后缀(宏定义)\n#setTableSuffix(\"Controller\")\n\n##保存文件(宏定义)\n#save(\"/controller\", \"Controller.java\")\n\n##包路径(宏定义)\n#setPackageSuffix(\"controller\")\n\n##定义服务名\n#set($serviceName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), \"Service\"))\n\n##定义实体对象名\n#set($entityName = $!tool.firstLowerCase($!tableInfo.name))\n\nimport com.watone.common.core.controller.BaseController;\nimport com.watone.common.core.domain.AjaxResult;\nimport com.watone.common.core.page.TableDataInfo;\nimport $!{tableInfo.savePackageName}.domain.entity.$!tableInfo.name;\nimport $!{tableInfo.savePackageName}.domain.dto.$!{tableInfo.name}DTO;\nimport $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;\nimport org.springframework.web.bind.annotation.*;\nimport io.swagger.annotations.*;\n\nimport javax.annotation.Resource;\nimport java.io.Serializable;\nimport java.util.List;\n\n##表注释(宏定义)\n#tableComment(\"表控制层\")\n@Api(tags = \"$!{tableInfo.comment}\")\n@RestController\npublic class $!{tableName} extends BaseController {\n\n @Resource\n private $!{tableInfo.name}Service $!{serviceName};\n \n /**\n * 新增数据\n */\n @ApiOperation(\"新增数据\")\n @PostMapping(\"/$!entityName\")\n public AjaxResult insert(@RequestBody $!{tableInfo.name}DTO param) {\n return toAjax($!{serviceName}.insert(param));\n }\n\n /**\n * 修改数据\n */\n @ApiOperation(\"修改数据\")\n @PutMapping(\"/$!entityName\")\n public AjaxResult update(@RequestBody $!{tableInfo.name}DTO param) {\n return toAjax($!{serviceName}.update(param));\n }\n\n /**\n * 删除数据\n */\n @ApiOperation(\"删除数据\")\n @DeleteMapping(\"/$!entityName/{id}\")\n public AjaxResult delete(@PathVariable Long id) {\n return toAjax($!{serviceName}.delete(id));\n }\n\n /**\n * 通过主键查询单条数据\n */\n @ApiOperation(\"通过主键查询单条数据\")\n @GetMapping(\"/$!entityName/{id}\")\n public AjaxResult detail(@PathVariable Long id) {\n return AjaxResult.success($!{serviceName}.detail(id));\n }\n \n /**\n * 分页查询列表\n */\n @ApiOperation(\"分页查询列表\")\n @GetMapping(\"/$!entityName\")\n public TableDataInfo findPage($!{tableInfo.name}DTO param) {\n startPage();\n return getDataTable($!{serviceName}.findPage(param));\n }\n\n}"
},
{
"name": "domain.java",
"code": "##导入宏定义\n$!define\n\n##保存文件(宏定义)\n#save(\"/domain/entity\", \".java\")\n\n##包路径(宏定义)\n#setPackageSuffix(\"domain.entity\")\n\n## 根据表中字段决定继承哪一个基类\n#set($fieldList = $tool.newArrayList())\n#foreach($column in $tableInfo.fullColumn)\n $tool.call($fieldList.add($column.name))\n#end\n\n## 包含time通用字段,继承BaseTimeColumn\n#if($fieldList.contains(\"createTime\") \n && $fieldList.contains(\"updateTime\"))\n #set($baseClass = \"extends BaseTimeColumn\")\n #set($excludeField = $tool.newArrayList(\"createTime\",\"updateTime\"))\n#end\n\n## 包含所有通用字段,继承BaseColumn\n#if($fieldList.contains(\"createTime\") \n && $fieldList.contains(\"updateTime\")\n && $fieldList.contains(\"createBy\")\n && $fieldList.contains(\"updateBy\"))\n #set($baseClass = \"extends BaseColumn\")\n #set($excludeField = $tool.newArrayList(\"createTime\",\"updateTime\",\"createBy\",\"updateBy\"))\n#end\n\n##自动导入包(全局变量)\n$!autoImport\nimport com.baomidou.mybatisplus.annotation.TableName;\n#if(${baseClass})import com.watone.common.core.mybatisplus.domain.$!{baseClass};#end \nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty; \nimport lombok.*;\n\n##表注释(宏定义)\n#tableComment(\"表实体类\")\n#if(${baseClass})@EqualsAndHashCode(callSuper = true)#end\n@Data\n@Builder\n@NoArgsConstructor\n@AllArgsConstructor\n@TableName(\"$!{tableInfo.obj.name}\")\n@ApiModel(\"$!{tableInfo.comment}\")\npublic class $!{tableInfo.name} $!{baseClass} {\n\n ##private static final long serialVersionUID = $!tool.serial();\n#foreach($column in $tableInfo.fullColumn)\n#if(!$excludeField.contains($!{column.name}))\n\n #if(${column.comment})@ApiModelProperty(\"${column.comment}\")#end\n \n private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n \n#end \n#end\n}"
},
{
"name": "dto.java",
"code": "##导入宏定义\n$!define\n\n##设置表后缀(宏定义)\n#setTableSuffix(\"DTO\")\n\n##保存文件(宏定义)\n#save(\"/domain/dto\", \"DTO.java\")\n\n##包路径(宏定义)\n#setPackageSuffix(\"domain.dto\")\n\n##自动导入包(全局变量)\n$!autoImport\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty; \nimport lombok.*;\n\n##表注释(宏定义)\n#tableComment(\"表入参类\")\n@Data\n@ApiModel(\"$!{tableInfo.comment}入参\")\npublic class $!{tableName} {\n\n#foreach($column in $tableInfo.fullColumn)\n#if($!{column.name} != \"createBy\"\n && $!{column.name} != \"createTime\"\n && $!{column.name} != \"updateBy\"\n && $!{column.name} != \"updateTime\"\n && $!{column.name} != \"delFlag\")\n #if(${column.comment})@ApiModelProperty(\"${column.comment}\")#end\n \n private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n \n#end\n#end\n}"
},
{
"name": "service.java",
"code": "##导入宏定义\n$!define\n\n##设置表后缀(宏定义)\n#setTableSuffix(\"Service\")\n\n##保存文件(宏定义)\n#save(\"/service\", \"Service.java\")\n\n##包路径(宏定义)\n#setPackageSuffix(\"service\")\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport $!{tableInfo.savePackageName}.domain.entity.$!tableInfo.name;\nimport $!{tableInfo.savePackageName}.domain.dto.$!{tableInfo.name}DTO;\nimport java.util.List;\n\n##表注释(宏定义)\n#tableComment(\"表服务接口\")\npublic interface $!{tableName} extends IService<$!tableInfo.name> {\n\n /**\n * 新增数据\n *\n * @param param 入参对象\n * @return 是否成功\n */\n boolean insert($!{tableInfo.name}DTO param);\n\n /**\n * 修改数据\n *\n * @param param 入参对象\n * @return 是否成功\n */\n boolean update($!{tableInfo.name}DTO param);\n \n /**\n * 删除数据\n *\n * @param id 主键\n * @return 是否成功\n */\n boolean delete(Long id);\n\n /**\n * 通过主键查询单条数据\n *\n * @param id 主键\n * @return 实例对象\n */\n $!{tableInfo.name} detail(Long id);\n\n /**\n * 分页查询列表\n *\n * @param param 入参对象\n * @return 对象集合\n */\n List<$!{tableInfo.name}> findPage($!{tableInfo.name}DTO param);\n\n}"
},
{
"name": "serviceImpl.java",
"code": "##导入宏定义\n$!define\n\n##设置表后缀(宏定义)\n#setTableSuffix(\"ServiceImpl\")\n\n##保存文件(宏定义)\n#save(\"/service/impl\", \"ServiceImpl.java\")\n\n##包路径(宏定义)\n#setPackageSuffix(\"service.impl\")\n\n##定义服务名\n#set($mapperName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), \"Mapper\"))\n\nimport cn.hutool.core.bean.BeanUtil;\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.core.toolkit.Wrappers;\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\nimport $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;\nimport $!{tableInfo.savePackageName}.domain.entity.$!{tableInfo.name};\nimport $!{tableInfo.savePackageName}.domain.dto.$!{tableInfo.name}DTO;\nimport $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;\nimport com.watone.common.constant.Constants;\nimport com.watone.common.exception.ServiceException;\nimport com.watone.common.core.mybatisplus.domain.BaseTimeColumn;\nimport org.springframework.stereotype.Service;\nimport javax.annotation.Resource;\nimport java.util.List;\nimport java.util.Objects;\n\n##表注释(宏定义)\n#tableComment(\"表服务实现类\")\n##@Service(\"$!tool.firstLowerCase($tableInfo.name)Service\")\n@Service\npublic class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}> implements $!{tableInfo.name}Service {\n\n @Resource\n private $!{tableInfo.name}Mapper $!{mapperName};\n \n @Override\n public boolean insert($!{tableInfo.name}DTO param) {\n $!{tableInfo.name} entity = new $!{tableInfo.name}();\n BeanUtil.copyProperties(param, entity);\n return this.save(entity);\n }\n \n @Override\n public boolean update($!{tableInfo.name}DTO param) {\n $!{tableInfo.name} entity = new $!{tableInfo.name}();\n BeanUtil.copyProperties(param, entity);\n return this.updateById(entity);\n }\n\n @Override\n public boolean delete(Long id) {\n // 存在delFlag字段则为逻辑删除,否则为物理删除\n return this.removeById(id);\n }\n\n @Override\n public $!{tableInfo.name} detail(Long id) {\n $!{tableInfo.name} entity = this.getById(id);\n if (Objects.isNull(entity)) {\n throw new ServiceException(\"详情未找到\");\n }\n return entity;\n }\n \n @Override\n public List<$!{tableInfo.name}> findPage($!{tableInfo.name}DTO param) {\n LambdaQueryWrapper<$!{tableInfo.name}> wrapper = createWrapper(param);\n return this.list(wrapper);\n }\n\n /**\n * 构建Wrapper\n *\n * @param param 入参对象\n * @return Lambda 语法使用 Wrapper\n */\n private LambdaQueryWrapper<$!{tableInfo.name}> createWrapper($!{tableInfo.name}DTO param) {\n LambdaQueryWrapper<$!{tableInfo.name}> queryWrapper = Wrappers.lambdaQuery();\n\n // 排序\n queryWrapper.orderByDesc(BaseTimeColumn::getCreateTime);\n\n if (Objects.isNull(param)) {\n return queryWrapper;\n }\n\n // 拼接条件\n // queryWrapper.eq(boolean, R, Object)\n\n return queryWrapper;\n }\n\n}"
},
{
"name": "mapper.java",
"code": "##导入宏定义\n$!define\n\n##设置表后缀(宏定义)\n#setTableSuffix(\"Mapper\")\n\n##保存文件(宏定义)\n#save(\"/mapper\", \"Mapper.java\")\n\n##包路径(宏定义)\n#setPackageSuffix(\"mapper\")\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport $!{tableInfo.savePackageName}.domain.entity.$!tableInfo.name;\n\n##表注释(宏定义)\n#tableComment(\"表数据库访问层\")\npublic interface $!{tableName} extends BaseMapper<$!tableInfo.name> {\n\n}"
},
{
"name": "mapper.xml",
"code": "##引入mybatis支持\n$!mybatisSupport\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.entity.$!{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</mapper>\n"
}
]
},
"Default": {
"name": "Default",
"elementList": [
{
"name": "entity.java",
"code": "##引入宏定义\n$!define\n\n##使用宏定义设置回调(保存位置与文件后缀)\n#save(\"/entity\", \".java\")\n\n##使用宏定义设置包后缀\n#setPackageSuffix(\"entity\")\n\n##使用全局变量实现默认包导入\n$!autoImport\nimport java.io.Serializable;\n\n##使用宏定义实现类注释信息\n#tableComment(\"实体类\")\npublic class $!{tableInfo.name} implements Serializable {\n private static final long serialVersionUID = $!tool.serial();\n#foreach($column in $tableInfo.fullColumn)\n #if(${column.comment})/**\n * ${column.comment}\n */#end\n\n private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n#end\n\n#foreach($column in $tableInfo.fullColumn)\n##使用宏定义实现get,set方法\n#getSetMethod($column)\n#end\n\n}"
},
{
"name": "dao.java",
"code": "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Dao\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/dao\"))\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}dao;\n\nimport $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};\nimport org.apache.ibatis.annotations.Param;\nimport java.util.List;\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 $!{tableInfo.name} queryById($!pk.shortType $!pk.name);\n\n /**\n * 查询指定行数据\n *\n * @param offset 查询起始位置\n * @param limit 查询条数\n * @return 对象列表\n */\n List<$!{tableInfo.name}> queryAllByLimit(@Param(\"offset\") int offset, @Param(\"limit\") int limit);\n\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 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 */\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 * 通过主键删除数据\n *\n * @param $!pk.name 主键\n * @return 影响行数\n */\n int deleteById($!pk.shortType $!pk.name);\n\n}\n"
},
{
"name": "service.java",
"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}.entity.$!{tableInfo.name};\nimport java.util.List;\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 $!{tableInfo.name} queryById($!pk.shortType $!pk.name);\n\n /**\n * 查询多条数据\n *\n * @param offset 查询起始位置\n * @param limit 查询条数\n * @return 对象列表\n */\n List<$!{tableInfo.name}> queryAllByLimit(int offset, int limit);\n\n /**\n * 新增数据\n *\n * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n * @return 实例对象\n */\n $!{tableInfo.name} insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n /**\n * 修改数据\n *\n * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n * @return 实例对象\n */\n $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n /**\n * 通过主键删除数据\n *\n * @param $!pk.name 主键\n * @return 是否成功\n */\n boolean deleteById($!pk.shortType $!pk.name);\n\n}"
},
{
"name": "serviceImpl.java",
"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 $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};\nimport $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao;\nimport $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;\nimport org.springframework.stereotype.Service;\n\nimport javax.annotation.Resource;\nimport java.util.List;\n\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表服务实现类\n *\n * @author $!author\n * @since $!time.currTime()\n */\n@Service(\"$!tool.firstLowerCase($!{tableInfo.name})Service\")\npublic class $!{tableName} implements $!{tableInfo.name}Service {\n @Resource\n private $!{tableInfo.name}Dao $!tool.firstLowerCase($!{tableInfo.name})Dao;\n\n /**\n * 通过ID查询单条数据\n *\n * @param $!pk.name 主键\n * @return 实例对象\n */\n @Override\n public $!{tableInfo.name} queryById($!pk.shortType $!pk.name) {\n return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryById($!pk.name);\n }\n\n /**\n * 查询多条数据\n *\n * @param offset 查询起始位置\n * @param limit 查询条数\n * @return 对象列表\n */\n @Override\n public List<$!{tableInfo.name}> queryAllByLimit(int offset, int limit) {\n return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryAllByLimit(offset, limit);\n }\n\n /**\n * 新增数据\n *\n * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n * @return 实例对象\n */\n @Override\n public $!{tableInfo.name} insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {\n this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.insert($!tool.firstLowerCase($!{tableInfo.name}));\n return $!tool.firstLowerCase($!{tableInfo.name});\n }\n\n /**\n * 修改数据\n *\n * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n * @return 实例对象\n */\n @Override\n public $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {\n this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.update($!tool.firstLowerCase($!{tableInfo.name}));\n return this.queryById($!{tool.firstLowerCase($!{tableInfo.name})}.get$!tool.firstUpperCase($pk.name)());\n }\n\n /**\n * 通过主键删除数据\n *\n * @param $!pk.name 主键\n * @return 是否成功\n */\n @Override\n public boolean deleteById($!pk.shortType $!pk.name) {\n return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.deleteById($!pk.name) > 0;\n }\n}"
},
{
"name": "controller.java",
"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;\n\nimport $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};\nimport $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;\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@RestController\n@RequestMapping(\"$!tool.firstLowerCase($tableInfo.name)\")\npublic class $!{tableName} {\n /**\n * 服务对象\n */\n @Resource\n private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;\n\n /**\n * 通过主键查询单条数据\n *\n * @param id 主键\n * @return 单条数据\n */\n @GetMapping(\"selectOne\")\n public $!{tableInfo.name} selectOne($!pk.shortType id) {\n return this.$!{tool.firstLowerCase($tableInfo.name)}Service.queryById(id);\n }\n\n}"
},
{
"name": "mapper.xml",
"code": "##引入mybatis支持\n$!mybatisSupport\n\n##设置保存名称与保存位置\n$!callback.setFileName($tool.append($!{tableInfo.name}, \"Dao.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}.dao.$!{tableInfo.name}Dao\">\n\n <resultMap type=\"$!{tableInfo.savePackageName}.entity.$!{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.parent.name}.$!tableInfo.obj.name\n where $!pk.obj.name = #{$!pk.name}\n </select>\n\n <!--查询指定行数据-->\n <select id=\"queryAllByLimit\" resultMap=\"$!{tableInfo.name}Map\">\n select\n #allSqlColumn()\n\n from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name\n limit #{offset}, #{limit}\n </select>\n\n <!--通过实体作为筛选条件查询-->\n <select id=\"queryAll\" resultMap=\"$!{tableInfo.name}Map\">\n select\n #allSqlColumn()\n\n from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name\n <where>\n#foreach($column in $tableInfo.fullColumn)\n <if test=\"$!column.name != null#if($column.type.equals(\"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\" useGeneratedKeys=\"true\">\n insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)\n values (#foreach($column in $tableInfo.otherColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)\n </insert>\n\n <insert id=\"insertBatch\" keyProperty=\"$!pk.name\" useGeneratedKeys=\"true\">\n insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)\n values\n <foreach collection=\"entities\" item=\"entity\" separator=\",\">\n (#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)\n </foreach>\n </insert>\n\n <insert id=\"insertOrUpdateBatch\" keyProperty=\"$!pk.name\" useGeneratedKeys=\"true\">\n insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)\n values\n <foreach collection=\"entities\" item=\"entity\" separator=\",\">\n (#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)\n </foreach>\n on duplicate key update\n #foreach($column in $tableInfo.otherColumn)$!column.obj.name = values($!column.obj.name) #if($velocityHasNext), #end#end\n </insert>\n\n <!--通过主键修改数据-->\n <update id=\"update\">\n update $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}\n <set>\n#foreach($column in $tableInfo.otherColumn)\n <if test=\"$!column.name != null#if($column.type.equals(\"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 <!--通过主键删除-->\n <delete id=\"deleteById\">\n delete from $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}\n </delete>\n\n</mapper>\n"
},
{
"name": "debug.json",
"code": "//调试表原始对象\n##$!tool.debug($tableInfo.obj)\n\n//调试列原始对象\n##$!tool.debug($tableInfo.fullColumn.get(0).obj)\n\n//调试列原始列类型\n##$!tool.debug($tableInfo.fullColumn.get(0).obj.dataType)\n\n//获取原始列类型中的字段\n##sqlType = $!tool.getField($tableInfo.fullColumn.get(0).obj.dataType, \"typeName\")\n\n//执行原始列类型中的方法\n##sqlTypeLen = $!tableInfo.fullColumn.get(0).obj.dataType.getLength()\n\n##$!tool.debug($tableInfo.obj.name)\n\n##$!tool.debug($dbUtil)\n\n\n## 所有字段集合\n#set($fieldList = $tool.newArrayList())\n#foreach($column in $tableInfo.fullColumn)\n $tool.call($fieldList.add($column.name))\n#end\n\n## 包含time通用字段,继承BaseTimeColumn\n#if($fieldList.contains(\"createTime\") \n && $fieldList.contains(\"updateTime\"))\n #set($baseClass = \"extends BaseTimeColumn\")\n#end\n \n## 包含所有通用字段,继承BaseColumn\n#if($fieldList.contains(\"createTime\") \n && $fieldList.contains(\"updateTime\")\n && $fieldList.contains(\"createBy\")\n && $fieldList.contains(\"updateBy\"))\n #set($baseClass = \"extends BaseColumn\")\n#end\n\n$!{baseClass}"
}
]
}
},
"columnConfig": {
"Default": {
"name": "Default",
"elementList": [
{
"title": "disable",
"type": "BOOLEAN",
"selectValue": ""
},
{
"title": "support",
"type": "SELECT",
"selectValue": " ,add,edit,query,del,ui"
}
]
}
},
"globalConfig": {
"Default": {
"name": "Default",
"elementList": [
{
"name": "init",
"value": "##初始化区域\n\n##去掉表的t_前缀\n$!tableInfo.setName($tool.getClassName($tableInfo.obj.name.replaceFirst(\"book_\",\"\")))\n\n##参考阿里巴巴开发手册,POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误\n#foreach($column in $tableInfo.fullColumn)\n#if($column.name.startsWith(\"is\") && $column.type.equals(\"java.lang.Boolean\"))\n $!column.setName($tool.firstLowerCase($column.name.substring(2)))\n#end\n#end\n\n##实现动态排除列\n#set($temp = $tool.newHashSet(\"testCreateTime\", \"otherColumn\"))\n#foreach($item in $temp)\n #set($newList = $tool.newArrayList())\n #foreach($column in $tableInfo.fullColumn)\n #if($column.name!=$item)\n ##带有反回值的方法调用时使用$tool.call来消除返回值\n $tool.call($newList.add($column))\n #end\n #end\n ##重新保存\n $tableInfo.setFullColumn($newList)\n#end\n\n##对importList进行篡改\n#set($temp = $tool.newHashSet())\n#foreach($column in $tableInfo.fullColumn)\n #if(!$column.type.startsWith(\"java.lang.\"))\n ##带有反回值的方法调用时使用$tool.call来消除返回值\n $tool.call($temp.add($column.type))\n #end\n#end\n##覆盖\n#set($importList = $temp)"
},
{
"name": "define",
"value": "##(Velocity宏定义)\n\n##定义设置表名后缀的宏定义,调用方式:#setTableSuffix(\"Test\")\n#macro(setTableSuffix $suffix)\n #set($tableName = $!tool.append($tableInfo.name, $suffix))\n#end\n\n##定义设置包名后缀的宏定义,调用方式:#setPackageSuffix(\"Test\")\n#macro(setPackageSuffix $suffix)\n#if($suffix!=\"\")package #end#if($tableInfo.savePackageName!=\"\")$!{tableInfo.savePackageName}.#{end}$!suffix;\n#end\n\n##定义直接保存路径与文件名简化的宏定义,调用方式:#save(\"/entity\", \".java\")\n#macro(save $path $fileName)\n $!callback.setSavePath($tool.append($tableInfo.savePath, $path))\n $!callback.setFileName($tool.append($tableInfo.name, $fileName))\n#end\n\n##定义表注释的宏定义,调用方式:#tableComment(\"注释信息\")\n#macro(tableComment $desc)\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})$desc\n *\n * @author $!author\n * @since $!time.currTime()\n */\n#end\n\n##定义GET,SET方法的宏定义,调用方式:#getSetMethod($column)\n#macro(getSetMethod $column)\n\n public $!{tool.getClsNameByFullName($column.type)} get$!{tool.firstUpperCase($column.name)}() {\n return $!{column.name};\n }\n\n public void set$!{tool.firstUpperCase($column.name)}($!{tool.getClsNameByFullName($column.type)} $!{column.name}) {\n this.$!{column.name} = $!{column.name};\n }\n#end"
},
{
"name": "autoImport",
"value": "##自动导入包(仅导入实体属性需要的包,通常用于实体类)\n#foreach($import in $importList)\nimport $!import;\n#end"
},
{
"name": "mybatisSupport",
"value": "##针对Mybatis 进行支持,主要用于生成xml文件\n#foreach($column in $tableInfo.fullColumn)\n ##储存列类型\n $tool.call($column.ext.put(\"sqlType\", $tool.getField($column.obj.dataType, \"typeName\")))\n #if($tool.newHashSet(\"java.lang.String\").contains($column.type))\n #set($jdbcType=\"VARCHAR\")\n #elseif($tool.newHashSet(\"java.lang.Boolean\", \"boolean\").contains($column.type))\n #set($jdbcType=\"BOOLEAN\")\n #elseif($tool.newHashSet(\"java.lang.Byte\", \"byte\").contains($column.type))\n #set($jdbcType=\"BYTE\")\n #elseif($tool.newHashSet(\"java.lang.Integer\", \"int\", \"java.lang.Short\", \"short\").contains($column.type))\n #set($jdbcType=\"INTEGER\")\n #elseif($tool.newHashSet(\"java.lang.Long\", \"long\").contains($column.type))\n #set($jdbcType=\"INTEGER\")\n #elseif($tool.newHashSet(\"java.lang.Float\", \"float\", \"java.lang.Double\", \"double\").contains($column.type))\n #set($jdbcType=\"NUMERIC\")\n #elseif($tool.newHashSet(\"java.util.Date\", \"java.sql.Timestamp\", \"java.time.Instant\", \"java.time.LocalDateTime\", \"java.time.OffsetDateTime\", \"\tjava.time.ZonedDateTime\").contains($column.type))\n #set($jdbcType=\"TIMESTAMP\")\n #elseif($tool.newHashSet(\"java.sql.Date\", \"java.time.LocalDate\").contains($column.type))\n #set($jdbcType=\"TIMESTAMP\")\n #else\n ##其他类型\n #set($jdbcType=\"VARCHAR\")\n #end\n $tool.call($column.ext.put(\"jdbcType\", $jdbcType))\n#end\n\n##定义宏,查询所有列\n#macro(allSqlColumn)#foreach($column in $tableInfo.fullColumn)$column.obj.name#if($velocityHasNext), #end#end#end\n"
}
]
},
"My Global Config": {
"name": "My Global Config",
"elementList": [
{
"name": "init",
"value": "##初始化区域\n\n##去掉表的t_前缀\n$!tableInfo.setName($tool.getClassName($tableInfo.obj.name.replaceFirst(\"book_\",\"\")))\n\n##参考阿里巴巴开发手册,POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误\n#foreach($column in $tableInfo.fullColumn)\n#if($column.name.startsWith(\"is\") && $column.type.equals(\"java.lang.Boolean\"))\n $!column.setName($tool.firstLowerCase($column.name.substring(2)))\n#end\n#end\n\n##实现动态排除列\n#set($temp = $tool.newHashSet(\"testCreateTime\", \"otherColumn\"))\n#foreach($item in $temp)\n #set($newList = $tool.newArrayList())\n #foreach($column in $tableInfo.fullColumn)\n #if($column.name!=$item)\n ##带有反回值的方法调用时使用$tool.call来消除返回值\n $tool.call($newList.add($column))\n #end\n #end\n ##重新保存\n $tableInfo.setFullColumn($newList)\n#end\n\n##对importList进行篡改\n#set($temp = $tool.newHashSet())\n#foreach($column in $tableInfo.fullColumn)\n #if(!$column.type.startsWith(\"java.lang.\"))\n ##带有反回值的方法调用时使用$tool.call来消除返回值\n $tool.call($temp.add($column.type))\n #end\n#end\n##覆盖\n#set($importList = $temp)\n"
},
{
"name": "define",
"value": "##(Velocity宏定义)\n\n##定义设置表名后缀的宏定义,调用方式:#setTableSuffix(\"Test\")\n#macro(setTableSuffix $suffix)\n #set($tableName = $!tool.append($tableInfo.name, $suffix))\n#end\n\n##定义设置包名后缀的宏定义,调用方式:#setPackageSuffix(\"Test\")\n#macro(setPackageSuffix $suffix)\n#if($suffix!=\"\")package #end#if($tableInfo.savePackageName!=\"\")$!{tableInfo.savePackageName}.#{end}$!suffix;\n#end\n\n##定义直接保存路径与文件名简化的宏定义,调用方式:#save(\"/entity\", \".java\")\n#macro(save $path $fileName)\n $!callback.setSavePath($tool.append($tableInfo.savePath, $path))\n $!callback.setFileName($tool.append($tableInfo.name, $fileName))\n#end\n\n##定义表注释的宏定义,调用方式:#tableComment(\"注释信息\")\n#macro(tableComment $desc)\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})$desc\n *\n * @author $!author\n * @date $!time.currTime(\"yyyy/MM/dd\")\n */\n#end\n\n##定义GET,SET方法的宏定义,调用方式:#getSetMethod($column)\n#macro(getSetMethod $column)\n\n public $!{tool.getClsNameByFullName($column.type)} get$!{tool.firstUpperCase($column.name)}() {\n return $!{column.name};\n }\n\n public void set$!{tool.firstUpperCase($column.name)}($!{tool.getClsNameByFullName($column.type)} $!{column.name}) {\n this.$!{column.name} = $!{column.name};\n }\n#end"
},
{
"name": "autoImport",
"value": "##自动导入包(仅导入实体属性需要的包,通常用于实体类)\n#foreach($import in $importList)\nimport $!import;\n#end"
},
{
"name": "mybatisSupport",
"value": "##针对Mybatis 进行支持,主要用于生成xml文件\n#foreach($column in $tableInfo.fullColumn)\n ##储存列类型\n $tool.call($column.ext.put(\"sqlType\", $tool.getField($column.obj.dataType, \"typeName\")))\n #if($tool.newHashSet(\"java.lang.String\").contains($column.type))\n #set($jdbcType=\"VARCHAR\")\n #elseif($tool.newHashSet(\"java.lang.Boolean\", \"boolean\").contains($column.type))\n #set($jdbcType=\"BOOLEAN\")\n #elseif($tool.newHashSet(\"java.lang.Byte\", \"byte\").contains($column.type))\n #set($jdbcType=\"BYTE\")\n #elseif($tool.newHashSet(\"java.lang.Integer\", \"int\", \"java.lang.Short\", \"short\").contains($column.type))\n #set($jdbcType=\"INTEGER\")\n #elseif($tool.newHashSet(\"java.lang.Long\", \"long\").contains($column.type))\n #set($jdbcType=\"INTEGER\")\n #elseif($tool.newHashSet(\"java.lang.Float\", \"float\", \"java.lang.Double\", \"double\").contains($column.type))\n #set($jdbcType=\"NUMERIC\")\n #elseif($tool.newHashSet(\"java.util.Date\", \"java.sql.Timestamp\", \"java.time.Instant\", \"java.time.LocalDateTime\", \"java.time.OffsetDateTime\", \"\tjava.time.ZonedDateTime\").contains($column.type))\n #set($jdbcType=\"TIMESTAMP\")\n #elseif($tool.newHashSet(\"java.sql.Date\", \"java.time.LocalDate\").contains($column.type))\n #set($jdbcType=\"TIMESTAMP\")\n #else\n ##其他类型\n #set($jdbcType=\"VARCHAR\")\n #end\n $tool.call($column.ext.put(\"jdbcType\", $jdbcType))\n#end\n\n##定义宏,查询所有列\n#macro(allSqlColumn)#foreach($column in $tableInfo.fullColumn)$column.obj.name#if($velocityHasNext), #end#end#end\n"
}
]
}
}
}
\ No newline at end of file
......@@ -31,4 +31,45 @@
## 用户密码
- admin/admin123
\ No newline at end of file
- admin/admin123
## 整合mybatis-plus
整合思路:使用代码生成器和 mp 实现单表增、删、改和通用查询,配合数据库字段约定达到简化开发的目的;复杂 sql 请直接写在 mapper.xml。
- 新增两种粒度的通用字段,通过 mp 实现自动填充功能;
> BaseTimeColumn 类,包含 createTime, updateTime;
>
> BaseColumn 类,包含 createBy, updateBy, createTime, updateTime;
>
> 填充逻辑类 com.watone.framework.handler.MybatisPlusColumnsHandler
- 使用 mp 的逻辑删除功能;
> application.yml 中配置,逻辑删除字段为约定字段 delFlag
- 根据 DTO 对象封装 Wrapper 实现通用单表查询;
> com.watone.business.module1.service.impl.ZjApprovalAttachServiceImpl#createWrapper
>
> 代码中只是个空的实例,根据实际查询类型封装条件,注意使用 mp 的条件构造器时选择带 `boolean condition` 的方法。
- 使用 IDEA 插件 Easy Code 生成代码,配置文件 EasyCodeConfig.json;
- 推荐分包规范,业务代码写在 watone-business 下 com.watone.business,根据业务边界分包,职责划分更清晰
> 参考 model1 示例。尽量避免所有业务的 controller 都在一个包下,entity 都在一个包下以此类推
约定数据库通用字段:
```sql
`create_by` varchar(64) COLLATE utf8mb4_bin DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) COLLATE utf8mb4_bin DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
```
......@@ -45,6 +45,7 @@
<velocity.version>1.7</velocity.version>
<jwt.version>0.9.1</jwt.version>
<lombok.version>1.18.20</lombok.version>
<hutool.version>5.7.11</hutool.version>
</properties>
<!-- 依赖声明 -->
......@@ -79,6 +80,21 @@
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-boot.version}</version>
<!-- 排除冲突依赖 -->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- pagehelper 分页插件 -->
......@@ -213,6 +229,12 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!-- 定时任务-->
<dependency>
<groupId>com.watone</groupId>
......
# 项目相关配置
watone:
# 名称
name: zj-lab
name: monolith-application-mybatis-plus
# 版本
version: 3.6.0
version: 1.0.0
# 版权年份
copyrightYear: 2021
# 实例演示开关
......@@ -59,13 +59,13 @@ spring:
# redis 配置
redis:
# 地址
host: 115.29.4.90
host: 127.0.0.1
# 端口,默认为6379
port: 6379
# 数据库索引
database: 10
# 密码
password: WatoneDesktop
password:
# 连接超时时间
timeout: 10s
lettuce:
......@@ -90,11 +90,23 @@ token:
# Mybatis plus配置
mybatis-plus:
# 别名包扫描路径
type-aliases-package: com.watone.**.domain
# mybatis配置文件
mapper-locations: classpath*:mapper/**/*Mapper.xml
configuration:
# 驼峰命名映射
map-underscore-to-camel-case: true
# 映射null值
call-setters-on-nulls: true
global-config:
db-config:
# 主键策略
id-type: auto
# 逻辑删除 0代表存在 2代表删除
logic-delete-field: delFlag
logic-delete-value: 2
logic-not-delete-value: 0
# PageHelper分页插件
pagehelper:
......
......@@ -21,21 +21,6 @@
<dependency>
<groupId>com.watone</groupId>
<artifactId>watone-system</artifactId>
<!-- 排除冲突依赖 -->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- swagger start-->
......@@ -66,12 +51,6 @@
<artifactId>lombok</artifactId>
</dependency>
<!-- Mybatis-Plus启动器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.watone.business.module1.controller;
import com.watone.business.module1.domain.entity.ZjApprovalAttach;
import com.watone.business.module1.domain.dto.ZjApprovalAttachDTO;
import com.watone.business.module1.service.ZjApprovalAttachService;
import com.watone.common.core.controller.BaseController;
import com.watone.common.core.domain.AjaxResult;
import com.watone.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
......@@ -19,27 +16,59 @@ import javax.annotation.Resource;
* 审批附件表(ZjApprovalAttach)表控制层
*
* @author MaTianHao
* @date 2021/12/01
* @date 2021/12/09
*/
@Api(tags = "审批附件表")
@RestController
@RequestMapping("zjApprovalAttach")
@Api(tags = "审批附件")
public class ZjApprovalAttachController extends BaseController {
/**
* 服务对象
*/
@Resource
private ZjApprovalAttachService zjApprovalAttachService;
@ApiResponses({
@ApiResponse(code = 200, message = "success", response = ZjApprovalAttach.class)
})
@ApiOperation("附件列表")
@GetMapping
public AjaxResult findAll() {
startPage();
return AjaxResult.success(zjApprovalAttachService.list());
/**
* 新增数据
*/
@ApiOperation("新增数据")
@PostMapping("/zjApprovalAttach")
public AjaxResult insert(@RequestBody ZjApprovalAttachDTO param) {
return toAjax(zjApprovalAttachService.insert(param));
}
/**
* 修改数据
*/
@ApiOperation("修改数据")
@PutMapping("/zjApprovalAttach")
public AjaxResult update(@RequestBody ZjApprovalAttachDTO param) {
return toAjax(zjApprovalAttachService.update(param));
}
/**
* 删除数据
*/
@ApiOperation("删除数据")
@DeleteMapping("/zjApprovalAttach/{id}")
public AjaxResult delete(@PathVariable Long id) {
return toAjax(zjApprovalAttachService.delete(id));
}
/**
* 通过主键查询单条数据
*/
@ApiOperation("通过主键查询单条数据")
@GetMapping("/zjApprovalAttach/{id}")
public AjaxResult detail(@PathVariable Long id) {
return AjaxResult.success(zjApprovalAttachService.detail(id));
}
/**
* 分页查询列表
*/
@ApiOperation("分页查询列表")
@GetMapping("/zjApprovalAttach")
public TableDataInfo findPage(ZjApprovalAttachDTO param) {
startPage();
return getDataTable(zjApprovalAttachService.findPage(param));
}
}
package com.watone.business.module1.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 审批附件表(ZjApprovalAttach)表入参类
*
* @author MaTianHao
* @date 2021/12/09
*/
@Data
@ApiModel("审批附件表入参")
public class ZjApprovalAttachDTO {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("审批记录id")
private Long logId;
@ApiModelProperty("预警信息id")
private Long warningInfoId;
@ApiModelProperty("文件名")
private String attachName;
@ApiModelProperty("文件地址")
private String attachPath;
}
package com.watone.business.module1.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 审批附件表(ZjApprovalAttach)表实体类
*
* @author MaTianHao
* @date 2021/12/01
* @date 2021/12/09
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("zj_approval_attach")
@ApiModel("审批附件表")
public class ZjApprovalAttach extends Model<ZjApprovalAttach> {
public class ZjApprovalAttach {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("审批记录id")
private Long logId;
@ApiModelProperty("预警信息id")
private Long warningInfoId;
@ApiModelProperty("文件名")
private String attachName;
@ApiModelProperty("文件地址")
private String attachPath;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
}
......@@ -7,7 +7,7 @@ import com.watone.business.module1.domain.entity.ZjApprovalAttach;
* 审批附件表(ZjApprovalAttach)表数据库访问层
*
* @author MaTianHao
* @date 2021/12/01
* @date 2021/12/09
*/
public interface ZjApprovalAttachMapper extends BaseMapper<ZjApprovalAttach> {
......
package com.watone.business.module1.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.watone.business.module1.domain.dto.ZjApprovalAttachDTO;
import com.watone.business.module1.domain.entity.ZjApprovalAttach;
import java.util.List;
/**
* 审批附件表(ZjApprovalAttach)表服务接口
*
* @author MaTianHao
* @date 2021/12/01
* @date 2021/12/09
*/
public interface ZjApprovalAttachService extends IService<ZjApprovalAttach> {
/**
* 新增数据
*
* @param param 入参对象
* @return 是否成功
*/
boolean insert(ZjApprovalAttachDTO param);
/**
* 修改数据
*
* @param param 入参对象
* @return 是否成功
*/
boolean update(ZjApprovalAttachDTO param);
/**
* 删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean delete(Long id);
/**
* 通过主键查询单条数据
*
* @param id 主键
* @return 实例对象
*/
ZjApprovalAttach detail(Long id);
/**
* 分页查询列表
*
* @param param 入参对象
* @return 对象集合
*/
List<ZjApprovalAttach> findPage(ZjApprovalAttachDTO param);
}
package com.watone.business.module1.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.watone.business.module1.mapper.ZjApprovalAttachMapper;
import com.watone.business.module1.domain.dto.ZjApprovalAttachDTO;
import com.watone.business.module1.domain.entity.ZjApprovalAttach;
import com.watone.business.module1.mapper.ZjApprovalAttachMapper;
import com.watone.business.module1.service.ZjApprovalAttachService;
import com.watone.common.exception.ServiceException;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
* 审批附件表(ZjApprovalAttach)表服务实现类
*
* @author MaTianHao
* @date 2021/12/01
* @date 2021/12/09
*/
@Service
public class ZjApprovalAttachServiceImpl extends ServiceImpl<ZjApprovalAttachMapper, ZjApprovalAttach> implements ZjApprovalAttachService {
@Resource
private ZjApprovalAttachMapper zjApprovalAttachMapper;
@Override
public boolean insert(ZjApprovalAttachDTO param) {
ZjApprovalAttach entity = new ZjApprovalAttach();
BeanUtil.copyProperties(param, entity);
return this.save(entity);
}
@Override
public boolean update(ZjApprovalAttachDTO param) {
ZjApprovalAttach entity = new ZjApprovalAttach();
BeanUtil.copyProperties(param, entity);
return this.updateById(entity);
}
@Override
public boolean delete(Long id) {
// 存在delFlag字段则为逻辑删除,否则为物理删除
return this.removeById(id);
}
@Override
public ZjApprovalAttach detail(Long id) {
ZjApprovalAttach entity = this.getById(id);
if (Objects.isNull(entity)) {
throw new ServiceException("详情未找到");
}
return entity;
}
@Override
public List<ZjApprovalAttach> findPage(ZjApprovalAttachDTO param) {
LambdaQueryWrapper<ZjApprovalAttach> wrapper = createWrapper(param);
return this.list(wrapper);
}
/**
* 构建Wrapper
*
* @param param 入参对象
* @return Lambda 语法使用 Wrapper
*/
private LambdaQueryWrapper<ZjApprovalAttach> createWrapper(ZjApprovalAttachDTO param) {
LambdaQueryWrapper<ZjApprovalAttach> queryWrapper = Wrappers.lambdaQuery();
// 排序
// queryWrapper.orderByDesc(BaseTimeColumn::getCreateTime);
if (Objects.isNull(param)) {
return queryWrapper;
}
// 拼接条件
// queryWrapper.eq(boolean, R, Object)
return queryWrapper;
}
}
......@@ -8,8 +8,6 @@
<result property="warningInfoId" column="warning_info_id" jdbcType="INTEGER"/>
<result property="attachName" column="attach_name" jdbcType="VARCHAR"/>
<result property="attachPath" column="attach_path" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
</mapper>
......
......@@ -119,6 +119,18 @@
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- 工具集 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<!-- Mybatis-Plus启动器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -147,4 +147,14 @@ public class Constants {
* LDAP 远程方法调用
*/
public static final String LOOKUP_LDAP = "ldap://";
/**
* 删除标志 0 存在
*/
public static final String DEL_FLAG_EXIST = "0";
/**
* 删除标志 2 删除
*/
public static final String DEL_FLAG_DELETE = "2";
}
package com.watone.common.core.mybatisplus.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
/**
* mybatis plus自动填充字段(时间字段 + 人员字段)
*
* @author MaTianHao
* @date 2021/12/3
*/
public class BaseColumn extends BaseTimeColumn {
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private String createBy;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE, select = false)
private String updateBy;
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
}
package com.watone.common.core.mybatisplus.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.time.LocalDateTime;
/**
* mybatis plus自动填充字段(时间字段)
*
* @author MaTianHao
* @date 2021/12/3
*/
public class BaseTimeColumn {
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE, select = false)
private LocalDateTime updateTime;
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
}
package com.watone.framework.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.watone.common.constant.HttpStatus;
import com.watone.common.core.domain.model.LoginUser;
import com.watone.common.exception.ServiceException;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Objects;
/**
* mybatis plus通用字段自动填充
*
* @author MaTianHao
* @date 2021/12/1
*/
@Component
public class MybatisPlusColumnsHandler implements MetaObjectHandler {
/**
* 匿名用户
*/
private static final String ANONYMOUS_USER = "anonymousUser";
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "createBy", String.class, getLoginUserName());
this.strictUpdateFill(metaObject, "updateBy", String.class, getLoginUserName());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
this.strictUpdateFill(metaObject, "updateBy", String.class, getLoginUserName());
}
/**
* 获取当前登录用户名
*/
private String getLoginUserName() {
String loginUserName = "";
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (Objects.isNull(authentication)) {
throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
}
// 未认证
if (!authentication.isAuthenticated()) {
return loginUserName;
}
// 匿名用户
if (ANONYMOUS_USER.equals(authentication.getPrincipal())) {
return ANONYMOUS_USER;
}
try {
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
loginUserName = loginUser.getUsername();
} catch (Exception ignore) {
}
return loginUserName;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment