mybatis/mybatis-plus 子查询实现 涉及到in、exist操作

在开发时候,经常会用到涉及到in exist 等子查询。

myabtis

①以注解的方式进行操作

@Select("select column_1 from table_name where column_2 in (${column_parms}) ")

public List getNames(@Parms("column_parms") String column_parms)
@Select("select column_1 from table_name 
  
  
     column_2  in 
    
       #{item}
    
  


public List getNames(@Parms("column_parms") List column_parms)

②以xml方式

mapper.xml文件

    
select column_1 from table_name 
  
  
     column_2  in 
    
       #{item}
    
  

IService 文件

List getNames(@Param("column_parms") String column_parms)

List getNames(@Param("column_parms")List column_parms)

仔细观察上面代码,只有两个地方是不同的:

${}取值  String参数         ${} 这种是取值以后再去编译SQL语句

#{}取值  List参数             #{} 这种取值是编译好SQL语句再取值  

 

但是如果在in里面又涉及到子查询,那么只能用${}取值

eg:select column_1 from table_name1 where column_2 in

( select column_3 from table_name2 where column_4 in(result集合) )

这种的话是无法使用foreach 进行操作的 ,因为对table_name1 表的in操作 字段属性 这个参数是无法取到的,因此在执行的会报空值针异常错误。

正确的写法:

  @Delete("DELETE FROM  HJ_GG_HXY_QXGXB WHERE HQXGXB_HYID IN " +
          "( SELECT HJSGXB_HYID FROM GG_HXY_JSGXB WHERE HJSGXB_HXID " +
          "  IN (${ids}) " +
          ")")
  void del(@Param("ids") String ids);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java,spring,mybatis,mybatis,in子查询)