JAVA后台业务实现去重

不使用Mysql的DISTINCT,在后台业务实现去重

在数据俩非常大的情况下,使用Mysql的DISTINCT,会对查询造成非常大的影响
所以需要在后台实现去重,方法如下:

去重,首先想到的是使用Set集合,
但有主键id的情况下,需要在实体类中重写equal()和hashCode()方法

数据库信息:
JAVA后台业务实现去重_第1张图片
实体类(省略get set方法):

	private Integer id;

    private String sex;

    private String project;

    private String name;


    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", sex='" + sex + '\'' +
                ", project='" + project + '\'' +
                ", name='" + name + '\'' +
                '}';
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof User)) {
            return false;
        }
        User user = (User) o;
        return Objects.equals(getSex(), user.getSex()) &&
                Objects.equals(getProject(), user.getProject()) &&
                Objects.equals(getName(), user.getName());
    }


    @Override
    public int hashCode() {
        return Objects.hash(getSex(), getProject(), getName());
    }

业务层(使用set实现去重):

public HashSet selectAll() {
        long start = System.currentTimeMillis();
        List user = null;
        HashSet set =null;
        try {
            user = returnFixedSex.ReturnFixedBySelectAll();
            long end = System.currentTimeMillis();
            LOGGER.info("查询全部数据完成,共计消耗时间:" + (end - start) / 1000);
            set=new HashSet<>();
            for (User user1 : user) {
                set.add(user1);
            }
        } catch (Exception fullMessage) {
            fullMessage.printStackTrace();
            LOGGER.error("数据查询失败", fullMessage);
        }
        return set;
    }

至此,使用Java后台实现去重,测试返回信息如下:
JAVA后台业务实现去重_第2张图片

你可能感兴趣的:(Java,Java后台实现去重)