将内联接转换成mybatisPlus的querywrapper写法

您所在的位置:网站首页 内联函数定义与外联函数定义的混合使用 将内联接转换成mybatisPlus的querywrapper写法

将内联接转换成mybatisPlus的querywrapper写法

2023-05-24 12:02| 来源: 网络整理| 查看: 265

select p.* from t_permission p,t_role_permission rp where p.id = rp.permission_id and rp.role_id = #{role_id}

下面是换一种写法,内联接

使用内联接将上述SQL语句转换为: ```

SELECT p.* FROM t_permission p  INNER JOIN t_role_permission rp ON p.id = rp.permission_id  WHERE rp.role_id = #{role_id}

```  使用INNER JOIN代替WHERE子句中的等于号是内联接的常见写法。它会将操作拆分成两个部分:一部分(INNER JOIN语句)是通过连接表中的列组合而成的新表,而另一部分(WHERE语句)则在新表上应用额外的筛选条件。INNER JOIN和WHERE子句都可以过滤掉原表中的行,但INNER JOIN通常在处理多个表时更为高效。

可以使用Mybatis-Plus提供的QueryWrapper来构建内联接的SQL语句,如下所示: ```

QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.select("t_permission.*")         .from("t_permission")         .innerJoin("t_role_permission on t_permission.id = t_role_permission.permission_id")         .eq("t_role_permission.role_id", role_id); List permissions = permissionService.list(queryWrapper);

``` 以上代码中,我们首先初始化一个QueryWrapper对象,然后通过select方法指定查询的字段,接着使用from方法指定查询的表,再使用innerJoin方法指明内联连接的表及其连接条件。最后,我们使用eq方法查询符合指定条件的结果,并通过permissionService.list(queryWrapper)方法返回查询结果。

使用Lambda表达式将上述QueryWrapper转换为LambdaQueryWrapper可以这样写: ```

LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); lambdaQueryWrapper.select(Permission.class, i -> i.getColumn().startsWith("t_permission"))         .inSql(Permission::getId, "SELECT permission_id from t_role_permission WHERE role_id=" + role_id); List permissions = permissionService.list(lambdaQueryWrapper);

``` 其中,我们创建了一个LambdaQueryWrapper对象,并通过select方法选择查询的字段,第二个参数是一个Lambda表达式,用来过滤列对象。接着,我们使用inSql方法,在LambdaQueryWrapper中嵌入SQL语句,实现了内联连接的查询。最后,我们将LambdaQueryWrapper对象传递给permissionService.list方法,得到查询结果。请注意,在这个示例中,我们使用了inSql方法而不是eq方法,因为这里需要使用内联连接的子查询。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3