mybatis

结果映射(resultMap) 

<resultMap id="dogMap2" type="Dog">

        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <result column="health" property="health"></result>
       
        <association property="strainTYpe" javaType="strainTYpe">
            <id column="sid" property="id"></id>
            <result column="sname" property="name"></result>
            <result column="describe" property="describe"></result>
        </association>

        <collection property="masters" ofType="Master">
            <id column="pid" property="pid"></id>
            <result column="uname" property="name"></result>
            <result column="age" property="age"></result>
        </collection>

</resultMap>
ResultMap 的属性列表
属性描述
id当前命名空间中的一个唯一标识,用于标识一个结果映射。
type类的完全限定名, 或者一个类型别名(关于内置的类型别名,可以参考上面的表格)。
autoMapping如果设置这个属性,MyBatis 将会为本结果映射开启或者关闭自动映射。 这个属性会覆盖全局的属性 autoMappingBehavior。默认值:未设置(unset)。

Id 和 Result 的属性
属性描述
property映射到列结果的字段或属性。如果 JavaBean 有这个名字的属性(property),会先使用该属性。否则 MyBatis 将会寻找给定名称的字段(field)。 无论是哪一种情形,你都可以使用常见的点式分隔形式进行复杂属性导航。 比如,你可以这样映射一些简单的东西:“username”,或者映射到一些复杂的东西上:“address.street.number”。
column数据库中的列名,或者是列的别名。一般情况下,这和传递给 resultSet.getString(columnName) 方法的参数一样。
javaType一个 Java 类的全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。然而,如果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证行为与期望的相一致。
jdbcTypeJDBC 类型,所支持的 JDBC 类型参见这个表格之后的“支持的 JDBC 类型”。 只需要在可能执行插入、更新和删除的且允许空值的列上指定 JDBC 类型。这是 JDBC 的要求而非 MyBatis 的要求。如果你直接面向 JDBC 编程,你需要对可以为空值的列指定这个类型。
typeHandler我们在前面讨论过默认的类型处理器。使用这个属性,你可以覆盖默认的类型处理器。 这个属性值是一个类型处理器实现类的全限定名,或者是类型别名。

动态 SQL

foreach

动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)。比如:

<delete id="batchDelete">
    delete from dog where id in
    <foreach collection="list" item="id" open="(" close=")" separator=",">
        #{id}
    </foreach>
</delete>

collection:传递过来的数组或集合等参数名称(collection="参数名")

index:通过下标0,1,2来循环取出每个元素(index="index")

item:每循环一次所取出的参数 取别名,这个可以随便填,与#{items}表达式中的参数对应(item="items")

separator:每次取出的参数以某种符号分割,例如逗号、空格等(separator="",separator=",")

open:以什么开始

close:以什么结束

set 

    <set>
        <if test="dog.name!=null and dog.name!=''">
            name=#{dog.name},
        </if>
        <if test="dog.health!=null">
            health=#{dog.health},
        </if>
        <if test="dog.love!=null">
            love=#{dog.love},
        </if>

        <if test="dog.strain!=null and dog.strain!=''">
            strain=#{dog.strain},
        </if>
    </set>
  

set 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号

trim 

<trim prefix="(" suffix=")" suffixOverrides=",">
    <if test="name!=null and name!=''">
        name,
    </if>
    <if test="health!=null">
        health,
    </if>
</trim>

prefix 前缀增加的内容

suffix 后缀增加的内容

prefixOverrides 前缀需要覆盖的内容,一般是第一个判断条件前面的多余的结构,如:第一个判断条件前面多了 ‘and’

suffixOverrides  后缀需要覆盖的内容,一般是最后一个数据的后面符号,如:set值的时候,最后一个值的后面多一个逗号‘,’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值