从头搭建一个SpringBoot项目,至少应该引入哪些配置?( 二 )
public abstract class BaseForm<T> { /** * 获取实例 * @return 返回实体类 */ public abstract T buildEntity; }
有小伙伴可能有疑问了 , 这个类有啥用呢 。 先看一下 , 下面的代码 。
/** * 添加用户 * @param userForm 表单数据 * @return true 或者 false */ @Override public boolean addUser(AddUserForm userForm) { User user = new User; user.setNickname(userForm.getNickname); user.setBirthday(userForm.getBirthday); user.setUsername(userForm.getUsername); user.setPassword(userForm.getPassword); return save(user); }
重构一下 , 感觉清爽了一些 。
/** * 添加用户 * @param userForm 表单数据 * @return true 或者 false */ @Override public boolean addUser(AddUserForm userForm) { User user = new User; BeanUtils.copyProperties(this,user); return save(user); }
使用BaseForm进行重构 AddUserForm 继承 BaseForm并重写buildEntity
@Data @EqualsAndHashCode(callSuper = false) public class AddUserForm extends BaseForm<User> { /** * 昵称 */ private String nickname; /** * 生日 */ private Date birthday; /** * 用户名 */ private String username; /** * 密码 */ private String password; /** * 构造实体 * @return 实体对象 */ @Override public User buildEntity { User user = new User; BeanUtils.copyProperties(this,user); return user; } }
/** * 添加用户 * @param userForm 表单数据 * @return true 或者 false */ @Override public boolean addUser(AddUserForm userForm) { return save(userForm.buildEntity); }
上面的代码有没有种似曾相识的感觉 , 很多情况都是将接受到的参数 , 转变成对应的实体类然后保存或者更新 。 所以对于这类的form可以继承baseform并实现buildEntity这样可以更加符合面向对象 , service不需要关心form如何转变成entity,只需要在使用的时候调用buildEntity即可 , 尤其是在form -> entity相对复杂的时候 , 这样做可以减少service内的代码 。 让代码逻辑看起来更加清晰 。
通用的分页对象涉及到查询的时候 , 绝大多数都需要用到分页 , 所以说封装分页对象就很有必要 。 可以注意下 PageForm.calcCurrent、PageVo.setCurrentAndSize、PageVo.setTotal这个几个方法 。
PageForm@Data @ApiModel(value = "http://news.hoteastday.com/a/分页数据", description = "分页需要的表单数据") public class PageForm<T extends PageForm<?>>{ /** * 页码 */ @ApiModelProperty(value = "http://news.hoteastday.com/a/页码 从第一页开始 1") @Min(value = http://news.hoteastday.com/a/1, message ="页码输入有误") private Integer current; /** * 每页显示的数量 */ @ApiModelProperty(value = "http://news.hoteastday.com/a/每页显示的数量 范围在1~100") @Range(min = 1, max = 100, message = "每页显示的数量输入有误") private Integer size; /** * 计算当前页 ,方便mysql 进行分页查询 * @return 返回 pageForm */ @ApiModelProperty(hidden = true) public T calcCurrent{ current = (current - 1 ) * size; return (T) this; } }
- 霍金|霍金留下三个预言,每一个都事关人类安危,第一个已经开始应验
- 三星|德媒:中国或许将成为下一个全球创新总部!
- 数字货币|你的“花呗”额度降了吗?“借呗”整改后下一个来了,有用户直接被停
- Windows|New Windows 11操作系统壁纸灵感来源,新的视角,一个新的时代
- 奥陌陌|奥陌陌:人类观察到的第一个外星文明迹象?留下了哪些未解之谜?
- 联想|拆解联想电脑,没有任何一个核心零部件是国产的,塑料壳和螺丝是国产的
- 物联网|物联网解决方案的前端开发
- 女娲|一个模型通杀8大视觉任务,一句话生成图像视频、P图视频处理都行
- UFO|詹姆斯韦伯遇到了一个小问题,全面测试导致发射延迟了几天
- 芯片|一个指令查电脑使用痕迹!动过什么文件,看得清清楚楚