新增和修改时不可重复添加重复性校验解决方案
一.业务场景:
添加:添加的数据不能在数据库中存在,存在则不能添加;
不存在方可添加
修改:修改提交的数据是当前的数据,则可以成功修改
修改的数据需要排除它本身,在其他数据中也不存在,才可以修改
如:表中有id为001的记录,前端新增数据时,id不可重复为001,表中有name为小王的记录,前端新增数据时,name不可重复为小王。
二.示例代码:
Java代码参考一:
/
*controller类 添加接口 修改同理*/ @CheckType(OperationType.ADD) public void addEnavmark() { String jindu = getPara("jindu"); String weidu = getPara("weidu"); String[] enavmarkType = getParaValues("enavmarkType[]"); Integer atonId = getParaToInt("atonId"); String atonName = getPara("atonName"); Integer depId = getParaToInt("depId"); String depName = getPara("depName"); String company = getPara("company"); Record record = Db.use(Constant.ENAVMSI).findFirst("select aton_id from enavmark_station where aton_id = ?", atonId); Record rec = Db.use(Constant.ENAVMSI).findFirst("select station_name from enavmark_station where station_name = ?", atonName); AssertUtil.isTrue(record != null, "站点编号已存在"); AssertUtil.isTrue(rec != null, "站点名称已存在"); try { String enType = JsonKit.toJson(enavmarkType).replace("[", "").replace("]", "").replaceAll("\"", ""); String geom = "POINT(" + jindu + " " + weidu + ")"; List<Object> param = new ArrayList<>(); param.add(atonId); param.add(atonName); param.add(depName); param.add(geom); param.add(enType); param.add(depId); param.add(company); EnavmarkStation.dao.addEnavmarkStation(param.toArray()); renderJson("{\"msg\":\"成功\",\"code\":200}"); } catch (Exception e) { renderJson("{\"msg\":\"失败\",\"code\":500}"); e.printStackTrace(); } }
sql代码参考二:
sql的校验代码如下:
<select id="findRoleByName" resultType="com.frame.entity.Role" parameterType="java.lang.String"> select <include refid="Base_Column_List" /> from sys_Role where 1=1 <if test="role != null and role != ''"> and role = #{role} //主键不能重复 </if> <if test="id != null and id != ''"> and id != #{id} //id是排除本身的 </if> </select>