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
相关资源:垃圾分类数据集及代码