mybatis实现一个数据库一对多的查询结果映射到java实体类

您所在的位置:网站首页 sql如何使用VM查询多条记录数据和 mybatis实现一个数据库一对多的查询结果映射到java实体类

mybatis实现一个数据库一对多的查询结果映射到java实体类

2024-07-03 14:33| 来源: 网络整理| 查看: 265

一、测试表格: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