mybatis的xml中的标签详解

2022-07-08 09:38:55

Mybatis

#{}和${}和区别

#{}:
  - mybatis在处理的时候会将#{username} 处理成?,用于参数传递时占位
  - 当传入的参数是字符串时,会自动加上''将传递的值括起来
  - mapper接口方法中的参数与xml文件中是按照参数位置索引对应的,不是根据参数的名称,但是建议最好一致。
  
${}:
  - 字符串拼接
  - mapper接口方法中的参数与xml文件中是按照参数位置索引对应的,不是根据参数的名称,但是建议最好一致。
  - mybatis在处理的时候会直接拼接在传递的sql上,不会生成占位的?
  - 可以用于创建统一的方法,比如对所有表按照id查询。
    - select * from ${tableName} where id = #{id}   -----> mybatis操作后:select * from student where id = '7dsj'

mybatis获取方法参数

单值:
  - 可以通过#{}或${}中间可以是任意名称,但是需要注意${}的具体使用场景。
  
多个单值:
  - mybatis会将所有参数放在一个map中,以两种方式存储
    - 以arg0,arg1...为键,参数为值。
    - 以param1,param2...为键,参数为值。
    - 两种方式目前看来只有索引位起始有差异
    - 还是通过#{}或${}以键来访问对应的值
    
Map(对象同理,只不过获取的是属性):
  - 通过#{}或${}以map中的键的方式来获取值

@Param注解
  - 命名参数
  - 实际上取代了arg0,arg1,...的访问方式,将其名称改为了注解里设置的值,还是可以继续用param1,param2,...
  
总结:
  - 其实一共可以归结为2种情况
  - 传递的参数是对象或者Map时,或者值时就用属性名
  - 其他情况可以用@Param注解来指定

动态SQL

if:
<if test = "属性名 != null and 属性名 != ''">
    字段名 = #{属性名}
</if>
注意:and的问题

where:用来解决没有条件时,忽略where和解决拼接时产生的多余and或者or等此类的情况(只能去掉前面的and或or)
<wherr>
</where>

trim:
  - prefix | suffix 将trim标签中内容前面或后面添加指定内容
  - prefixOverrides | suffixOverrides 将trim标签中内容前面或者后面的指定内容去掉
  - 若标签中没有内容,trim标签也不会起作用,where也不会生成
<trim prefix = "where" suffixOverrides = "and | or">
</trim>

choose、when、otherwise:相当于if...else if...else
<where>
  <choose>
      <when test = "属性名 != null and 属性名 != ''">
         字段名 = #{属性名}
      </when>
      <when test = "属性名 != null and 属性名 != ''">
         字段名 = #{属性名}
      </when>
      ...
      <otherwise>
         字段名 = xxxx
      </otherwise>
  </choose>
</where>

foreach:
  - collection 集合类型
    - 数组用array或者arg0,如果使用@Param指定了名称,也可用自定义的名称
    - list用arg0、collection、list。如果使用@Param指定了名称,也可用自定义的名称
  - item 循环遍历时的变量名称
  - separator 循环体之间的分隔符
  - open 内容的开始符号
  - close 内容的结束符号
<foreach collection = "array" item = "id" separator = "," open = "(" close = ")">
   #{id}
</foreach>
<foreach collection = "list" item = "emp" separator = ",">
   (#{emp.name},#{emp.age},#{emp.sex})
</foreach>

sql:
  - 用来提取公共常用条件,比如经常查询的字段
  - 定义:<sql id = "commonSelect">id,name,sex,address</sql>
  - 使用:<include refid = "commonSelect"></include>
  • 作者:TuringWu
  • 原文链接:https://blog.csdn.net/m0_37958342/article/details/123625404
    更新时间:2022-07-08 09:38:55