JAVA多态在传入数据VO类与操作表的DO类不同时的

             在开发中,前端传入给后端的数据往往与我们需要写入数据库的某张表的字段要多一些内容,所以在向表中插入数据时候往往需要需要将属性提取出来,进行操作。例如在常见的注册中,前端传入数据对应表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本身的多态特性实现功能,既能装逼,又可以节约代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值