springBoot 数据库表新增修改通用判断字段数据重复
springBoot 数据库表新增修改通用判断字段数据重复让数据库表新增修改判断重复不再繁琐前言写后台程序我们主要就是增删改查,而增改的时候就要进行判断重复,重复的代码写起来也是很烦的,想到这里我决定思考一下解决这个问题,起码要用少量的代码去判断重复,那么如何实现了,于是乎我想到了用java反射去实现。一、主要实现思路我们知道springBoot 使用的mybatis-plus按标准的模板封装好的
·
springBoot 数据库表新增修改通用判断字段数据重复
让数据库表新增修改判断重复不再繁琐
前言
写后台程序我们主要就是增删改查,而增改的时候就要进行判断重复,重复的代码写起来也是很烦的,想到这里我决定思考一下解决这个问题,起码要用少量的代码去判断重复,那么如何实现了,于是乎我想到了用java反射去实现。
一、主要实现思路
我们知道springBoot 使用的mybatis-plus按标准的模板封装好的,每次我们的mapper层都继承了BaseMapper,而service层则继承了IService,那么我们就可以从这里下手,利用反射实现我们要传入的类当作泛型T,在工具里接受各种service实现类就行了下面看代码:
package com.home.lh.util.sysutil;
import java.lang.reflect.Field;
import java.util.List;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
@Component
@Order(4)
public class ClassUtil<T> {
/**
* 新增时排重
*
* @param <T>
* @param u
* @return
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public boolean addIsHave(T o, IService<T> service) throws IllegalArgumentException, IllegalAccessException {
QueryWrapper<T> queryWrapper = new QueryWrapper<T>();
Boolean result = false;
for (Field field : o.getClass().getDeclaredFields()) {
field.setAccessible(true);
// 获取字段的值
// System.out.println(field.getName() + ":" + field.get(o) );
String value = field.getType().toString();
// System.out.println(value);
if (!field.getName().equals("serialVersionUID") && field.get(o) != null && !value.equals("boolean")) {
boolean isTableField = field.isAnnotationPresent(TableField.class);
if (isTableField) {
TableField tableField = field.getAnnotation(TableField.class);
String fieldValue = tableField.value();
System.out.println(fieldValue + "&&&&&&" + field.getName() + "&&&&&&&&&" + field.get(o));
queryWrapper.eq("" + fieldValue + "", field.get(o));
}
}
}
List<T> list = service.list(queryWrapper);
if (list.size() > 0) {
result = true;
}
return result;
}
/**
* 更新时排重
* @param o
* @param service
* @param id
* @return
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public boolean updateIsHave(T o, IService<T> service, String id)
throws IllegalArgumentException, IllegalAccessException {
QueryWrapper<T> queryWrapper = new QueryWrapper<T>();
Boolean result = false;
for (Field field : o.getClass().getDeclaredFields()) {
field.setAccessible(true);
// 获取字段的值
// System.out.println(field.getName() + ":" + field.get(o) );
String value = field.getType().toString();
// System.out.println(value);
if (!field.getName().equals("serialVersionUID") && field.get(o) != null && !value.equals("boolean")) {
boolean isTableField = field.isAnnotationPresent(TableField.class);
if (isTableField) {
TableField tableField = field.getAnnotation(TableField.class);
String fieldValue = tableField.value();
System.out.println(fieldValue + "&&&&&&" + field.getName() + "&&&&&&&&&" + field.get(o));
queryWrapper.eq("" + fieldValue + "", field.get(o));
}
}
}
List<T> list = service.list(queryWrapper);
if (list.size() == 1) {
T g = list.get(0);
for (Field field : g.getClass().getDeclaredFields()) {
field.setAccessible(true);
boolean isIdField = field.isAnnotationPresent(TableId.class);
if (isIdField) {
System.out.println(field.get(g));
if (!field.get(g).equals(id)) {
result = true;
}
}
}
} else if (list.size() > 1) {
result = true;
}
return result;
}
}
当然有一点我必须要说明一下,实体类不能缺少 @TableField("name")的注解,具体实体类参考如下:
package com.home.lh.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* <p>
* 系统角色
* </p>
*
* @author 刘浩
* @since 2021-05-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_role")
@ApiModel(value="SysRole对象", description="系统角色")
public class SysRole extends Model<SysRole> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "角色id")
@TableId(value = "rid", type = IdType.ASSIGN_UUID)
private String rid;
@ApiModelProperty(value = "角色名称")
@TableField("rname")
private String rname;
@ApiModelProperty(value = "角色描述")
@TableField("remake")
private String remake;
@ApiModelProperty(value = "权限集")
@TableField("moduleId")
private String moduleId;
@ApiModelProperty(value = "菜单集")
@TableField("menuId")
private String menuId;
@ApiModelProperty(value = "创建时间")
@TableField(value = "createTime", fill = FieldFill.INSERT)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private LocalDateTime createTime;
@ApiModelProperty(value = "修改时间")
@TableField(value = "updateTime", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private LocalDateTime updateTime;
@ApiModelProperty(value = "是否删除 0 未 1 已")
@TableField("isdel")
@TableLogic
private String isdel;
@ApiModelProperty(value = "是否禁用 0 未 1 已")
@TableField("isdisable")
private String isdisable;
@ApiModelProperty(value = "级别")
@TableField("level")
private Integer level;
@Override
protected Serializable pkVal() {
return this.rid;
}
}
首先说明@TableField中必须 要放入表字段名称,因为查询字段时要用到,如果不加入这个注解或没有写字段名称就无法查询。
二、使用步骤
具体使用示例如下:
@Api(value = "SysRoleController", tags = "")
@RestController
@RequestMapping("/system/sys-role")
public class SysRoleController {
@Autowired
private ISysRoleService sysRoleService;
@Autowired
private ClassUtil<SysRole> classUtil;
/**
* 新增
*/
@ApiOperation(value = "新增数据")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ReturnMap add(SysRole sysRole) {
ReturnMap rm = new ReturnMap();
SysRole role = new SysRole();
role.setRname(sysRole.getRname());
try {
boolean result = classUtil.addIsHave(role, sysRoleService);
if (!result) {
// 判断新增角色的等级不能大于本身的角色
SysRole r = SimpleUtils.getRole();
if (sysRole.getLevel() <= r.getLevel()) {
rm.setCode(-1);
rm.setMsg("角色等级权限不能高于自己");
} else {
Boolean flag = sysRoleService.save(sysRole);
if (flag) {
rm.setCode(1);
rm.setMsg("操作成功");
} else {
rm.setCode(1);
rm.setMsg("操作失败");
}
}
} else {
rm.setCode(-1);
rm.setMsg("角色已存在");
}
} catch (Exception e) {
e.printStackTrace();
}
return rm;
}
/**
* 修改
*/
@ApiOperation(value = "更新数据")
@RequestMapping(value = "/update", method = RequestMethod.POST)
public ReturnMap update(SysRole sysRole) {
ReturnMap rm = new ReturnMap();
SysRole role = new SysRole();
role.setRname(sysRole.getRname());
try {
boolean result = classUtil.updateIsHave(role, sysRoleService, sysRole.getRid());
if(!result) {
// 判断新增角色的等级不能大于本身的角色
SysRole r = SimpleUtils.getRole();
if (sysRole.getLevel() <= r.getLevel()) {
rm.setCode(-1);
rm.setMsg("角色等级权限不能高于自己");
} else {
Boolean flag = sysRoleService.updateById(sysRole);
if (flag) {
rm.setCode(1);
rm.setMsg("操作成功");
} else {
rm.setCode(1);
rm.setMsg("操作失败");
}
}
}else {
rm.setCode(-1);
rm.setMsg("角色已存在");
return rm;
}
} catch (Exception e) {
e.printStackTrace();
}
return rm;
}
}
更多推荐
所有评论(0)