繁体   English   中英

如何使用 Query、QueryBuilder 和 Test 类在 java 项目的输出中摆脱打印对象内存位置?

[英]How to get rid of printing object memory location in output in java project with Query, QueryBuilder and Test classes?

在这个 java 项目中,我有三个名为 Query、QueryBuilder 和 Test 的类,它们由 main 方法组成。

查询.java

public class Query {
    private String SELECT;
    private String FROM;
    private String WHERE;
    private String ORDERBY;

    public void printQuery() {
        if (WHERE == null && ORDERBY == null)
            System.out.println("SELECT " + SELECT + "\nFROM " + FROM + "\n");

        if (WHERE == null && ORDERBY != null)
            System.out.println("SELECT " + SELECT + "\nFROM " + FROM + "\nORDER BY " + ORDERBY + "\n");

        if (WHERE != null && ORDERBY == null)
            System.out.println("SELECT " + SELECT + "\nFROM " + FROM + "\nWHERE " + WHERE + "\n");

        if (WHERE != null && ORDERBY != null)
            System.out.println("SELECT " + SELECT + "\nFROM " + FROM + "\nWHERE " + WHERE + "\nORDER BY " + ORDERBY + "\n");
    }

    public String getSELECT() {
        return SELECT;
    }

    public void setSELECT(String SELECT) {
        this.SELECT = SELECT;
    }

    public String getFROM() {
        return FROM;
    }

    public void setFROM(String FROM) {
        this.FROM = FROM;
    }

    public String getWHERE() {
        return WHERE;
    }

    public void setWHERE(String WHERE) {
        this.WHERE = WHERE;
    }

    public String getORDERBY() {
        return ORDERBY;
    }

    public void setORDERBY(String ORDERBY) {
        this.ORDERBY = ORDERBY;
    }
}

查询生成器

public class QueryBuilder {
    private Query query;

    public QueryBuilder() {
        query = new Query();
    }

    public QueryBuilder setSelect(String selectString) {
        query.setSELECT(selectString);
        return this;
    }

    public QueryBuilder setFrom(String fromString) {
        query.setFROM(fromString);
        return this;
    }

    public QueryBuilder setWhere(String whereString) {
        query.setWHERE(whereString);
        return this;
    }

    public QueryBuilder setOrderBy(String orderByString) {
        query.setORDERBY(orderByString);
        return this;
    }

    public Query build() {
        query.printQuery();

        if (query.getFROM() == null && query.getSELECT() == null)
            throw new IllegalStateException("Query must have a SELECT and a FROM");

        if (query.getSELECT() == null)
            throw new IllegalStateException("Query must have a SELECT");

        if (query.getFROM() == null)
            throw new IllegalStateException("Query must have a FROM");

        return query;
    }
}

测试.java

public class Test {
    public static void main(String[] args) {
        Query query1 = new QueryBuilder().setSelect("name").setFrom("student").build();
        System.out.println(query1.toString());

        Query query2 = new QueryBuilder().setSelect("name").setFrom("student").setWhere("name = 'Name1'").build();
        System.out.println(query2.toString());

        Query query3 = new QueryBuilder().setSelect("name").setWhere("name = 'Name1'").build();
        System.out.println(query3.toString());
    }
}

输出 - [1]: https : //i.stack.imgur.com/TNadC.png

SELECT name
FROM student

Query@2a139a55
SELECT name
FROM student
WHERE name = 'Name1'

Query@15db9742
SELECT name
FROM null
WHERE name = 'Name1'

Exception in thread "main" java.lang.IllegalStateException: Query must have a FROM
    at QueryBuilder.build(QueryBuilder.java:38)
    at Test.main(Test.java:9)

我需要摆脱在输出中打印对象内存位置。 (Query@2a139a55 和 Query@15db9742)。

提前致谢!

覆盖toString()方法而不是定义一个printQuery()方法:

@Override
public String toString() {
    if (WHERE == null && ORDERBY == null)
        return "SELECT " + SELECT + "\nFROM " + FROM + "\n";

    if (WHERE == null && ORDERBY != null)
        return "SELECT " + SELECT + "\nFROM " + FROM + "\nORDER BY " + ORDERBY + "\n";

    if (WHERE != null && ORDERBY == null)
        return "SELECT " + SELECT + "\nFROM " + FROM + "\nWHERE " + WHERE + "\n";

    if (WHERE != null && ORDERBY != null)
        return "SELECT " + SELECT + "\nFROM " + FROM + "\nWHERE " + WHERE + "\nORDER BY " + ORDERBY + "\n";

    // should never happen
    throw new IllegalStateException("Unhandled case");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM