我们都知道数据库中Select是门大学问,而剩下的insert、update、delete往往都是放在一起讲的,今儿个我复习的时候用到了几个比较又意思的标签,
- 主键生成方式而对于不支持自增型主键的数据库(例如Oracle),则可以使用 selectKey 子元素:selectKey 元素将会首先运行,id 会被设置,然后插入语句会被调用
- 关于selectKey的一些属性:
resultMap
- constructor - 类在实例化时, 用来注入结果到构造方法中– idArg - ID 参数; 标记结果作为 ID 可以帮助提高整体效能– arg - 注入到构造方法的一个普通结果
- id – 一个 ID 结果; 标记结果作为 ID 可以帮助提高整体效能
- result – 注入到字段或 JavaBean 属性的普通结果
- association – 一个复杂的类型关联;许多结果将包成这种类型– 嵌入结果映射 – 结果映射自身的关联,或者参考一个
- collection – 复杂类型的– 嵌入结果映射 – 结果映射自身的集,或者参考一个
- discriminator – 使用结果值来决定使用哪个结果映射– case – 基于某些值的结果映射• 嵌入结果映射 – 这种情形结果也映射它本身,因此可以包含很多相同的元素,或者它可以参照一个外部的结果映射。
找个例子:
<resultMap type="com.ch.mybatis.bean.Employee" id="MySimpleEmp">
<!--指定主键列的封装规则
id定义主键会底层有优化;
column:指定哪一列
property:指定对应的javaBean属性
-->
<id column="id" property="id"/>
<!-- 定义普通列封装规则 -->
<result column="last_name" property="lastName"/>
<!-- 其他不指定的列会自动封装:我们只要写resultMap就把全部的映射规则都写上。 -->
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</resultMap>
association
• 复杂对象映射• POJO中的属性可能会是一个对象
• 我们可以使用联合查询,并以级联属性的方式封装对象。
• 使用association标签定义对象的封装规则
<resultMap type="com.ch.mybatis.bean.Employee" id="MyDifEmp2">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="gender" property="gender"/>
<!-- association可以指定联合的javaBean对象
property="dept":指定哪个属性是联合的对象
javaType:指定这个属性对象的类型[不能省略]
-->
<association property="dept" javaType="com.ch.mybatis.bean.Department">
<id column="did" property="id"/>
<result column="dept_name" property="departmentName"/>
</association>
</resultMap>
Collection-集合类型&嵌套结果集
<resultMap type="com.ch.mybatis.bean.Department" id="MyDept">
<id column="did" property="id"/>
<result column="dept_name" property="departmentName"/>
<!--
collection定义关联集合类型的属性的封装规则
ofType:指定集合里面元素的类型
-->
<collection property="emps" ofType="com.ch.mybatis.bean.Employee">
<!-- 定义这个集合中元素的封装规则 -->
<id column="eid" property="id"/>
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</collection>
</resultMap>
- 除此之外还有一些动态sql的标签诸如if,choose(when,otherwise),trim(where,set) ,bind ,foreach等