使用QueryDsl自连接注意事项

本文介绍了在使用QueryDsl进行数据库操作时如何进行表的自连接查询,特别是在部门表中获取上级部门名称的场景。通过创建Q类并设置别名,实现了根据部门名称模糊匹配并限制查询结果数量的功能。同时,文章强调了别名在自连接查询中的重要性。
摘要由CSDN通过智能技术生成

使用QueryDsl 需要注意的事项:

使用场景:
当一个部门表中需要存入一个上级部门名称时,使用自连接的写法如下:
定义一个Q类,tableAlias -->表的别名(特别重要,如果不使用别名,那么上级部门名称一直存入的时当前部门名称)

public class QDepartment extends EnhancedRelationalPathBase<QDepartment> {
    public static final QDepartment DEPARTMENT = new QDepartment();

    public final NumberPath<Integer> ID = createIntegerCol("ID").asPrimaryKey().build();
    public final StringPath DEPT_NO = createStringCol("DEPT_NO").build();
    public final StringPath DEPT_NAME = createStringCol("DEPT_NAME").build();
    public final NumberPath<Integer> PARENT_DEPT_ID = createIntegerCol("PARENT_DEPT_ID").build();
    public final StringPath SEQUENCE = createStringCol("SEQUENCE").build();
    public final StringPath DEPT_ASSIGNEE_ID = createStringCol("DEPT_ASSIGNEE_ID").build();
    public final StringPath ROOT_DEPARTMENT_ID = createStringCol("ROOT_DEPARTMENT_ID").build();
    public final BooleanPath DELETED = createBooleanCol("DELETED").build();

    public QDepartment() {
        super(QDepartment.class, "AO_67ABB4_DEPARTMENT");
    }

    public QDepartment(String tableAlias){
        super(QDepartment.class, "AO_67ABB4_DEPARTMENT",tableAlias);
    }
}

QueryDsl 的部门表自连接 的写法如下:

public List<DepartmentBean> findAllDeptByDeptNameLikeInDept(String name) {
        //设置表别名
        QDepartment qDepartment = new QDepartment("qDepartment");
        QDepartment qDepartment1 = new QDepartment("qDepartment1");
        return  databaseAccessor.run(connection -> {
            return connection.query().select(Projections.bean(DepartmentBean.class,
                    qDepartment.DEPT_NAME.as("deptName"),
                    qDepartment.ID.as("id"),
                    qDepartment.PARENT_DEPT_ID.as("parentDeptId"),
                    qDepartment.DEPT_NO.as("deptNo"),
                    qDepartment1.DEPT_NAME.as("parentDeptName")
            ))
                    .from(qDepartment).leftJoin(qDepartment1).on(qDepartment.PARENT_DEPT_ID.eq(qDepartment1.ID)).where(
                            qDepartment.DEPT_NAME.upper().like("%" + name.toUpperCase().replaceAll("_", "\\\\" + "_") + "%")
                                    .and(qDepartment.DELETED.isFalse())
                    ).limit(10).fetch();
        }) ;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值