结果映射(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>
属性 | 描述 |
---|---|
id | 当前命名空间中的一个唯一标识,用于标识一个结果映射。 |
type | 类的完全限定名, 或者一个类型别名(关于内置的类型别名,可以参考上面的表格)。 |
autoMapping | 如果设置这个属性,MyBatis 将会为本结果映射开启或者关闭自动映射。 这个属性会覆盖全局的属性 autoMappingBehavior。默认值:未设置(unset)。 |
属性 | 描述 |
---|---|
property | 映射到列结果的字段或属性。如果 JavaBean 有这个名字的属性(property),会先使用该属性。否则 MyBatis 将会寻找给定名称的字段(field)。 无论是哪一种情形,你都可以使用常见的点式分隔形式进行复杂属性导航。 比如,你可以这样映射一些简单的东西:“username”,或者映射到一些复杂的东西上:“address.street.number”。 |
column | 数据库中的列名,或者是列的别名。一般情况下,这和传递给 resultSet.getString(columnName) 方法的参数一样。 |
javaType | 一个 Java 类的全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。然而,如果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证行为与期望的相一致。 |
jdbcType | JDBC 类型,所支持的 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值的时候,最后一个值的后面多一个逗号‘,’