MybatisresultMap中 collection association 的用法

it2022-05-07  11

controller---------------------------------------------------------------------  两个请求     

@RequestMapping(value="testResultMap" , method = RequestMethod.GET) public void testResultMap(){ String id = "1"; List<MyModel2> list=sysService.testRun08(id); System.out.println("lalala"); }

 

@RequestMapping(value="testResultMapOne" , method = RequestMethod.GET) public void testResultMapOne(){ List<Integer> list = new ArrayList<Integer>(); list.add(2); list.add(3); List<MyModel> list1=sysService.testRun09(list); System.out.println("lalala"); }

 

 testResultMap 返回的是 一对多的情况  图1

 

 testResultMapOne  返回的是  一对一的情况   图2

图1

图2

 

 

 

service-----------------------------------------------------------------

 

public List<MyModel2> testRun08(String id){ List<MyModel2> l = sysUMapper.testresultModel2(id); return l; } public List<MyModel> testRun09(List<Integer> list){ List<MyModel> l = sysUMapper.testresultModel2one(list); return l; }

mapper.java-----------------------------------------------------------------------

public List<MyModel2> testresultModel2(@Param("id") String id ); public List<MyModel> testresultModel2one(@Param("list") List<Integer> list );

model(pojo)-------------------------------------------------------------------------------(省略getter setter)用到的三个model类

public class Detail { private Long id; private String userId; private String level; private String jurisdiction;

 

 

public class MyModel2 { private Long id; private String username ; private String sex; private String birthday; private String address; private List<Detail> details;

 

 

public class MyModel { private Long id; private String username ; private String sex; private String birthday; private String address; private Detail detail;

 

mapper.xml------------------------------------------------------

collection 对应指定着    model2中的 类   List<Detail>  details

这里特别注意的是:

details 是  一个List<Detail>  details   ;  这个变量装着  一对多情况中的    

 多个Detail对象  (我当然说的是 图1中的情况  :一个user 对应多个detail  )

这些detail 就应该存在 details这个List中! 这也是我们选择应用<collection>的原因

更需要注意的是   <collection property="details" ofType="com.sly.web.sys.model.Detail">            <id column="did" property="id" />  这个id     一定要注意  id 名对应 表中的列名 , 并且 id 是唯一标识;

不然会出现一种情况: 返回的list 也就是details 中  只有一条数据,这条数据就是查询的第一条数据!!!!!!!!!!!!!!!!!!

 

<resultMap type="com.sly.web.sys.model.MyModel2" id="DetailWithinMyModelList">     <id column="id" property="id"/>     <result column="username" property="username"/>     <result column="sex" property="sex"/>     <result column="birthday" property="birthday"/>     <result column="address" property="address"/>     <collection property="details" ofType="com.sly.web.sys.model.Detail">       <id column="did" property="id" />       <result column="user_id" property="userId"/>       <result column="level" property="level"/>       <result column="jurisdiction" property="jurisdiction"/>     </collection> </resultMap> <select id="testresultModel2" resultMap="DetailWithinMyModelList">   select us.*, ud.id did , ud.user_id, ud.level, ud.Jurisdiction from testuser us ,userdetail ud    <where>     us.id = ud.user_id     and ud.user_id = #{id}   </where> </select>

 

这里要分清 你要返回的对象  是一对多关系 还是一对一关系  ,  如果是上面这种一对多关系 

,如果使用了association  结果是   你只能返回一条记录  ,也就是第一条记录

association  对应着  你model 里面的指定的  类(detail)

 

<resultMap type="com.sly.web.sys.model.MyModel" id="DetailWithinMyModel">   <id column="id" property="id"/>   <result column="username" property="username"/>   <result column="sex" property="sex"/>   <result column="birthday" property="birthday"/>   <result column="address" property="address"/>   <association property="detail" javaType="com.sly.web.sys.model.Detail" >     <id column="did" property="id" />     <result column="user_id" property="userId"/>     <result column="level" property="level"/>     <result column="jurisdiction" property="jurisdiction"/>   </association> </resultMap> <select id="testresultModel2one" resultMap="DetailWithinMyModel">   select us.*, ud.id did , ud.user_id, ud.level, ud.Jurisdiction from testuser us ,userdetail ud <where>     us.id = ud.user_id     and ud.user_id in   <foreach item="item" index="index" collection="list" open="(" separator="," close=")">         #{item}   </foreach> </where> </select>

 

转载于:https://www.cnblogs.com/lize1215/p/7453805.html

相关资源:垃圾分类数据集及代码

最新回复(0)