#MyBatis_一以多查询 @FDDLC
发布日期:2021-06-30 20:56:49
浏览次数:2
分类:技术文章
本文共 4802 字,大约阅读时间需要 16 分钟。
一个用户可能对应多个账户,因此用户与账户存在一对多的关系。
关键配置:
说明:
1、上面这个findAll的结果是List集合(List<User>)。
2、要用左外连接left outer join(如果user表在account表右边就用右外连接),不能用where接条件,而是用on!
3、一个用户可能有多个账户,因此User类里有个类型为List<Account>的accounts成员。给User类中的id、name、age赋值很简单,怎么把数据封装到这个accounts成员呢?于是来了个resultMap标签。resultMap标签里的collection子标签是重头戏!MyBatis就是通过collection来给accounts成员赋值的!collection标签里的property="accounts"好理解,就是User类里的accounts成员呗!ofType属性是说集合里的元素属于什么类型。另外,这个collection其实相当于是一种嵌套版的resultMap标签哈!
最后附上源码:
项目结构:
数据库的相关信息:
MySQL:8.0.16 port:3306 database:multi_table
account表:
user表:
Account类:
package cn.liuxingchang.domain;import java.io.Serializable;public class Account implements Serializable { private Integer id; private Integer uid; private Double money; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", uid=" + uid + ", money=" + money + '}'; }}
User类:
package cn.liuxingchang.domain;import java.io.Serializable;import java.util.List;public class User implements Serializable { private Integer id; private String name; private Integer age; private Listaccounts; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public List getAccounts() { return accounts; } public void setAccounts(List accounts) { this.accounts = accounts; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", accounts=" + accounts + '}'; }}
UserDao接口:
package cn.liuxingchang.dao;import cn.liuxingchang.domain.User;import java.util.List;public interface UserDao { ListfindAll();}
UserMapper.xml:
mybatis.xml:
pom.xml:
4.0.0 org.example P075_MyBatis_One2Many 1.0-SNAPSHOT mysql mysql-connector-java 8.0.16 org.mybatis mybatis 3.4.5 junit junit 4.12 test
Test.java:
import cn.liuxingchang.dao.UserDao;import cn.liuxingchang.domain.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.After;import org.junit.Before;import java.io.InputStream;import java.util.List;public class Test { private InputStream in; private SqlSessionFactory factory; private SqlSession sqlSession; private UserDao userDao; @Before public void before() throws Exception { in = Resources.getResourceAsStream("mybatis.xml"); factory = new SqlSessionFactoryBuilder().build(in); sqlSession = factory.openSession(); userDao = sqlSession.getMapper(UserDao.class); } @After public void after() throws Exception { sqlSession.commit(); sqlSession.close(); in.close(); } @org.junit.Test public void findAllTest() { Listusers = userDao.findAll(); for (User user : users) { System.out.println(user); } }}
转载地址:https://liuxingchang.blog.csdn.net/article/details/109099194 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月22日 04时49分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛:I. 丢史蒂芬妮
2019-04-30
后缀数组(bzoj 1031: [JSOI2007]字符加密Cipher)
2019-04-30
bzoj 1015: [JSOI2008]星球大战starwar
2019-04-30
bzoj 1432: [ZJOI2009]Function
2019-04-30
bzoj 1800: [Ahoi2009]fly 飞行棋
2019-04-30
bzoj 1303: [CQOI2009]中位数图
2019-04-30
bzoj 2257: [Jsoi2009]瓶子和燃料(裴蜀定理)
2019-04-30
bzoj 2748: [HAOI2012]音量调节
2019-04-30
bzoj 3211: 花神游历各国 && bzoj 3038: 上帝造题的七分钟2
2019-04-30
bzoj 1833: [ZJOI2010]count 数字计数(数字0-9的个数)
2019-04-30
bzoj 1856: [Scoi2010]字符串(卡特兰数)
2019-04-30
bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
2019-04-30
bzoj 1293: [SCOI2009]生日礼物
2019-04-30
bzoj 2565: 最长双回文串
2019-04-30
manacher算法--最长回文子串
2019-04-30
KMP--找子串2.0
2019-04-30
Kruskal/prim--最小生成树
2019-04-30
bzoj 1202: [HNOI2005]狡猾的商人(带权并查集)
2019-04-30
bzoj 1191: [HNOI2006]超级英雄Hero
2019-04-30
拟阵:贪心原理(bzoj 3105: [cqoi2013]新Nim游戏)
2019-04-30