两个类,User,Account

查询每个账户以及其对应的用户信息,一对一查询,采用及时加载

Account类

package com.itheima.domain;import java.io.Serializable;public class Account implements Serializable {private Integer id;private Integer uid;private Double money;//多对一(mybatis中称之为一对一)的映射,一个账户只能属于一个用户private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}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;}@Overridepublic String toString() {return "Account{" +"id=" + id +", uid=" + uid +", money=" + money +", user=" + user +'}';}
}

User类

public class User implements Serializable {private Integer userId;private String userName;private String userAddress;private String userSex;private Date userBirthday;//加入get和set方法
}

IAccountDao接口

public interface IAccountDao {/**查询所有账户,并且获取每个账户所属的用户信息**/@Select("select * from account")@Results(id="accountMap",value = {@Result(id=true,column = "id",property = "id"),@Result(column = "uid",property = "uid"),@Result(column = "money",property = "money"),@Result(column = "uid",property = "user",one =@One(select = "com.itheima.dao.IUserDao.findById",fetchType = FetchType.EAGER))})List<Account> findAll();/**根据用户id查询账户信息**/@Select("select * from account where uid=#{uid}")List<Account> finAccountByUid(Integer userId);
}

验证:

@Testpublic void testFindAll(){List<Account> accounts=accountDao.findAll();for(Account account:accounts){System.out.println("每个账户信息");System.out.println(account);System.out.println(account.getUser());}}

结果:

Account{id=3, uid=46, money=2000.0, user=User{userId=46, userName='老王', userAddress='北京', userSex='女', userBirthday=Wed Mar 07 17:37:26 CST 2018, accounts=[Account{id=1, uid=46, money=1000.0, user=null}, Account{id=3, uid=46, money=2000.0, user=null}]}}
User{userId=46, userName='老王', userAddress='北京', userSex='女', userBirthday=Wed Mar 07 17:37:26 CST 2018, accounts=[Account{id=1, uid=46, money=1000.0, user=null}, Account{id=3, uid=46, money=2000.0, user=null}]}

实现一对多查询,每个用户以及对应的账户信息

User类

public class User implements Serializable {private Integer userId;private String userName;private String userAddress;private String userSex;private Date userBirthday;//一对多关系映射,一个用户对应多个账户private List<Account> accounts;public List<Account> getAccounts() {return accounts;}public void setAccounts(List<Account> accounts) {this.accounts = accounts;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserAddress() {return userAddress;}public void setUserAddress(String userAddress) {this.userAddress = userAddress;}public String getUserSex() {return userSex;}public void setUserSex(String userSex) {this.userSex = userSex;}public Date getUserBirthday() {return userBirthday;}public void setUserBirthday(Date userBirthday) {this.userBirthday = userBirthday;}@Overridepublic String toString() {return "User{" +"userId=" + userId +", userName='" + userName + '\'' +", userAddress='" + userAddress + '\'' +", userSex='" + userSex + '\'' +", userBirthday=" + userBirthday +", accounts=" + accounts +'}';}
}

IUserDao接口:

public interface IUserDao {/*查询所有用户*/@Select("select * from user")@Results(id = "userMap",value = {@Result(id=true,column = "id",property = "userId"),@Result(column = "username",property = "userName"),@Result(column = "address",property = "userAddress"),@Result(column = "sex",property = "userSex"),@Result(column = "birthday",property = "userBirthday"),@Result(column ="id",property = "accounts",many = @Many(select = "com.itheima.dao.IAccountDao.finAccountByUid",fetchType = FetchType.LAZY))})List<User> findAll();/*查询一个用户*/@Select("select * from user where id=#{id}")@ResultMap(value = {"userMap"})User findById(Integer userId);/*根据用户名称模糊查询*/@Select("select * from user where username like #{username}")@ResultMap(value = {"userMap"})List<User> findUserByName(String username);
}

验证:

@Testpublic void testFindAllUser(){List<User> users=userDao.findAll();for (User user:users){System.out.println("每个用户的账户信息");System.out.println(user);System.out.println(user.getAccounts());}}

结果:

User{userId=46, userName='老王', userAddress='北京', userSex='女', userBirthday=Wed Mar 07 17:37:26 CST 2018, accounts=[Account{id=1, uid=46, money=1000.0, user=null}, Account{id=3, uid=46, money=2000.0, user=null}]}
[Account{id=1, uid=46, money=1000.0, user=null}, Account{id=3, uid=46, money=2000.0, user=null}]

Mybatis(19)注解实现多表查询相关推荐

  1. Mybatis源码分析--关联表查询及延迟加载原理(二)

    在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...

  2. Mybatis入门:4(多表查询操作)

    多表查询操作 Mybatis的多表操作 表之间的关系有几种:一对多.一对一.多对一.多对多 举例: 用户和订单就是一对多--一个用户可以下多个订单 订单和用户就是多对一--多个订单属于同一个用户 人和 ...

  3. MyBatis Plus 如何实现连表查询 mybatis plus join

    mybatis-plus-join 项目地址 gitee github 使用方法 安装 Maven <dependency><groupId>com.github.yulich ...

  4. SpringBoot+MyBatis 基于xml实现多表查询的两种方式

    1.创建SpringBoot项目,导入依赖 <dependencies><dependency><groupId>org.springframework.boot& ...

  5. MyBatis——@Result注解column参数传递——父查询函数的参数传递到子查询

    问题描述 假设a方法中传入一个带查询参数x 但是a方法的查询结果中不包含参数x 而子查询里也需要参数x 如何在子查询b中带入参数x /*** 按User表中platform查询User*/@Selec ...

  6. Mybatis(1)---入门篇单表查询

    1.Mybatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...

  7. Mybatis(14)多表查询

    准备工作 新建项目day03_eesy_03one2many复制day03_eesy_02dynamicSQL项目 1.账户表创建 CREATE TABLE `account` (`ID` INT(1 ...

  8. MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)

    MyBatis多表查询 多表模型分类 一对一:在任意一方建立外键,关联对方的主键. 一对多:在多的一方建立外键,关联一的一方的主键. 多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键. 数 ...

  9. @MyBatis注解实现动态模糊查询

    @使用MyBatis注解的方式实现动态模糊且多表查询 一.使用环境及基本信息: 1.项目环境及框架:JDK1.8 + Maven + SpringBoot + MyBatis 2.使用的插件:TkMa ...

最新文章

  1. python中的协程(二)
  2. ubuntu 安装eclipse neon版本
  3. ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析解决方法
  4. [转载]关于Java reference的一篇博文
  5. linux——管理系统设备之vsftpd服务
  6. .obj格式的文件怎么显示在html_怎么才能把安卓手机备忘录便签里的文件转到苹果上?...
  7. 190819每日一句
  8. linux嵌入式入门到精通视频教程 Linux开发工程师培训教程
  9. Windows内核编程(二)-第一个内核程序
  10. 电务段子系统网络管理服务器,CSM-TD铁路电务管理信息系统
  11. java下载网络文件的几种方式
  12. 网易云音乐基于用户的推荐系统
  13. spring boot layui table.render 加载不了cols
  14. 小鸡啄米之React事件处理
  15. 唐巧的iOS技术博客好文列表
  16. jqGrid排序的两种实现方式
  17. 软件著作权可以更改名字吗?软著如何更改名字?
  18. Elementui蓝色阴影边框相关问题的解决方案
  19. plc做45度的正弦值
  20. 求任意整数模3的余数

热门文章

  1. Linux IPC实践(10) --Posix共享内存
  2. 十大经典排序算法(动态演示+代码)
  3. 协议形式化安全分析 Scyther 并非所有协议可以照抄就搬
  4. 创建Podfile,添加类库,中途添加库指令
  5. 实践作业三 结对项目
  6. 二分查找最大比较次数证明
  7. 信息学奥赛一本通(1026:空格分隔输出)
  8. 支配树(洛谷-P5180)
  9. C++语言基础 —— STL —— 算法 —— 排列组合算法
  10. 数论 —— 线性同余方程