mybatis实现一个数据库一对多的查询结果映射到java实体类 |
您所在的位置:网站首页 › sql如何使用VM查询多条记录数据和 › mybatis实现一个数据库一对多的查询结果映射到java实体类 |
一、测试表格:test1、test2
二、对应java实体类:test1中包含test2的list test1: public class Test1 { private Integer id; private String name1; private List test2s; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName1() { return name1; } public void setName1(String name1) { this.name1 = name1; } public List getTest2s() { return test2s; } public void setTest2s(List test2s) { this.test2s = test2s; } }test2: public class Test2 { private Integer id; private String operat; private Integer tid; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getOperat() { return operat; } public void setOperat(String operat) { this.operat = operat; } public Integer getTid() { return tid; } public void setTid(Integer tid) { this.tid = tid; } }三、重点:mybatis的xml配置 第一种写法: select * from test1 left OUTER join test2 on test2.tid=test1.id;
第二种写法 select * from test1 left OUTER join test2 on test2.tid=test1.id;四、测试 @Test void test2() { List all = test1Mapper.getTest1(); System.out.println(all); } 结果: [Test1{id=1, name1='123hhh', test2s=[com.example.demo2.entity.Test2@4ee25d80]}, Test1{id=2, name1='李【四', test2s=[com.example.demo2.entity.Test2@16a35bd]}, Test1{id=3, name1='外网', test2s=[com.example.demo2.entity.Test2@ba17be6]}, Test1{id=4, name1='任务', test2s=[com.example.demo2.entity.Test2@6f798482]}]我们发现:虽然结果确实是把test2结果集合到了test1的实体类里面,但是却只存储了第一条数据, 原因:就是查询的几个表里面的字段名不能有重复的 解决方法:①如果不是必须使用的字段,可以在resultmap映射中将个重复名字的字段去掉 ②也可以直接修改数据库列名,把几个表重复的列名改成不一样的 ③可以在查询时候,查询语句里面给重复字段取别名
补充: 注意,在test1 只有关联test2一个一对多关系时,可以很好的把test2中多余重复去重; 但是,如果test1关联test2,并且test1又关联test3 .......等多个一对多关系时,查出来的数据就会出现重复,此时可能就需要在java层面对数据进行去重
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |