BeanUtils与普通set、get区别

再开始测试前,先了解下dto与do。dto是数据传输对象,do是也就是数据库表结构转换成java的那个类。(除了dto与do,还有vo和po,具体的可以去百度下)

为什么要用一个数据库转成java类需要dto与do?

        场景1:用户在注册账号的时候,需要传入账号,密码等常规属性。但是创建时间、登陆时间等是不需要前台传入。那么这些都可以用后台进行赋值。这时候就需要把dto(传输对象)转换成do(数据库实体类)。这样会使数据更安全。

        场景2:用户登陆账号后,后台会根据账号密码查询该用户的数据并返回给前端。那么这时候通过数据库查询结果返回给前端。但是查询结果中有账号密码,登陆ip等敏感信息。那么就需要do转换成dto。这样可以保证你返回给前端的一定是安全的数据。另外还有一种解决办法就是在查询数据库的时候就直接把敏感数据给不查询。

        场景3:避免被人攻击,如果你的字段都暴露给别人1.容易被sql注入 2.如果用户表中有某些敏感字段,比如是否是do中字段为memVip(是否是vip字段),那么容易遭到别人攻击,直接修改该字段的值。那么可以使用dto,dto中可以使用任意字符接受,例如dto中用vip字段接受参数,那么我相信基本别人是猜不出你数据库中实际是什么字段

BeanUtils是什么?

这是一个关于dto与do互相转换的一个工具类

关于BeanUtils与set、get的区别

先看下代码

List<ShopInDto> list = new ArrayList<>();

// 1.模式数据
for (int i = 0;i<1000000;i++){
    ShopInDto shopInDto = new ShopInDto();
    shopInDto.setRevision(1 + i);
    shopInDto.setShopAd("ad"+ i);
    shopInDto.setShopAddress("address"+ i);
    shopInDto.setShopArea("area"+ i);
    shopInDto.setShopBus("bus"+ i);
    shopInDto.setShopBusinessHours("123"+ i);
    shopInDto.setShopEmail("111"+ i);
    list.add(shopInDto);
}

// 2.利用BeanUtils
Long long1 = System.currentTimeMillis();
for (ShopInDto shopInDto:list) {
    BeanUtils.copyProperties(shopInDto, ShopDo.class);
}
Long long2 = System.currentTimeMillis();
System.out.println("BeanUtils时间:"+ (long2 - long1) + "毫秒");

// 3.利用get和set来赋值
Long long3 = System.currentTimeMillis();
for (ShopInDto shopInDto:list) {
    ShopDo shopDo = new ShopDo();
    shopDo.setRevision(shopInDto.getRevision());
    shopDo.setShopAd(shopInDto.getShopAd());
    shopDo.setShopAddress(shopInDto.getShopAddress());
    shopDo.setShopArea(shopInDto.getShopArea());
    shopDo.setShopBus(shopInDto.getShopBus());
    shopDo.setShopBusinessHours(shopInDto.getShopBusinessHours());
    shopDo.setShopEmail(shopInDto.getShopEmail());
}
Long long4 = System.currentTimeMillis();
System.out.println("set和get时间:"+ (long4 - long3) + "毫秒");
循环1次
BeanUtils时间:447毫秒
set和get时间:1毫秒

循环10次
BeanUtils时间:409毫秒
set和get时间:1毫秒

循环100次
BeanUtils时间:404毫秒
set和get时间:1毫秒

循环1000次
BeanUtils时间:410毫秒
set和get时间:3毫秒

循环10000
BeanUtils时间:446毫秒
set和get时间:5毫秒

循环100000
BeanUtils时间:417毫秒
set和get时间:12毫秒

循环1000000
BeanUtils时间:2902毫秒
set和get时间:303毫秒

以上测试结果仅供参考,但一点可以明确看出的是,在使用set、get的方法时会比使用BeanUtils工具类效率更快。

总结:小项目推荐使用BeanUtils工具类进行转换,开发效率较快。如果访问量会大的项目,那么还是推荐乖乖的使用set、get来写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值