2021-07-29 杂七杂八

34 阅读2分钟

在对象1 与 对象2 赋值的过程中,除了用get,set方法之外,我们还有另外一种更简单的方式,就是用工具类去实现各个属性的赋值,我一般使用的工具类是hutool的,然后其实,spring的工具类中也是有的,下面来简单介绍下:

例如两个类
A类中有 String name; Integer age; 
B类中有 String name; String age;
第一种 spring
在 org.springframework.bean.BeanUtils这个包中的 BeanUtils 工具类,可以实现对象与对象之间的赋值,有个小坑。简单介绍下:

如上两个A,B类,我想将B类中的值赋值给A,当调用BeanUtils.copyProperties("源数据","目标数据"); 即 BeanUtils.copyProperties(A,B);
此时 name属性没有问题,但是age 的值会赋不过去,但是也不会报错。亲自采坑总结


第二种 hutool
它是这个工具类众多工具的一个叫做BeanUtil 比之前只少了个s 而且用法完全一致。如上两个A,B类,我想将B类中的值赋值给A,当调用BeanUtils.copyProperties("源数据","目标数据"); 即 BeanUtils.copyProperties(A,B);
此时, name ,age属性都可以完美赋值成功, 即他可以跨越属性的类型赋值,只要正确就可以.

此外两种工具类都提供的错误兼容,即可以增加入参,忽略错误的赋值,如:
BeanUtil.copyProperties(A, B, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
即可以忽略错误的属性不进行赋值

然后接下来说一个项目中实际遇到的问题:
要求,数据库中的数据,要用通过前端传入字段,顺序,按照这个要求,返回列表,而其中有的字段是string类型

由于是string 类型,如汉字等,排序就会有问题,解决办法是将字段转换为 gbk 可以解决,进行排序.。
然后是,sql语句编写,你要根据传入字段进行排序条件的编写,我们用的是mybatis-plus,可以在xml写sql语句解决。我的想法是这样的,然而,我看到了一个大佬是这样解决的:

1 接参实体类继承了com.baomidou.mybatisplus.extension.plugins.pagination;中的的page对象
2 调用这个对象中的setOrders方法,设置排序字段,以及排序字段的顺序
3 编写sql语句的时候,甚至可以忽略后边排序的sql,因为它会自动拼接上

具体实现

    public Page<BasicArea> getPage(SearchAreaBo searchBo) {
        String userId = CurrentUserUtil.currentUserId();

        BasicAreaQuery areaQuery = new BasicAreaQuery(searchBo);// 继承了mybatisplus 的page对象,并调用page的构造方法,将分页号以及分页条数传入

        if (StringUtils.isBlank(searchBo.getOrderBy())) {
            //ua.sort,ua.create_time desc
            areaQuery.setOrders(Arrays.asList(OrderItem.asc("ua.sort"), OrderItem.desc("ua.create_time")));
        } else {
            String orderBy;
            if (searchBo.getOrderBy().equals("name")) {
                orderBy = "convert(ua.name using gbk)";
            } else if (searchBo.getOrderBy().equals("parentName")) {
                orderBy = "convert(parent.name using gbk)";
            } else if ("create_user".equals(searchBo.getOrderBy())) {
                orderBy = "convert(create_user_name using gbk)";
            } else {
                orderBy = "ua." + searchBo.getOrderBy();
            }
            areaQuery.setOrders(Collections.singletonList(searchBo.getIsAsc() ? OrderItem.asc(orderBy) : OrderItem.desc(orderBy)));
        }
        Set<String> ids = getRoleAreaIds(userId, searchBo.getParentId());

        if (CollectionUtils.isEmpty(ids)) {
            return new Page<>();
        }

        if (CollectionUtils.isNotEmpty(searchBo.getAreaIds())) {
            ids = new HashSet<>(searchBo.getAreaIds());
            areaQuery.setKeyWord(null);
        }

        areaQuery.setIds(ids);
        return baseMapper.selectPage(areaQuery);// 编写正常的sql语句(忽略排序问题)
    }

本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。