关于MyBatis的几种通用写法

一,用来循环容器的标签forEach
      forEach元素的属性主要有 : item(集合中元素迭代时的别名),index(元素迭代时的索引),collection,open(常用于where语句中,表示以什么开始,比如以" ("开始),separator(每次进行迭代时的分隔符),close(常用于where语句中,表示以什么结束)
      在使用forEach的时候,一定要注意collection属性是必须指定的,然而,在不同情况下,该属性的值是不同的,主要有以下三种情况:
1,传入的是单参数且参数类型是一个List的时候,collection属性值为list
2,传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3,传入的是多参数,我们就需要把它们封装成一个map了,当然,单参数也可以封装成map,实际上在传入参数的时候,MyBatis里面也会把它封装成一个Map的,map的key就是参数名,collection的值就是传入的List或array对象在自己封装的map里面的key。List实例将会以**“list"作为键,而数组的键将是"array”**

//mapper中我们要为这个方法传递的是一个容器,
//将容器中的元素一个一个的拼接到xml的方法中就要使用这个forEach这个标签了
public List queryById(List
  select * from entity
  where id in
   
        #{userid}
   

二,concat模糊查询

//有时候我们要进行条件查询,但是有几个条件并不是每次都用到,我们可以先通过判断是否拼接到sql语句中

三,choose(when,otherwise)标签
      choose标签按顺序判断其内部when标签中的test条件是否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满足时,则执行otherwise中的sql。类似于java的switch语句,choose为switch,when为case,otherwise则为default

//choose(判断参数)-按顺序将实体类User第一个不为空的属性作为 where条件

    SELECT ST.STUDENT_ID,
    ST.STUDENT_NAME.
    ST.STUDENT_SEX
    FROM STUDENT_TABL ST
    WHERE
    
          ST.STUDENT_NAME LIKE CONCAT('%',#{studentName,jdbcType=VARCHAR}),'%')
    
    
       AND ST.STUDENT_SEX = #{studentSex,jdbcType=INTEGER} 
    

      如果上面这个例子的参数studentName为null,将不会进行STUDENT_NAME列的判断,则会直接导致**“WHERE AND” 关键字多余**的错误SQL,所以我们得用where标签解决,where标签如果知道有返回值的话,它就插入一个"where"。如果标签返回的内容是以AND或OR开头的,则它会剔除掉

//上面例子修改为如下


你可能感兴趣的:(web后端,mybatis,ssm)