ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MyBatis之ResultMap-自定义结果映射

2019-08-21 19:04:13  阅读:224  来源: 互联网

标签:封装 自定义 用户 ResultMap 查询 address MyBatis id 加载


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"/>

标签:封装,自定义,用户,ResultMap,查询,address,MyBatis,id,加载
来源: https://blog.csdn.net/Danny1992/article/details/89216500

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有