mybatis dynamic-sql如下:
python setup.py egg_info failed with error code 1 windows
如何在jooq中实现?
我在jooq中有以下SQL如何实现?
根据表resource_id,sys_role_resource,sys_user_role
查询用户的权限<select id="queryList" resultType="io.renren.entity.SysMenuEntity">
select m.*,(select p.name from sys_menu p where p.menu_id = m.parent_id) as parentName
from sys_menu m
<choose>
<when test="sidx != null and sidx.trim() != ''">
order by m.${sidx} ${order}
</when>
<otherwise>
order by m.order_num asc
</otherwise>
</choose>
<if test="offset != null and limit != null">
limit #{offset}, #{limit}
</if>
</select>
答案 0 :(得分:0)
使用jOOQ,动态SQL非常简单。 jOOQ手册中的整个部分专门用于它: https://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql
基本上,您需要了解在jOOQ对象上调用的每个方法都会生成一种SQL 表达式(a QueryPart
),可以将其分配给局部变量和用于组成复杂的动态SQL语句。或者,您不会将这些表达式分配给局部变量并直接内联它们。它取决于你。
在您的情况下,我假设您已使用jOOQ code generator生成SYS_MENU
表:
// Assuming these imports:
import static org.jooq.impl.DSL.*;
import static com.example.generated.Tables.*;
// And then...
SysMenu m = SYS_MENU.as("m");
SysMenu p = SYS_MENU.as("p");
DSL.using(configuration)
.select(m.fields())
.select(field(select(p.NAME).from(p).where(p.MENU_ID.eq(m.PARENT_ID))).as("parentName"))
.from(m)
.orderBy(
sidx != null && sidx.trim() != ""
? m.field(sidx).sort("desc".equals(order) ? SortOrder.DESC : SortOrder.ASC)
: m.ORDER_NUM.asc())
.limit(offset != null ? offset : 0, limit != null ? limit : Integer.MAX_VALUE)
.fetch();
此查询将1:1转换为jOOQ
SysUserRole t1 = SysUserRole.as("t1");
SysRoleResource t2 = SysRoleResource.as("t2");
SysResource t3 = SysResource.as("t3");
SysResource t4 = SysResource.as("t4");
DSL.using(configuration)
.select(
t4.RESOURCE_ID
t4.NAME,
t4.PARENT_ID,
t4.PERMS,
t4.URL,
field(
select(t3.NAME)
.from(t3)
.where(t3.RESOURCE_ID.eq(t4.PARENT_ID))
)).as("parentName"))
.from(t4)
.whereExists(
select(t2.RESOURCE_ID)
.from(t2)
.whereExists(
select(t1.ROLE_ID)
.from(t1)
.where(t1.USER_ID.eq(1))
)
)
.orderBy(t4.ORDER_NUM.asc())
.fetch();