从头搭建一个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; } }