美文网首页
mybatis的xml文件的标签详解

mybatis的xml文件的标签详解

作者: AlanTuringWu | 来源:发表于2022-03-21 00:37 被阅读0次

    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>
    

    相关文章

      网友评论

          本文标题:mybatis的xml文件的标签详解

          本文链接:https://www.haomeiwen.com/subject/ccdzdrtx.html