你的位置:首页 > 软件开发 > Java > 如何解决CRUD操作中与业务无关的字段赋值

如何解决CRUD操作中与业务无关的字段赋值

发布时间:2016-04-14 23:00:15
提高效率一直是个永恒的话题,编程中有一项也是可以提到效率的,那就是专注做一件事情,让其它没有强紧密联系的与之分开。这里分享下我们做CRUD时遇到的常见数据处理场景:数据库表字段全部设计为非空,即使这个字段在业务上是可以为空的,之所以将数据库表字段全部设计为非空,这里有优点也有缺点 ...

如何解决CRUD操作中与业务无关的字段赋值

如何解决CRUD操作中与业务无关的字段赋值 

提高效率一直是个永恒的话题,编程中有一项也是可以提到效率的,那就是专注做一件事情,让其它没有强紧密联系的与之分开。这里分享下我们做CRUD时遇到的常见数据处理场景:

  • 数据库表字段全部设计为非空,即使这个字段在业务上是可以为空的,之所以将数据库表字段全部设计为非空,这里有优点也有缺点,我们认为优点大于缺点,所以选择了它

     优点:

  1. 获取值时,不用判断这个字段是否为null,直接可用于逻辑运算。
  2. mysql DBA推荐此方案,可能是有利于性能,这里我并非求证过。

     缺点:

  1. 业务含义没有null清楚,比如int字段默认值设置成0,0就没有null语义清晰。
  2. 在使用ORM插入数据时,需要处理非空字段值为null的问题。
  •   系统字段的赋值,比如创建人,创建人id,创建时间,编辑人,编辑人id,编辑时间等,这些都需要在实际插入数据库前赋值给Model。这些系统字段与具体的业务一般没有太大的关联关系,只是起到标注数据被什么人在什么时间处理的,当这些非业务相关的代码充斥在代码中时,就显得有些多余,而且这类代码多了也会显示冗余,最后带来的结果就是非关键代码比例大。

如何解决CRUD操作中与业务无关的字段赋值    再看action中的调用:只需要在参数前面增加注解@ManageModelConfig,如果需要处理默认值,则将启用默认值的选项设置成true即可,下面的实现部分完全看不到任何与业务无关的代码。

@RequestMapping(value = "/addOrUpdateUser")  @ResponseBody  public Map<String, Object> addOrUpdateUser(@ManageModelConfig(isSetDefaultFieldsValue=true) EmployeeDto request) {    Map<String, Object> ret = new HashMap<>();    ValidateUtil.ValidateResult result= new ValidateUtil().ValidateModel(request);    boolean isCreate=request.getId() == 0;    try {      if (isCreate)      {        employeeService.insert(request);      }      else      {        employeeService.updateByPrimaryKey(request);      }      ret.put("data", "ok");    }catch (Exception e){      ret.put("err", e.getMessage());    }    return ret;  }

原标题:如何解决CRUD操作中与业务无关的字段赋值

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录