Mybatis(19)注解实现多表查询
两个类,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)注解实现多表查询相关推荐
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- Mybatis入门:4(多表查询操作)
多表查询操作 Mybatis的多表操作 表之间的关系有几种:一对多.一对一.多对一.多对多 举例: 用户和订单就是一对多--一个用户可以下多个订单 订单和用户就是多对一--多个订单属于同一个用户 人和 ...
- MyBatis Plus 如何实现连表查询 mybatis plus join
mybatis-plus-join 项目地址 gitee github 使用方法 安装 Maven <dependency><groupId>com.github.yulich ...
- SpringBoot+MyBatis 基于xml实现多表查询的两种方式
1.创建SpringBoot项目,导入依赖 <dependencies><dependency><groupId>org.springframework.boot& ...
- MyBatis——@Result注解column参数传递——父查询函数的参数传递到子查询
问题描述 假设a方法中传入一个带查询参数x 但是a方法的查询结果中不包含参数x 而子查询里也需要参数x 如何在子查询b中带入参数x /*** 按User表中platform查询User*/@Selec ...
- Mybatis(1)---入门篇单表查询
1.Mybatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...
- Mybatis(14)多表查询
准备工作 新建项目day03_eesy_03one2many复制day03_eesy_02dynamicSQL项目 1.账户表创建 CREATE TABLE `account` (`ID` INT(1 ...
- MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)
MyBatis多表查询 多表模型分类 一对一:在任意一方建立外键,关联对方的主键. 一对多:在多的一方建立外键,关联一的一方的主键. 多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键. 数 ...
- @MyBatis注解实现动态模糊查询
@使用MyBatis注解的方式实现动态模糊且多表查询 一.使用环境及基本信息: 1.项目环境及框架:JDK1.8 + Maven + SpringBoot + MyBatis 2.使用的插件:TkMa ...
最新文章
- python中的协程(二)
- ubuntu 安装eclipse neon版本
- ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析解决方法
- [转载]关于Java reference的一篇博文
- linux——管理系统设备之vsftpd服务
- .obj格式的文件怎么显示在html_怎么才能把安卓手机备忘录便签里的文件转到苹果上?...
- 190819每日一句
- linux嵌入式入门到精通视频教程 Linux开发工程师培训教程
- Windows内核编程(二)-第一个内核程序
- 电务段子系统网络管理服务器,CSM-TD铁路电务管理信息系统
- java下载网络文件的几种方式
- 网易云音乐基于用户的推荐系统
- spring boot layui table.render 加载不了cols
- 小鸡啄米之React事件处理
- 唐巧的iOS技术博客好文列表
- jqGrid排序的两种实现方式
- 软件著作权可以更改名字吗?软著如何更改名字?
- Elementui蓝色阴影边框相关问题的解决方案
- plc做45度的正弦值
- 求任意整数模3的余数