MyBatis标签

#基础标签

<!--基础标签-->
    <delete id="" parameterType="" parameterMap="" databaseId="" statementType="" timeout="" flushCache="" lang="" ></delete>
    <insert id="" parameterType="" parameterMap="" databaseId="" statementType="" timeout="" flushCache="" lang="" keyColumn="" keyProperty="" useGeneratedKeys=""></insert>
    <update id="" parameterType="" parameterMap="" databaseId="" statementType="" timeout="" flushCache="" lang="" keyColumn="" keyProperty="" useGeneratedKeys=""></update>
    <select id="" parameterType="" parameterMap="" databaseId="" statementType="" timeout="" flushCache="" lang="" resultType="" resultMap="" resultSetType="" resultSets="" resultOrdered="" useCache="" fetchSize=""></select>

#公共标签属性

  1. id:对应Mapper接口中的方法名。
  2. parameterType:传给此语句的参数类型(全路径名或别名):例如基本数据类型、集合、或对象等。这个属性是可选的,因为 MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数,默认值为 unset。一般来说基本的参数类型在xml中的sql编写不需要额外的指定ParameterType,当然也可以根据实际需要指定。通常有两种场景会经常看到 ParameterType 比如传参为集合Map、Javabean对象。前面的几个case中,也可以都不指定parameterType
  3. parameterMap(属性名-字段名/类型 不一致): 可以用于指定实体类字段属性与数据库字段属性的映射关系(在),通常当我们希望针对某些where条件做一些TypeHandler(类型转换)时使用。比如、对象属性为date,数据库字段为String类型。就可以在TypeHandler调用自定义的类型转换方法。可以和result Map搭配使用
  <parameterMap id="StudentParameterMap" type="Student">
        <parameter property="studentId"   typeHandler="" resultMap="StudentResultMap"   javaType="" jdbcType="" mode="" scale="" ></parameter>
        <parameter property="studentName" typeHandler="" resultMap="StudentResultMap"   javaType="" jdbcType="" mode="" scale="" ></parameter>
        <parameter property="studentAge"  typeHandler="" resultMap="StudentResultMap"   javaType="" jdbcType="" mode="" scale="" ></parameter>
    </parameterMap>
    <resultMap id="StudentResultMap" type="Student">
        <id     column="id"   property="studentId"   javaType="" typeHandler=""  jdbcType=""></id>
        <result column="name" property="studentName" javaType="" typeHandler=""  jdbcType=""></result>
        <result column="age"  property="studentAge"  javaType="" typeHandler=""  jdbcType=""></result>
    </resultMap>
    a. id:调用别名。
    b. type:参数类型。
    c. parameter:参数中的属性。
        c1. property: Java 属性名
        c2. javaType: 参数的Java类型 
        c3. jdbcType: 参数的JDBC类型
        c4. typeHandler: 类型处理器
        c5. resultMap: 返回结果映射
        c6. modle: 用于存储过程,可以指定参数模式是输入(IN)、输出(OUT)还是既可输入又可输出(INOUT)。
        c7. scale: 如果参数是一个数字类型,这可以用来定义小数点后应保留的位数。
databaseId: 多数据库切换使用,如果配置了 databaseIdProvider,MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。
statementType: STATEMENT(非预编译)/PREPARED(预编译) /CALLABLE 。 设置 MyBatis 标记操作SQL的对象, 默认值:PREPARED。动态传参时会配置。
timeout: 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)。
flushCache: true/false; 将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false。
lang: 。

#特殊标签属性

1. insertupdate标签特殊属性

1.1. keyColumn:(仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

1.2. keyProperty:(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

1.3. useGeneratedKeys:(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server这样的关系数据库管理系统的自动递增字段, oracle使用序列是不支持的,通过selectKey可以返回主键),默认值:false。

2. select 标签特殊属性

2.1. resultType:返回数据类型对应实体类。- 返回单个表单对象 的类型
2.2. resultMap: 外部 resultMap 的命名引用。结果集的映射 - 返回对象集合、嵌套多表对象。
2.3. resultSets: 这个设置仅对多结果集的情况适用,它将列出语句执行后返回的结果集并每个结果集给一个名称,名称是逗号分隔的。
2.4. resultSetType:FORWARD_ONLY(只允许结果集的游标向下移动)/SCROLL_SENSITIVE(结果集游标可以上下移动,返回的结果集是敏感的)/SCROLL_INSENSITIVE(结果集游标可以上下移动,返回的结果集是不敏感的) ,默认值为 unset (依赖驱动)。大量数据加载时设置游标允许的移动动作。 
2.5. resultOrdered:这个设置仅针对嵌套结果 select 语句适用:如果为true,就是假设包含了嵌套结果集或是分组了,这样的话当返回一个主结果行的时候,就不会发生有对前面结果集的引用的情况。这就使得在获取嵌套的结果集的时候不至导致内存不够用。默认值:false。 
2.6. useCache:true/false; 将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:对 select 元素为 true
2.7. fetchSize:这是尝试影响驱动程序每次批量返回的结果行数和这个设置值相等。默认值为 unset(依赖驱动)。 

#动态SQL

MyBatis 的动态SQL是一种强大的特性,允许你在XML映射文件中根据条件构建复杂的SQL语句。这里有一些常用的动态SQL标签和它们的作用.

1. <if>

<if>:这个标签允许你根据某个条件的结果来包含它的内容。如果<if>标签中的条件为true,则其包含的SQL片段会被包括在最终的SQL语句中。

<if test="condition">
  <!-- SQL to include if condition is true -->
</if>

2.<choose>, <when>, <otherwise>

<choose>, <when>, <otherwise>:这组标签的行为类似于Java中的switch语句。<choose>包含一系列的<when>测试条件,以及一个默认的<otherwise>,用于当所有<when>测试条件都不通过时。

<choose>
  <when test="condition1">
    <!-- SQL to include if condition1 is true -->
  </when>
  <when test="condition2">
    <!-- SQL to include if condition2 is true -->
  </when>
  <otherwise>
    <!-- SQL to include if no conditions are true -->
  </otherwise>
</choose>

3. <where>

<where>:这个标签在它包含的子标签生成的SQL片段前自动加上WHERE关键字,并且能够正确地处理逻辑“AND”或“OR”连接词的位置,例如去掉多余的“AND”。

<where>
  <if test="condition">
    column_name = #{value}
  </if>
</where>

4. <set>

<set>:在生成UPDATE语句时,<set>标签用于包含更新列表,并且能够适当地去除多余的逗号。

<update>
  UPDATE table_name
  <set>
    <if test="condition1">
      column1 = #{value1},
    </if>
    <if test="condition2">
      column2 = #{value2},
    </if>
  </set>
  WHERE id = #{id}
</update>

5. <trim>

<trim><trim>标签用于自定义字符串修剪行为,你可以指定什么前缀(prefix)或后缀(suffix)添加到生成的内容,或者当内部条件返回非空内容时去除什么前缀(prefixOverrides)或后缀(suffixOverrides)。

<trim prefix="WHERE" prefixOverrides="AND |OR ">
  <if test="condition1">
    AND column1 = #{value1}
  </if>
  <if test="condition2">
    OR column2 = #{value2}
  </if>
</trim>

6. <foreach>

<foreach>:这个标签用于迭代一个集合并且能够很容易地实现例如IN查询。常用于批量处理。

<select id="selectPostIn" resultType="domain.blog.Post">
  SELECT * FROM POST P
  WHERE P.ID in
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
    #{item}
  </foreach>
</select>

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值