1.discriminator
MyBatis可以使用discriminator判断某列的值,然后根据某列的值改变封装 行为
<resultMap ....>
...
<discriminator javaType="java类型" column="数据库某一列">
<case value="查询到值" resultType="">
查询语句或者是查询封装规则
</case>
<case value="查询到值" resultType="">
查询语句或者是查询封装规则
</case>
</discriminator>
</resultMap>
2.collection
collection
<resultMap id="xml中唯一的id" type="JavaBean的类型">
<id column="数据库列的id" property="JavaBean的id"></id>
<result column="数据库返回的某一列的名称" property="JavaBean要封装的属性"></result>
<!--ofType:要封装的JavaBean的全类名-->
<collection property="一的一方的属性" ofType="多的一方的全类名">
<id column="" property=""/>
<result column="" property=""/>
<result column="" property=""/>
</collection>
</resultMap>
分步查询
<resultMap id="xml中唯一的id" type="JavaBean的类型">
<id column="数据库列的id" property="JavaBean的id"></id>
<result column="数据库返回的某一列的名称" property="JavaBean要封装的属性"></result>
<!--ofType:要封装的JavaBean的全类名-->
<collection property="一的一方的属性" select="分步查询的sql语句" column="传入的参数">
</collection>
</resultMap>
多个参数
如果colum需要多个参数
<collection property="一的一方的属性" select="分步查询的sql语句" column="传入的参数">
</collection>
那么column可以写成
select的参数的作为key,实际sql返回的数据作为value
column="{deptId=id,deptName=name}"
fatchType,不用修改全局文件
lazy:延迟加载
eager:立即加载
<collection property="一的一方的属性"
select="分步查询的sql语句"
column="传入的参数"
fatchType="lazy|eager">
</collection>
3.association
级联查询
<resultMap id="xml中唯一的id" type="JavaBean的类型">
<!--
指定主键的封装规则,使用id标签mybatis会对其有优化
当然你也可以使用result标签
-->
<id column="数据库列的id" property="JavaBean的id"></id>
<result column="数据库返回的某一列的名称"
property="JavaBean要封装的属性"></result>
<!--其他的列可以不用写,mybatis会自动封装,但一般是建议全部写-->
<!--若是一对一的情况下,可使用级联属性的方式,
如user对象里面有一个address对象-->
<result column="aid" property="address.id"></result>
</resultMap>
association
<resultMap id="xml中唯一的id" type="JavaBean的类型">
<!--
指定主键的封装规则,使用id标签mybatis会对其有优化
当然你也可以使用result标签
-->
<id column="数据库列的id" property="JavaBean的id"></id>
<result column="数据库返回的某一列的名称" property="JavaBean要封装的属性"></result>
<!--其他的列可以不用写,mybatis会自动封装,但一般是建议全部写-->
<!--若是一对一的情况下,可使用association,如user对象里面有一个address对象-->
<association property="User对象中的address属性" javaType="com.ces.entity.Address Address的全类名">
<id column="数据库中返回的address的id" property="address实体类的id"></id>
<result column="" property=""></result>
</association>
</resultMap>
分步查询
根据用户id查询用户
根据用户中address的id值去查一个address
将查询到address封装到用户中
<resultMap id="xml中唯一的id" type="JavaBean的类型">
<id column="数据库列的id" property="JavaBean的id"></id>
<result column="数据库返回的某一列的名称" property="JavaBean要封装的属性">
</result>
<!-- 一个select会发一次SQL查询-->
<association property="javabean的某个属性"
select="分步查询的方法名(namespace+id)" column="select的参数">
</association>
</resultMap>
延迟加载(类似于hibernate中的load方法)
全局配置文件中开启延时加载
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 当设置为true时,懒加载的对象可能被任何懒属性全部加载;否则,每个属性按需加载。-->
<setting name="aggressiveLazyLoading" value="false"/>