根据查询参数list动态拼接SQL

业务场景,根据查询参数List,动态拼接SQL语句。


例如:在工具中可执行的sql如下:

select a0.sku_id from 
(select sku_id from wms_sku_attribute where attribute_list_id = '7')a0 inner join
(select sku_id from wms_sku_attribute where attribute_list_id = '11')a1 on a0.sku_id = a1.sku_id inner join
(select sku_id from wms_sku_attribute where attribute_list_id = '13')a2 on a0.sku_id = a2.sku_id 


可能有a0  --   aN 个查询语句。


StringBuilder builder =new StringBuilder();
sql.append("select a0.sku_id from ");
for(int i=0;i<list.size();i++){
   builder.append("(select sku_id from wms_sku_attribute where attribute_list_id = '"+list.get(i)+"')a"+i);
   if(i==0){
      sql.append(" inner join");
   }else {
      sql.append(" on a0.sku_id = a"+i+".sku_id inner join");
   }
}
String sql= builder.toString();
sql= sql.substring(0,sql.length()-("inner join").length());

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MybatisPlus是一款优秀的ORM框架,它提供了丰富的API,可以方便地进行动态SQL拼接。在使用MybatisPlus进行动态SQL拼接时,我们可以使用Wrapper类来构建查询条件,例如: ``` QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("name", "张三"); wrapper.gt("age", 18); wrapper.like("email", "@qq.com"); List<User> userList = userMapper.selectList(wrapper); ``` 在上面的代码中,我们使用QueryWrapper类来构建查询条件,eq方法表示等于,gt方法表示大于,like方法表示模糊查询。最后,我们调用selectList方法执行查询,并将结果封装成List<User>对象返回。 除了QueryWrapper类,MybatisPlus还提供了LambdaQueryWrapper类,它可以使用Lambda表达式来构建查询条件,例如: ``` LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>(); lambdaWrapper.eq(User::getName, "张三"); lambdaWrapper.gt(User::getAge, 18); lambdaWrapper.like(User::getEmail, "@qq.com"); List<User> userList = userMapper.selectList(lambdaWrapper); ``` 在上面的代码中,我们使用LambdaQueryWrapper类来构建查询条件,eq方法、gt方法、like方法都可以使用Lambda表达式来表示。最后,我们调用selectList方法执行查询,并将结果封装成List<User>对象返回。 总之,MybatisPlus提供了丰富的API,可以方便地进行动态SQL拼接,让我们的开发更加高效、便捷。 ### 回答2: MybatisPlus是Mybatis的增强插件,它的主要功能是通过一些简单的配置,减少Mybatis的样板代码,提高开发效率。其中最常用的功能之一是动态拼接SQL动态拼接SQL是MybatisPlus强大的特性之一,它可以根据不同的条件来动态组合SQL语句,以适应不同的业务需求。 MybatisPlus提供了多种方法来实现动态拼接SQL,最常用的方法是使用Wrapper。Wrapper是一个具有强大功能的接口,可以用于拼接SQL的各个部分,例如WHERE子句、AND/OR条件、ORDER BY子句等。 例如,我们需要查询一个学校中所有年龄大于20岁的学生,代码如下: ``` QueryWrapper<Student> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("school_id", 1001) .gt("age", 20); List<Student> studentList = studentMapper.selectList(queryWrapper); ``` 在这个例子中,我们使用了QueryWrapper来动态拼接SQL。首先我们创建了一个QueryWrapper对象,然后使用eq方法和gt方法来设置条件。 其中eq方法用于等值查询,它的参数是数据库表中的列名和要查询的值。gt方法用于大于查询,它的参数是数据库表中的列名和要查询的值。 最后,我们使用selectList方法执行该查询并返回结果。 除了上述方法,MybatisPlus还提供了LambdaQueryWrapper和UpdateWrapper等方法,用于更加方便的动态拼接SQL。这些方法可以帮助我们减少编写繁琐的SQL语句的时间和精力,从而提高开发效率。 ### 回答3: Mybatis-Plus是Mybatis的增强版,提供了更多的操作方法、注解等。动态拼接SQL是Mybatis-Plus非常强大的功能之一,允许我们在不写复杂SQL语句的情况下,根据不同的需求动态的生成SQL。 Mybatis-Plus的动态SQL可以分为两种:XML动态SQL和注解动态SQL。 XML动态SQL可以使用if、choose、when、otherwise、foreach等建立一条动态SQL语句,例如: ```xml <select id="getUserListByCondition" resultMap="resultMap"> SELECT * FROM user <where> <if test="name!=null and name!=''"> and name like concat('%',#{name},'%') </if> <if test="age!=null and age!=0"> and age = #{age} </if> <if test="sex!=null and sex!=''"> and sex = #{sex} </if> </where> </select> ``` 在这个例子中,动态拼接了一个where子句,如果参数中包含name、age、sex属性的话,会将相应的条件拼接SQL语句中,达到动态的效果。 注解动态SQL可以使用@SelectProvider、@UpdateProvider、@DeleteProvider、@InsertProvider注解指定提供动态SQL实现的类,并指定类中的方法。例如: ```java @Mapper public interface UserMapper extends BaseMapper<User> { @SelectProvider(type = UserSqlProvider.class, method = "getUserListByCondition") List<User> getUserListByCondition(UserCondition userCondition); } public class UserSqlProvider { public String getUserListByCondition(UserCondition userCondition){ return new SQL() {{ SELECT("*"); FROM("user"); if (userCondition.getName() != null && !userCondition.getName().isEmpty()) { WHERE("name like concat('%',#{name},'%')"); } if (userCondition.getAge() != null && userCondition.getAge() != 0) { WHERE("age = #{age}"); } if (userCondition.getSex() != null && !userCondition.getSex().isEmpty()) { WHERE("sex = #{sex}"); } }}.toString(); } } ``` 在这个例子中,定义了一个UserSqlProvider类,其中getUserListByCondition方法返回一个动态SQL语句。使用注解@SelectProvider指定了提供动态SQL的类和方法,使其成为动态SQL语句的提供者。 总之,动态拼接SQL是Mybatis-Plus的重要功能之一,可以使我们免去写复杂SQL的烦恼,使开发更加快速高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值