在有两个查询语句的时候 当表中的字段和类的属性不一致时不能在 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>