上都海奶茶馆 发表于 2018-10-14 12:16:13

mybatis动态SQL语句

  一 if标签

    SELECT * from STUDENT_TBL ST
  
  WHERE ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')
  
  
  二 where标签

    SELECT * from STUDENT_TBL ST
  
  
  ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')
  
  
  AND ST.STUDENT_SEX = #{studentSex}
  
  
  
  如果它包含的标签中有返回值的话就插入一个where。此外如果标签返回的内容是以AND或OR开头的,则它会剔除掉。
  三 set 标签
  使用set+if标签修改后,如果某项为null则不进行更新,而是保持数据库原值

    UPDATE STUDENT_TBL
  
  
  STUDENT_TBL.STUDENT_NAME = #{studentName},
  
  
  STUDENT_TBL.STUDENT_SEX = #{studentSex},
  
  
  STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},
  

    STUDENT_TBL.CLASS_ID = #{classEntity.classID}
  
  
  WHERE STUDENT_TBL.STUDENT_ID = #{studentID};
  
  四 trim标签
  trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。
  where例子的等效trim语句

    SELECT * from STUDENT_TBL ST
  
  
  ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')
  
  
  AND ST.STUDENT_SEX = #{studentSex}
  
  
  
  set例子的等效trim语句

    UPDATE STUDENT_TBL
  
  
  STUDENT_TBL.STUDENT_NAME = #{studentName},
  
  
  STUDENT_TBL.STUDENT_SEX = #{studentSex},
  
  
  STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},
  

    STUDENT_TBL.CLASS_ID = #{classEntity.classID}
  
  
  WHERE STUDENT_TBL.STUDENT_ID = #{studentID};
  
  五 choose (when, otherwise)
  有时候并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行otherwise中的sql。类似于Java 的switch语句,choose为switch,when为case,otherwise则为default。

    SELECT * from STUDENT_TBL ST
  
  
  
  ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')
  
  
  AND ST.STUDENT_SEX = #{studentSex}
  
  
  AND ST.STUDENT_BIRTHDAY = #{studentBirthday}
  

    AND ST.CLASS_ID = #{classEntity.classID}
  
  
  
  
  
  六 foreach
  对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。List实例将使用“list”做为键,数组实例以“array”做为键。
  1 参数为list实例的写法
  SqlMapper.xml

    SELECT * FROM STUDENT_TBL ST
  WHERE ST.CLASS_ID IN
  
  #{classList}
  
  
  Java

  List>  classList.add("20000002");
  classList.add("20000003");
  List studentList = studentMapper.getStudentListByClassIDs(classList);
  for(StudentEntity entityTemp : studentList){
  System.out.println(entityTemp.toString());
  }
  2 参数为Array实例的写法
  SqlMapper.xml

    SELECT * FROM STUDENT_TBL ST
  WHERE ST.CLASS_ID IN
  
  #{ids}
  
  
  Java

  String[]>  ids = "20000002";
  ids = "20000003";
  List studentList = studentMapper.getStudentListByClassIDs(ids);
  for(StudentEntity entityTemp : studentList){
  System.out.println(entityTemp.toString());
  }
  原帖地址:http://blog.csdn.net/ask_rent/article/details/6320326

页: [1]
查看完整版本: mybatis动态SQL语句