使用到Sringboot、Mybatis Plus、Mysql
1、创建一张部门表,表结构
CREATE TABLE sys_dept
(
dept_id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘部门id’,
parent_id
bigint(20) DEFAULT ‘0’ COMMENT ‘父部门id’,
dept_name
varchar(30) DEFAULT ‘’ COMMENT ‘部门名称’,
order_num
int(4) DEFAULT ‘0’ COMMENT ‘显示顺序’,
status
tinyint(1) DEFAULT ‘0’ COMMENT ‘部门状态(0:正常 1:停用)’,
create_by
varchar(64) DEFAULT ‘’ COMMENT ‘创建者’,
create_time
datetime DEFAULT NULL COMMENT ‘创建时间’,
update_by
varchar(64) DEFAULT ‘’ COMMENT ‘更新者’,
update_time
datetime DEFAULT NULL COMMENT ‘更新时间’,
remark
varchar(200) DEFAULT ‘’ COMMENT ‘备注’,
PRIMARY KEY (dept_id
)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8
2、配置文件中添加下面的代码
@Configuration
public class MyBatisPlusConfig {
/**
* 自动填充功能
* @return
*/
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MetaHandler());
return globalConfig;
}
}
3、MetaHandler类的代码
/**
* 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
*/
@Component
public class MetaHandler implements MetaObjectHandler {
private static final Logger logger = LoggerFactory.getLogger(MetaHandler.class);
/**
* 新增数据执行
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
SysUserEntity userEntity = ShiroUtil.getUser();
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("createBy", userEntity.getLoginName(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
this.setFieldValByName("updateBy", userEntity.getLoginName(), metaObject);
}
/**
* 更新数据执行
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
SysUserEntity userEntity = ShiroUtil.getUser();
this.setFieldValByName("updateTime", new Date(), metaObject);
this.setFieldValByName("updateBy", userEntity.getLoginName(), metaObject);
}
}
4、执行正常的增删改操作,例如新增
@RequiresPermissions("sys:dept:add")
@PostMapping("/add")
@ResponseBody
public R add(@RequestBody SysDeptEntity deptEntity) {
logger.info("添加信息={}", deptEntity);
sysDeptService.save(deptEntity); // 不再需要设置setCreateBy、setCreateTime、setUpdateBy、setUpdateTime操作,代码更优美
return R.ok();
}
5、SysDeptEntity类代码
@Data
@TableName("sys_dept")
public class SysDeptEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 部门ID
**/
@TableId
private Long deptId;
/**
* 部门父节点ID
**/
private Long parentId;
/**
* 部门名称
**/
private String deptName;
/**
* 显示顺序
**/
private Integer orderNum;
/**
* 用户状态(0:正常 1:禁用)
**/
private Integer status;
@TableField(exist = false)
private List<SysDeptEntity> children;
}
6、BaseEntity类代码
/**
* 基础Bean
*/
@Data
public class BaseEntity implements Serializable {
@TableField(value = "create_by", fill = FieldFill.INSERT) // 新增执行
private String createBy;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
private String updateBy;
@TableField(value = "update_Time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@TableField(value = "remark")
private String remark;
}