sql语句生成工具

完全出于兴趣,写了一个sql语句生成工具。
项目的源码地址在github,github项目地址https://github.com/Zmyk/sql-generate-util,有兴趣的大佬可以看一下源码,欢迎大佬点评指导。
使用示例如下:

public class QuerySqlTest {

    @Test
    public void test01() throws Exception {
        List<Select> selects = Arrays.asList(
                Select.SelectBuilder.builder().table("user").column("name").alias("用户名").build(),
                Select.SelectBuilder.builder().table("user").column("salary").alias("薪资").columnOper(ColumnOper.SUM).build(),
                Select.SelectBuilder.builder().table("department").column("name").alias("部门").build(),
                Select.SelectBuilder.builder().table("role").column("name").alias("角色").build()
        );
        //构造from
        From from = From.FromBuilder.builder().table("user").tableAlias("u").build().leftJoin(
                From.FromBuilder.builder().table("department").tableAlias("d1").build().on(
                        On.OnBuilder.builder().table1("u").column1("id").condOper(CondOper.EQUAL).table2("d1").column2("user_id").build()
                                .or(On.OnBuilder.builder().table1("u").column1("name").condOper(CondOper.EQUAL).table2("d1").column2("user_name").build())
                                .andPart(On.OnBuilder.builder().table1("u").column1("col1").condOper(CondOper.EQUAL).table2("d1").column2("col2").build())
                )
        ).leftJoin(From.FromBuilder.builder().table("role").tableAlias("r1").build().on(On.OnBuilder.builder().table1("u").column1("id").condOper(CondOper.EQUAL).table2("r1").column2("user_id").build()));
        //构造where
        Where where = Where.WhereBuilder.builder().table("user").column("id").condOper(CondOper.EQUAL).value(123456789).build()
                .or(Where.WhereBuilder.builder().table("department").column("id").condOper(CondOper.EQUAL).value("de456852").build())
                .partAnd(Where.WhereBuilder.builder().table("user").column("create_time").condOper(CondOper.GREATERTHANOREQUAL).value(new Date()).build());
        //构造group by

        List<GroupBy> groupBys = Arrays.asList(
                GroupBy.GroupByBuilder.builder().table("user").column("id").build(),
                GroupBy.GroupByBuilder.builder().table("role").column("id").build()
        );
        //构造having
        Having having = Having.HavingBuilder.builder().table("user").column("age").condOper(CondOper.GREATERTHAN).value(20).build()
                .and(Having.HavingBuilder.builder().table("user").column("gender").condOper(CondOper.EQUAL).value("女").build())
                .partOr(Having.HavingBuilder.builder().table("user").column("gg").condOper(CondOper.ISNULL).build());
        //构造order by
        List<OrderBy> orderBys = Arrays.asList(
                OrderBy.OrderByBuilder.builder().table("user").column("id").order(Order.ASC).build(),
                OrderBy.OrderByBuilder.builder().table("department").column("name").order(Order.ASC).build(),
                OrderBy.OrderByBuilder.builder().table("role").column("id").order(Order.DESC).build()
        );
        QuerySql build = QuerySql.QuerySqlBuilder.builder().selects(selects).from(from).where(where).groupBys(groupBys).having(having).orderBys(orderBys).build();
        System.out.println(QuerySqlParser.builder().parse(build));
    }

    @org.junit.Test
    public void test02() throws Exception {
        RuleNode ruleNode = new RuleNode("((0) or (1)) and ((2) or (3) or (4))");
        HashMap<String,Where> map = new HashMap<>();
        map.put("0", Where.WhereBuilder.builder().table("0").column("0").condOper(CondOper.EQUAL).value("0").build());
        map.put("1", Where.WhereBuilder.builder().table("1").column("1").condOper(CondOper.EQUAL).value("1").build());
        map.put("2", Where.WhereBuilder.builder().table("2").column("2").condOper(CondOper.EQUAL).value("2").build());
        map.put("3", Where.WhereBuilder.builder().table("3").column("3").condOper(CondOper.EQUAL).value("3").build());
        map.put("4", Where.WhereBuilder.builder().table("4").column("4").condOper(CondOper.EQUAL).value("4").build());
        Where where = RuleUtil.handler(ruleNode, map);
        From from = From.FromBuilder.builder().table("s").build();
        QuerySql build = QuerySql.QuerySqlBuilder.builder().from(from).where(where).build();
        System.out.println(QuerySqlParser.builder().parse(build));

    }

    @org.junit.Test
    public void test03() throws Exception {
        Where where = Where.WhereBuilder.builder().table("user").column("id").condOper(CondOper.EQUAL).value(123456789).build()
                .or(Where.WhereBuilder.builder().table("department").column("id").condOper(CondOper.EQUAL).value("de456852").build())
                .partAnd(Where.WhereBuilder.builder().table("user").column("create_time").columnOper(ColumnOper.DATE_FORMAT).condOper(CondOper.GREATERTHANOREQUAL).value(new DateTime()).build());
        From from = From.FromBuilder.builder().table("s").build();
        QuerySql build = QuerySql.QuerySqlBuilder.builder().from(from).where(where).build();
        System.out.println(QuerySqlParser.builder().parse(build));
    }

    @org.junit.Test
    public void test04() throws Exception {
        Where where = Where.WhereBuilder.builder().table("user").column("id").condOper(CondOper.EQUAL).value(123456789).build()
                .or(Where.WhereBuilder.builder().table("department").column("id").condOper(CondOper.EQUAL).value("de456852").build())
                .partAnd(Where.WhereBuilder.builder().table("user").column("create_time").condOper(CondOper.GREATERTHANOREQUAL).value(new DateTime()).build());
        From from = From.FromBuilder.builder().table("s").build();
        QuerySql build = QuerySql.QuerySqlBuilder.builder().from(from).where(where).build();
        System.out.println(QuerySqlParser.builder().parse(build));
    }

    @org.junit.Test
    public void test05() throws Exception {
        Where where = Where.WhereBuilder.builder().table("user").column("id").condOper(CondOper.EQUAL).value(123456789).build()
                .or(Where.WhereBuilder.builder().table("department").column("id").condOper(CondOper.EQUAL).value("de456852").build())
                .partAnd(Where.WhereBuilder.builder().table("user").column("create_time").condOper(CondOper.ISNULL).build());
        From from = From.FromBuilder.builder().table("s").build();
        QuerySql build = QuerySql.QuerySqlBuilder.builder().from(from).where(where).build();
        System.out.println(QuerySqlParser.builder().parse(build));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值