Mybatis多表查询

在有两个查询语句的时候 当表中的字段和类的属性不一致时不能在 assocation中配置对应关系必须在 单独配置一个ResultMap

在只有一个查询语句的时候 当表中的字段和类的属性不一致时可以在 assocation中配置对应关系(同一个resultmap)

如图: 

下面的sql是想查询两张表的联合内容,sql语句是没问题的,数据在sqlyog中也能查出来,但是查出来的值

放在Model中,在前端类似这样<td>${order.user.nickname}</td>是取不到值的,想要获得值就得当两个表的字段不一致时,在assoication中配置对应关系(如第一张图所示)的这样.

延迟加载的概念:
在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)。
立即加载的概念:
不管用不用,只要一调用方法,马上发起查询。

在对应四种表关系中:一对多,多对一,一对一,多对多
一对多,多对多:通常情况下采用延迟加载。
多对一,一对一:通常情况下采用立即加载。

开启延迟加载

    <settings>
        <!--延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载-->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

一对一:

    <!--定义和封装account和user的resultMap-->
    <resultMap id="accountUserMap" type="account">
        <id property="ID" column="ID"></id>
        <result property="UID" column="UID"></result>
        <result property="MONEY" column="MONEY"></result>

        <!-- 一对一的关系映射,配置封装user的内容
               select属性中指定的内容,查询用户的指定标志
               column属性指定的内容,用户根据id查询时,所需要参数的值-->
        <association property="user" column="UID" javaType="com.czy.domain.User"
        select="com.czy.dao.UserDao.findById"
        ></association>

    </resultMap>

一对多

    <!--定义User的resultMap-->
    <resultMap id="userAccountMap" type="user">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="birthday" column="birthday"></result>
        <result property="sex" column="sex"></result>
        <result property="address" column="address"></result>

        <!--配置user对象中的account集合-->
        <collection property="accounts" ofType="account" column="id" select="com.czy.dao.AccountDao.findByUid">
        </collection>
    </resultMap>

    <!--查询所有-->
    <select id="findAll" resultMap="userAccountMap">
        select * from user
    </select>
  ## AccountDao 
 <select id="findByUid" resultType="account" parameterType="INT">
        select * from account where UID = #{uid}
  </select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值