mybatis的resultMap配置详解
生活随笔
收集整理的這篇文章主要介紹了
mybatis的resultMap配置详解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、mybatis的實體類繼承
參考資料:
1、mybatis中實體類,po類繼承另一個po類的情況
2、mybatis中resultMap配置細則
實體類的繼承的作用是:可以通過繼承減少代碼在實體類中的重復使用,比如數(shù)據(jù)庫的表中常常出現(xiàn)的字段所對應的實體類中的屬性。
2、mybatis的resultMap標簽中的屬性extends,可以繼承另外一個命名空間的resultMap標簽。
<mapper namespace="xuecheng.dao.ACVSFundTest"><resultMap id="res" extends="xuecheng.dao.BaseEntityTest.baseCol" type="xuecheng.domain.ACVSFund"><!--<id column="id" property="id"/>--><result column="fund_code" property="fundCode"/><result column="fund_name" property="fundName"/><result column="gmt_Create" property="gmtCreate"/></resultMap>繼承另一個
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="xuecheng.dao.BaseEntityTest"><resultMap id="baseCol" type="xuecheng.domain.BaseEntity"><id column="id" property="id"/><result column="username" property="username"/><result column="age" property="age"/></resultMap>一、mybatis的屬性標簽
<resultMap><constructor><idArg/><arg/></constructor><id/><result/><association property=""/><collection property=""/><discriminator javaType=""><case value=""></case></discriminator> </resultMap>1.1、標簽constructor
默認情況下,mybatis會使用實體類中的無參構造。當提供一個有參構造后,實體類中就不會提供無參構造。這時就需要在resultMap中特殊配置
假設實體類中的配置如下:
public User(Long id, String username, String password, String address) {this.id = id;this.username = username;this.password = password;this.address = address;}映射文件的配置如下:
<resultMap id="userResultMap" type="org.sang.bean.User"><constructor><idArg column="id" javaType="long"/><arg column="username" javaType="string"/><arg column="password" javaType="string"/><arg column="address" javaType="string"/></constructor></resultMap>1.2、標簽association
適用的場景是一對一的
兩張表:1、alias
2、province
provinceMapper.xml文件如下
<mapper namespace="xuecheng.dao.ProvinceMapper"><resultMap id="provinceResultMapper" type="xuecheng.domain.Province"><id column="id" property="id"/><!--association 中的屬性property 是一對一中的屬性名稱,column是指傳入?yún)?shù)的idselect 是指執(zhí)行的方法--><association property="alias" column="id" select="xuecheng.dao.AliasMapper.findAliasByPid"/></resultMap><select id="getProvince" resultMap="provinceResultMapper">SELECT * FROM province</select></mapper>alias的xml文件如下:
<mapper namespace="xuecheng.dao.AliasMapper"><select id="findAliasByPid" parameterType="long" resultType="xuecheng.domain.Alias">SELECT * FROM alias WHERE pid=#{id}</select> </mapper>1.3、標簽collection
<resultMap id="provinceResultMapper" type="xuecheng.domain.Province"><id column="id" property="id"/><result column="name" property="name"/><!--association 中的屬性property 是一對一中的屬性名稱,column是指傳入?yún)?shù)的idselect 是指執(zhí)行的方法--><!--<association property="alias" column="id" select="xuecheng.dao.AliasMapper.findAliasByPid"/>--><!--<collection property="cities" column="id" select="xuecheng.dao.CityMapper.findById"/>--> </resultMap>1.4、標簽 discriminator (有點類似于switch語句)
<resultMap id="provinceResultMapper" type="xuecheng.domain.Province"><id column="id" property="id"/><result column="name" property="name"/><!--association 中的屬性property 是一對一中的屬性名稱,column是指傳入?yún)?shù)的idselect 是指執(zhí)行的方法--><!--<association property="alias" column="id" select="xuecheng.dao.AliasMapper.findAliasByPid"/>--><!--collection的測試--><!--<collection property="cities" column="id" select="xuecheng.dao.CityMapper.findById"/>--><!--以下有點類似于switch語句--><discriminator javaType="int" column="area"><case value="1" resultMap="noodleResultMap"></case><case value="2" resultMap="riceResultMap"></case></discriminator><!--以下collection,不能查出準確數(shù)據(jù)。原因不知因為是啥?--><!--<collection property="cities" ofType="xuecheng.domain.City">--><!--<id column="id" property="id"/>--><!--<result column="name" property="name"/>--><!--<result column="pid" property="pid"/>--><!--</collection>--></resultMap>1.5、注意點:mybatis的懶加載
1.5.1、開啟的兩種方式,方式一(全局開啟,即對所有查詢):
<settings><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/></settings>說明:lazyLoadingEnabled默認是false,即不開啟。aggressiveLazyLoading默認是true,即按照層級來進行查詢,noodle和rice是同一級,即查詢noodle的同時,rice也查詢。如果是false,即是按需進行查詢,需求查詢noodle的時候,就不去查詢rice了。
1.5.2、方式二(對局部進行操作)
在collection標簽和association標簽中,使用fetchType屬性,eager代表立即加載,lazy代表延遲加載。
<association property="alias" column="id" select="org.sang.db.AliasMapper.findAliasByPid" fetchType="eager"/> <collection property="cities" column="id" select="org.sang.db.CityMapper.findCityByPid" fetchType="lazy"/>1.6、sql標簽
可以只封裝一部分查詢語句,如下:
<sql id="selectAll3">id,username,address,password </sql>引用方式如下:
<select id="getUser3" resultType="user">SELECT<include refid="selectAll3"/> FROM user</select>還可以在封裝的時候使用一些變量,如下:
<sql id="selectAll4">${prefix}.id,${prefix}.username,${prefix}.address </sql>注意變量引用方式是$符號哦,不是#,引用方式如下:
<select id="getUser4" resultType="user" parameterType="string">SELECT<include refid="selectAll4"><property name="prefix" value="u"/></include> FROM user u </select>總結
以上是生活随笔為你收集整理的mybatis的resultMap配置详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC快捷菜单以及位图的加载和移动操作
- 下一篇: java集合体检套餐管理系统_基于ssm