Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
monolith-application-mybatis-plus
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
马天浩
monolith-application-mybatis-plus
Commits
66de6d3d
Commit
66de6d3d
authored
Dec 02, 2021
by
matianhao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
整合mp
依赖调整 mybatis plus通用字段自动填充
parent
a3cd3433
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
728 additions
and
65 deletions
+728
-65
EasyCodeConfig.json
EasyCodeConfig.json
+262
-0
README.md
README.md
+42
-1
pom.xml
pom.xml
+22
-0
application.yml
watone-admin/src/main/resources/application.yml
+16
-4
pom.xml
watone-business/pom.xml
+0
-21
ZjApprovalAttachController.java
...siness/module1/controller/ZjApprovalAttachController.java
+49
-20
ZjApprovalAttachDTO.java
...tone/business/module1/domain/dto/ZjApprovalAttachDTO.java
+32
-0
ZjApprovalAttach.java
...tone/business/module1/domain/entity/ZjApprovalAttach.java
+12
-13
ZjApprovalAttachMapper.java
...atone/business/module1/mapper/ZjApprovalAttachMapper.java
+1
-1
ZjApprovalAttachService.java
...one/business/module1/service/ZjApprovalAttachService.java
+44
-1
ZjApprovalAttachServiceImpl.java
...ess/module1/service/impl/ZjApprovalAttachServiceImpl.java
+72
-2
ZjApprovalAttachMapper.xml
...ness/src/main/resources/mapper/ZjApprovalAttachMapper.xml
+0
-2
pom.xml
watone-common/pom.xml
+12
-0
Constants.java
...n/src/main/java/com/watone/common/constant/Constants.java
+10
-0
BaseColumn.java
...com/watone/common/core/mybatisplus/domain/BaseColumn.java
+41
-0
BaseTimeColumn.java
...watone/common/core/mybatisplus/domain/BaseTimeColumn.java
+43
-0
MybatisPlusColumnsHandler.java
...m/watone/framework/handler/MybatisPlusColumnsHandler.java
+70
-0
No files found.
EasyCodeConfig.json
0 → 100644
View file @
66de6d3d
{
"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\n
import com.watone.common.core.controller.BaseController;
\n
import com.watone.common.core.domain.AjaxResult;
\n
import com.watone.common.core.page.TableDataInfo;
\n
import $!{tableInfo.savePackageName}.domain.entity.$!tableInfo.name;
\n
import $!{tableInfo.savePackageName}.domain.dto.$!{tableInfo.name}DTO;
\n
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
\n
import org.springframework.web.bind.annotation.*;
\n
import io.swagger.annotations.*;
\n\n
import javax.annotation.Resource;
\n
import java.io.Serializable;
\n
import java.util.List;
\n\n
##表注释(宏定义)
\n
#tableComment(
\"
表控制层
\"
)
\n
@Api(tags =
\"
$!{tableInfo.comment}
\"
)
\n
@RestController
\n
public 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
\n
import com.baomidou.mybatisplus.annotation.TableName;
\n
#if(${baseClass})import com.watone.common.core.mybatisplus.domain.$!{baseClass};#end
\n
import io.swagger.annotations.ApiModel;
\n
import io.swagger.annotations.ApiModelProperty;
\n
import 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}
\"
)
\n
public 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
\n
import io.swagger.annotations.ApiModel;
\n
import io.swagger.annotations.ApiModelProperty;
\n
import lombok.*;
\n\n
##表注释(宏定义)
\n
#tableComment(
\"
表入参类
\"
)
\n
@Data
\n
@ApiModel(
\"
$!{tableInfo.comment}入参
\"
)
\n
public 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\n
import com.baomidou.mybatisplus.extension.service.IService;
\n
import $!{tableInfo.savePackageName}.domain.entity.$!tableInfo.name;
\n
import $!{tableInfo.savePackageName}.domain.dto.$!{tableInfo.name}DTO;
\n
import java.util.List;
\n\n
##表注释(宏定义)
\n
#tableComment(
\"
表服务接口
\"
)
\n
public 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\n
import cn.hutool.core.bean.BeanUtil;
\n
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
\n
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
\n
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
\n
import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;
\n
import $!{tableInfo.savePackageName}.domain.entity.$!{tableInfo.name};
\n
import $!{tableInfo.savePackageName}.domain.dto.$!{tableInfo.name}DTO;
\n
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
\n
import com.watone.common.constant.Constants;
\n
import com.watone.common.exception.ServiceException;
\n
import com.watone.common.core.mybatisplus.domain.BaseTimeColumn;
\n
import org.springframework.stereotype.Service;
\n
import javax.annotation.Resource;
\n
import java.util.List;
\n
import java.util.Objects;
\n\n
##表注释(宏定义)
\n
#tableComment(
\"
表服务实现类
\"
)
\n
##@Service(
\"
$!tool.firstLowerCase($tableInfo.name)Service
\"
)
\n
@Service
\n
public 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\n
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
\n
import $!{tableInfo.savePackageName}.domain.entity.$!tableInfo.name;
\n\n
##表注释(宏定义)
\n
#tableComment(
\"
表数据库访问层
\"
)
\n
public 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
\n
import java.io.Serializable;
\n\n
##使用宏定义实现类注释信息
\n
#tableComment(
\"
实体类
\"
)
\n
public 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\n
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
\n
import org.apache.ibatis.annotations.Param;
\n
import java.util.List;
\n\n
/**
\n
* $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层
\n
*
\n
* @author $!author
\n
* @since $!time.currTime()
\n
*/
\n
public 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\n
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
\n
import java.util.List;
\n\n
/**
\n
* $!{tableInfo.comment}($!{tableInfo.name})表服务接口
\n
*
\n
* @author $!author
\n
* @since $!time.currTime()
\n
*/
\n
public 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\n
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
\n
import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao;
\n
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
\n
import org.springframework.stereotype.Service;
\n\n
import javax.annotation.Resource;
\n
import 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
\"
)
\n
public 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\n
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
\n
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
\n
import org.springframework.web.bind.annotation.*;
\n\n
import 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)
\"
)
\n
public 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)
\n
import $!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
\"
,
\"\t
java.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)
\n
import $!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
\"
,
\"\t
java.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
README.md
View file @
66de6d3d
...
...
@@ -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代表删除)'
,
```
pom.xml
View file @
66de6d3d
...
...
@@ -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-admin/src/main/resources/application.yml
View file @
66de6d3d
# 项目相关配置
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
:
1
15.29.4.90
host
:
1
27.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
:
...
...
watone-business/pom.xml
View file @
66de6d3d
...
...
@@ -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
watone-business/src/main/java/com/watone/business/module1/controller/ZjApprovalAttachController.java
View file @
66de6d3d
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/0
1
* @date 2021/12/0
9
*/
@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
));
}
}
watone-business/src/main/java/com/watone/business/module1/domain/dto/ZjApprovalAttachDTO.java
0 → 100644
View file @
66de6d3d
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
;
}
watone-business/src/main/java/com/watone/business/module1/domain/entity/ZjApprovalAttach.java
View file @
66de6d3d
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/0
1
* @date 2021/12/0
9
*/
@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
;
}
watone-business/src/main/java/com/watone/business/module1/mapper/ZjApprovalAttachMapper.java
View file @
66de6d3d
...
...
@@ -7,7 +7,7 @@ import com.watone.business.module1.domain.entity.ZjApprovalAttach;
* 审批附件表(ZjApprovalAttach)表数据库访问层
*
* @author MaTianHao
* @date 2021/12/0
1
* @date 2021/12/0
9
*/
public
interface
ZjApprovalAttachMapper
extends
BaseMapper
<
ZjApprovalAttach
>
{
...
...
watone-business/src/main/java/com/watone/business/module1/service/ZjApprovalAttachService.java
View file @
66de6d3d
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/0
1
* @date 2021/12/0
9
*/
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
);
}
watone-business/src/main/java/com/watone/business/module1/service/impl/ZjApprovalAttachServiceImpl.java
View file @
66de6d3d
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/0
1
* @date 2021/12/0
9
*/
@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
;
}
}
watone-business/src/main/resources/mapper/ZjApprovalAttachMapper.xml
View file @
66de6d3d
...
...
@@ -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>
...
...
watone-common/pom.xml
View file @
66de6d3d
...
...
@@ -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
watone-common/src/main/java/com/watone/common/constant/Constants.java
View file @
66de6d3d
...
...
@@ -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"
;
}
watone-common/src/main/java/com/watone/common/core/mybatisplus/domain/BaseColumn.java
0 → 100644
View file @
66de6d3d
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
;
}
}
watone-common/src/main/java/com/watone/common/core/mybatisplus/domain/BaseTimeColumn.java
0 → 100644
View file @
66de6d3d
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
;
}
}
watone-framework/src/main/java/com/watone/framework/handler/MybatisPlusColumnsHandler.java
0 → 100644
View file @
66de6d3d
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
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment