使用到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=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 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;

}

Logo

一站式 AI 云服务平台

更多推荐