- 实体类
class PlatForm{ private String id; private String code; .... private List<TatgetUser> tatgetUsers; // 一对多 集合 }
方式一 查询一次但分页不正确
- 查询sql
select a.id ,a.code ,a.full_name ,a.simple_name ,a.depart ,a.platform ,a.intPOdlJCe ,a.logo ,a.value_explanation ,c.id as tid ,c.target_code as targetCode ,c.target_name as targetName from rd_plat_form a left join rd_plate_target b on a.code = b.plate_code -- 中间表关联 left join rd_target_user c on b.target_code = C.target_code
- mapper
<resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.PlatForm " > <id column="id" property="id" jdbcType="VARCHAR" /> <result column="code" property="code" jdbcType="VARCHAR" /> <result column="logo" property="logo" jdbcType="VARCHAR" /> <collection property="talgetUsers" javaType="java.util.ArrayList" ofType="com.xxx.modules.xxx.entity.TatgetUser"/> <!--TatgetUser 实体属性--> <!--id 起别名因为,主类PlatForm有id 重复了--> <id column:"tid" property="id"/> <result column:"talgetCode" property="tatgetCode"/> <result column:"talgetName" property="talgetName"/> </collection> </resultMap>
- 返回时属性
tatgetUsers
(自动封装成list)
以上方式只查询一次但是分页不正确
方式二 查询多次但分页正确
以下方式查询多次但是分页正确
<resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.PlatForm " > <id column="id" property="id" jdbcType="VARCHAR" /> <result column="code" property="code" jdbcType="VARCHAR" /> <result column="logo" property="logo" jdbcType="VARCHAR" /> <collection property="talgetUsers" javaType="java.util.ArrayList" ofType="com.xxx.modules.xxx.entity.TatgetUser" select="com.xxx.modules.xxx.mapper.TatgetUserMapper.selectList" column="{platCode=code,source = id}"/> </resultMap>
- talgetUsers:一方实体类中属性(List集合)
- ofType:映射一点多中 多方的实体
- select:多次查询即多方的mapper中方法
- column:关联字段
- platCode:字段别名,多方条件里用
- code:一方的字段
- 多方:TatgetUserMapper
<mapper namespace="com.xxx.modules.xxx.mapper.TatgetUserMapper"> <!-- 查询列表 --> <select id="selectList" resultType="TargetUser"> SELECT a.id, a.plat_code platCode, a.plat_name platName FROM tatget_user AS a <where> a.plat_Code = #{platCode} <!-- 变量名 platCode对应上文的 platCode --> and a.source = #{source} <!-- 变量名 source对应上文的 source --> </where> </select>
可以不用实现接口方法