在开发中,前端传入给后端的数据往往与我们需要写入数据库的某张表的字段要多一些内容,所以在向表中插入数据时候往往需要需要将属性提取出来,进行操作。例如在常见的注册中,前端传入数据对应表UserVo ,数据库对应表User
一、常用操作将前端传入的 UserVo 对象一个一个的通过 get 和 set 转移到 User 中
这个方法简单,只是需要手动一个一个属性的进行获取赋值
二、通过Spring 框架的 BeanUtils.copyProperties();
@Override
@Transactional(rollbackFor = Exception.class)
public Result addUser(UserVo userVo) {
User user =new User();
BeanUtils.copyProperties(userVo,user);
//通过传入的用户信息携带的公司名字查询对应的公司信息
Company company = companyDao.queryCompanyByName(userVo.getCompanyName());
if(company !=null){
//向users 表中添加用户信息 并且在company_users 关系表中建立关系
userDao.addUser(user);
userDao.addCompanyAndUserRelation(company.getId(), userVo.getId());
return new Result(true,"添加成功",null);
}
return new Result(false,"公司名字不存在",null);
}
听过调用Spring 框架提供的工具 ,实现将UserVO中的属性copy到User中,然后进行想要调用的方法,省去自己写set。
三、利用java的多态
User实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("users")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
UserVO类
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVo extends User {
private String companyName;
private String companyAddress;
public UserVo(User user) {
super(user.getId(),user.getName(),user.getAge(),user.getEmail());
}
}
在使用的时候就可以直接将UserVO当做参数,调用参数是User类的方法去使用。
例如:
@Override
@Transactional(rollbackFor = Exception.class)
public Result addUser(UserVo userVo) {
//通过传入的用户信息携带的公司名字查询对应的公司信息
Company company = companyDao.queryCompanyByName(userVo.getCompanyName());
if(company !=null){
//向users 表中添加用户信息 并且在company_users 关系表中建立关系
userDao.addUser(userVo);//addUser的需要的就是User类的对象
userDao.addCompanyAndUserRelation(company.getId(), userVo.getId());
return new Result(true,"添加成功",null);
}
return new Result(false,"公司名字不存在",null);
}
@Insert("insert into users(name,age,email) values (#{name},#{age},#{email})")
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
int addUser(User user);
这样设计就可以利用java本身的多态特性实现功能,既能装逼,又可以节约代码