按照阿里巴巴开发手册的要求,所有表必有三个字段:主键id,create_gmt,update_gmt. 我们公司没有强制要求,但基本上每张表必备的字段有主键id,del_flag,create_gmt,update_gmt,create_user,update_user,create_ip,update_ip这几个字段.
mybatis生成的实体类都手动去实现一个CommonSysDomain类:
public interface CommonSysDomain {
void setUpdateTime(Date updateTime);
void setUpdateIp(String updateIp);
void setUpdateUser(String updateUser);
void setCreateTime(Date createTime);
void setCreateIp(String createIp);
void setCreateUser(String createUser);
void setDelflag(Integer delflag);
void setId(String id);
}
然后配合手写的工具类即可一行完成ip,user,time的创建或修改(部分代码以防出错try一下,常规数据其实没必要try这一下)
public class CommonTableInfo {
public static void modifyInfo(CommonSysDomain commonSysDomain, SysUserService sysUserService, HttpServletRequest request) {
commonSysDomain.setUpdateTime(new Date());
commonSysDomain.setUpdateIp(IpUtil.getIpFromRequest(request));
String currentUserId = JWTRedisUtil.getTokenUserId(request);
SysUser currentUser = sysUserService.queryById(currentUserId);
commonSysDomain.setUpdateUser(currentUser.getUsername());
}
public static void createInfo(CommonSysDomain commonSysDomain, SysUserService sysUserService, HttpServletRequest request) {
commonSysDomain.setDelflag(0);
commonSysDomain.setId(UUIDUtil.getUUID());
commonSysDomain.setCreateTime(new Date());
commonSysDomain.setUpdateTime(new Date());
commonSysDomain.setCreateIp(IpUtil.getIpFromRequest(request));
commonSysDomain.setUpdateIp(IpUtil.getIpFromRequest(request));
try {
String currentSysUserId = JWTRedisUtil.getTokenUserId(request);
SysUser currentSysUser = sysUserService.queryById(currentSysUserId);
commonSysDomain.setCreateUser(currentSysUser.getUsername());
commonSysDomain.setUpdateUser(currentSysUser.getUsername());
} catch (Exception e) {
commonSysDomain.setCreateUser("");
commonSysDomain.setUpdateUser("");
}
}
}
/* ************************************************************************************* */
逆向工程应该是稳定的,每次生成的实体类和映射类应该都是一样的,然而今天遇到的问题,在使用Mybatis的updatebyprimarykeyselective方法时,竟然无效,也不报错,只返回int 0(更新成功的返回值为int 1),查资料后发现逆向实体类的文件里主键id缺少了注解@Id,导致方法失效.git回看了历史版本发现@Id最初版本有,但并没有人为手动去修改注解,只有可能是在修改数据库表结构后重新生成的实体类文件把原来的文件覆盖了。也可能是generatorConfig.xml配置出了差错。