#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 List
accounts; 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 {    List
findAll();}

 

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() {        List
users = userDao.findAll(); for (User user : users) { System.out.println(user); } }}

 

转载地址:https://liuxingchang.blog.csdn.net/article/details/109099194 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:#MyBatis多表查询 #多对多查询 @FDDLC
下一篇:#两数之和_Java版 @FDDLC

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月22日 04时49分45秒