mybatis注解方式一对多的多表联合查询的实现_mybatis 注解联合查询_代码邪皇的博客-程序员宅基地

技术标签: mybatis  mysql  

mybatis注解方式一对多的多表联合查询的实现

需求:实现查出所有的用户并且显示每个用户下的所有账户信息

  1. 准备实体类User2 和Account上代码:
package com.test.domain;

import java.util.Date;
import java.util.List;

/**
 * @author:shi jiaojie
 * @date:2019/6/26 20:15
 * @description:
 */
public class User2 {
    private Integer userid ;
    private String userusername ;
    private String usersex  ;
    private Date userbirthday   ;
    private String useraddress;
    private List<Account> accounts;

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUserusername() {
        return userusername;
    }

    public void setUserusername(String userusername) {
        this.userusername = userusername;
    }

    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;
    }

    public String getUseraddress() {
        return useraddress;
    }

    public void setUseraddress(String useraddress) {
        this.useraddress = useraddress;
    }

    public List<Account> getAccounts() {
        return accounts;
    }

    public void setAccounts(List<Account> accounts) {
        this.accounts = accounts;
    }

    @Override
    public String toString() {
        return "User2{" +
                "userid=" + userid +
                ", userusername='" + userusername + '\'' +
                ", usersex='" + usersex + '\'' +
                ", userbirthday=" + userbirthday +
                ", useraddress='" + useraddress + '\'' +
                ", accounts=" + accounts +
                '}';
    }
}

Account的实体类:

package com.test.domain;

/**
 * @author:shi jiaojie
 * @date:2019/6/26 20:15
 * @description:
 */
public class Account {
   private Integer id ;
   private Integer uid  ;
   private Double money;
    private 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;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", uid=" + uid +
                ", money=" + money +
                ", user=" + user +
                '}';
    }
}

User2 的dao层代码:

package com.test.dao;

import com.test.domain.User;
import com.test.domain.User2;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;

/**
 * @author:shi jiaojie
 * @date:2019/6/26 20:22
 * @description:
 */
public interface UserDao2 {
    public List<User2> findAll();
    //查询所有的用户记录并且显示该用户下的所有账号
    @Select("select * from user2 ")
    @Results(id = "userAccountMap",value = {
            @Result(id =true,property = "userid",column = "id"),
            @Result(property = "userusername",column = "username"),
            @Result(property = "usersex",column = "sex"),
            @Result(property = "userbirthday",column = "birthday"),
            @Result(property = "useraddress",column = "address"),
            @Result(property = "accounts" ,column = "id",many = @Many(select="com.test.dao.AccountDao.findByUid",fetchType = FetchType.LAZY))
    })
    public List<User2> findAll2();
}

Account的dao层代码:

package com.test.dao;

import com.test.domain.Account;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author:shi jiaojie
 * @date:2019/6/26 20:22
 * @description:
 */
public interface AccountDao {
    //通过uid查询用户
    @Select("select * from account2 where uid=#{uid}")
    public List<Account> findByUid(int uid);
}

开始测试了上代码:

//查询所有的用户并且显示用户的所有账号信息
    @Test
    public void findAl2() {
        List<User2> list = mapper.findAll2();
        for (User2 user2 : list) {
            System.out.println(user2);
        }
    }

最后的运行结果:
在这里插入图片描述谢谢浏览,如有问题欢迎在下面提问交流。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36228916/article/details/93872883

智能推荐

第18章 Class文件结构_你好世界wxx的博客-程序员宅基地

第18章 Class文件结构来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 概述作为Java程序员,为什么我们需要接触字节码文件?字节码文件的跨平台性Java语言:跨平台的语言(write once, run anywhere)当Java源代码成功编译成字节码后,如果想在不同平台运行,则无需再次编译这个优势不再那么吸引人了。Python、PHP、Perl、Ruby、Lisp等有强大的编译器跨平台似乎已经快成为一门语言必选的特性了Java虚拟机:跨语言的平台

echarts-市地图_echarts 市地图-程序员宅基地

echarts-深圳市地图这里,我选择绘制的是深圳市地图,只展示区。数据来源于高德开放平台,部分可能存在误差:1.数据来源数据来源地址:http://datav.aliyun.com/tools/atlas/index.html#&lat=22.859177836173288&lng=113.68440594166313&zoom=12.5在下图中区域,先选择省份,然后再从省份区域图中选择想要的市(我选择的市深圳市),选择市后,右边会有对应的市API和JSON。注意看右边当前_echarts 市地图

申请的流量卡提示“审核失败收货地址不支持配送”,你知道原因吗_买流量卡一直审核失败-程序员宅基地

比如云南、广西、福建、新疆、西藏五大省份,还有一些市县,比如广东茂名市、四川德阳市、海南海口市等,这些地区经常出现诈骗案件,属于被重点监控地区,如果将卡发到这些地区,很容易被不法分子用于违法途径,所以运营商基本都会从源头切断,禁止这些地方的发卡。除了敏感地区外,有些特定的优惠卡,也是有区域限制,比如:你在北京办理的流量卡,因为套餐冲突或者因为消费水平不同,因为不能在河北使用,但是可以在除河北以外的地区使用,所以河北就成了限制地区,不能申请。这个很好理解,疫情地区不发货,或者晚发货,这个一般都会说明。..._买流量卡一直审核失败

pmsm仿真 matlab 转子转角波形,MATLAB/SIMULINK永磁同步电机矢量控制系统仿真_社长本人的博客-程序员宅基地

Abstract:The vector control system of PMSM(Permanent Magnetic Synchronization Motor) has a wide application prospect in the fields of industrial control and medical treatment etc. The simulation resea...

OpenGL ES:EGL接口解析与理解-程序员宅基地

本文介绍:EGL接口与初始化介绍,Android系统上EGL的一些理解一.EGL 介绍通俗上讲,OpenGL是一个操作GPU的API,它通过驱动向GPU发送相关指令,控制图形渲染管线状态机的运行状态。但OpenGL需要本地视窗系统进行交互,这就需要一个中间控制层,最好与平台无关。EGL——因此被独立的设计出来,它作为OpenGL ES和本地窗口的桥梁。EGL 是 OpenGL ES

随便推点

如何在matlab里输入复杂公式_[转载]如何在Matlab绘制的图形中显示复杂公式-程序员宅基地

Matlab文本的Interpreter属性使我们能在图形中显示一个较为复杂的公式,例如在公式中除了有希腊字母外,还有分号、根号等数学符号。当键入:>> set(text,'Interpreter')Matlab将返回'Interpreter'所包含的属性值:[ latex | {tex} | none ]。默认值是tex。Tex的用法在Matlab的帮助文档里有详细介绍,这里主要介绍...

SAMBA服务-程序员宅基地

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。早期在客户端和服务器端传输文件使用FTP,但是

python_基础总结1 python由来 字符编码 注释 pyc文件 python变量 导入模块 获取用户输入 流程控制if while-程序员宅基地

1 Python前世今生python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。 最新的TIOBE排行榜,Python赶超PHP占据第五!!!由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到

pandas案例(一)-程序员宅基地

案例:对于这一组电影数据,如果我们想runtime的分布情况,应该如何呈现数据?import pandas as pdfrom matplotlib import pyplot as plt#pandas读取外部数据df = pd.read_csv("D:/test/youtube_video_data/IMDB-Movie-Data.csv")print(df.head())print(df.info())#获取时间列数据runtime_data = df["Runtime (Mi

vivado HLS硬件化指令(四)卷积相关的指令优化-程序员宅基地

目的:搞懂与卷积相关的HLS硬件指令。目录INLINE指令p316UNROLL指令P154 UNROLL停止的判断LATENCY指令 P164FUNCTION_INSTANTIATE P174RESOURCE P178DATAFLOW P157 DATAFLOW运用的限制 DATAFLOW不支持:不是single-producer-...

数据库原理_ 存储过程与触发器_存储过程实现触发器功能-程序员宅基地

七、存储过程与触发器1、要求1、执行存储过程时,实参数等于存储过程中形参数;实参数少于存储过程中形参数;2、执行存储过程;通过对表操作触发激发触发器执行并查看结果。实验环境:MySQL实验步骤1. 定义存储过程① 创建一个能向学生表Student中插入一条记录的存储过程Insert_student,该存储过程需要五个参数,分别用来传递学号、姓名、班级号、性别、出生日期5个值。插入一条记录的存储过程Insert_student:②执行存储过程Insert_student,向Student表中_存储过程实现触发器功能

推荐文章

热门文章

相关标签