使用到Sringboot、Mybatis Plus、Shiro、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=utf82、配置文件中添加下面的代码
@Configurationpublic class MyBatisPlusConfig { /** * 自动填充功能 * @return */ @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setMetaObjectHandler(new MetaHandler()); return globalConfig; }}
3、MetaHandler类的代码
/** * 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用 */@Componentpublic 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")@ResponseBodypublic 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 Listchildren;}
6、BaseEntity类代码
/** * 基础Bean */@Datapublic 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;}