跳至主要內容

动态表名

xuejmnet大约 2 分钟

动态表名

easy-query针对分表对象目前已经支持了动态表名的处理,但是后续会将这一部分全部简化掉让用户无感。

api

方法参数返回描述
asTable(String tableName)Stringthis设置最近表名名称
asTable(Function<String,String> tableNameAs)Function<String,String>this设置最近表名名称
  • asTable(String tableName)将当前表达式最近的一张表的表名修改成tableName,如果当前最近的表是正常的数据库表名,那么直接将表名改写,如果当前最近的表是匿名表比如嵌套queryable的表那么将alias改成对应的表名
  • asTable(Function<String,String> tableNameAs)将当前表达式最近的一张表的表名修改成tableNameAs返回的表名,如果当前最近的表是正常的数据库表名,那么直接将表名改写,如果当前最近的表是匿名表比如嵌套queryable的表那么将alias改成对应的表名
  • asTable(Function<String,String> tableNameAs)其中对应的参数是一个lambda表达式入参为现有表名,返回参数为最终确定的表名内部可以通过复杂计算甚至远程rpc调用都可以

案例

List<BlogEntity> blogEntities = easyQuery.queryable(BlogEntity.class)
                .asTable(a -> "aa_bb_cc")
                .where(o -> o.eq(BlogEntity::getId, "123")).toList();


==> Preparing: SELECT t.`id`,t.`create_time`,t.`update_time`,t.`create_by`,t.`update_by`,t.`deleted`,t.`title`,t.`content`,t.`url`,t.`star`,t.`publish_time`,t.`score`,t.`status`,t.`order`,t.`is_top`,t.`top` FROM aa_bb_cc t WHERE t.`deleted` = ? AND t.`id` = ?
==> Parameters: false(Boolean),123(String)
<== Total: 0



List<BlogEntity> blogEntities = easyQuery.queryable(BlogEntity.class)
                .asTable(a->{
                    if("t_blog".equals(a)){
                        return "aa_bb_cc1";
                    }
                    return "xxx";
                })
                .where(o -> o.eq(BlogEntity::getId, "123")).toList();


==> Preparing: SELECT t.`id`,t.`create_time`,t.`update_time`,t.`create_by`,t.`update_by`,t.`deleted`,t.`title`,t.`content`,t.`url`,t.`star`,t.`publish_time`,t.`score`,t.`status`,t.`order`,t.`is_top`,t.`top` FROM aa_bb_cc1 t WHERE t.`deleted` = ? AND t.`id` = ?
==> Parameters: false(Boolean),123(String)
<== Total: 0




List<BlogEntity> x_t_blog = easyQuery
                .queryable(Topic.class)
                .asTable(o -> "t_topic_123")
                .innerJoin(BlogEntity.class, (t, t1) -> t.eq(t1, Topic::getId, BlogEntity::getId))
                .asTable("x_t_blog")
                .where((t, t1) -> t1.isNotNull(BlogEntity::getTitle).then(t).eq(Topic::getId, "3"))
                .select(BlogEntity.class, (t, t1) -> t1.columnAll()).toList();

==> Preparing: SELECT t1.`id`,t1.`create_time`,t1.`update_time`,t1.`create_by`,t1.`update_by`,t1.`deleted`,t1.`title`,t1.`content`,t1.`url`,t1.`star`,t1.`publish_time`,t1.`score`,t1.`status`,t1.`order`,t1.`is_top`,t1.`top` FROM t_topic_123 t INNER JOIN x_t_blog t1 ON t1.`deleted` = ? AND t.`id` = t1.`id` WHERE t1.`title` IS NOT NULL AND t.`id` = ?
==> Parameters: false(Boolean),3(String)
<== Total: 0
上次编辑于:
贡献者: Hoysing