MyBatis使用篇(六)—— MyBatis关联查询

1、建立测试数据模型

1.1 业务模型分析

  该测试案例模拟一个银行批量购买理财产品的业务。用户在网银理财购买页面勾选多款理财产品(如10款),然后网银系统生成一个批次号,该批次号对应这一批(如10款)的理财产品数据,一批中的每一款理财产品会有一个产品号,对应该理财产品的信息。

  批量转账的业务逻辑涉及4张表,分别是用户表、批次表、批次明细表和理财产品表。
在这里插入图片描述
  这里的customer表对应购买的理财产品的用户信息表。batch表存放购买的一批理财产品的批次信息。finacial_products表中存储了每一个理财产品的详细信息。batchdetail表为批次明细表,它是一张中间表,指定对应的一批购买包含了哪些理财产品,对应的理财产品属于哪个购买批次。

  在实体-关系模型中,一个用户可以购买多个批次的理财产品,多个批次的产品也能被同一个用户购买;一个产品批次中包含多个理财产品,而一个理财产品也能被多个产品批次包含。
在这里插入图片描述

1.2 根据业务创建测试表

  创建finacial_products表(理财产品表),并插入如下测试数据,具体SQL语句代码如下:

DROP TABLE IF EXISTS `finacial_products`;

CREATE TABLE `finacial_products` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL COMMENT '理财产品名称',
  `price` float(10,1) NOT NULL COMMENT '理财产品定价',
  `detail` text COMMENT '理财产品描述',
  `pic` varchar(64) DEFAULT NULL COMMENT '理财产品图片',
  `invasttime` datetime NOT NULL COMMENT '理财产品收益日期',
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

/*Data for the table `finacial_products` */

insert  into `finacial_products`(`product_id`,`name`,`price`,`detail`,`pic`,`invasttime`) values (1,'一起富',5000.0,'投资少,风险小','img001','2017-06-21 00:00:00'),(2,'惠薪富',10000.0,'收益稳健','img002','2017-05-03 00:00:00'),(3,'安富尊容',15000.0,'年收益率提升5%','img003','2017-07-18 00:00:00'),(4,'富津利',2000.0,'企划收益率','img004','2017-04-11 00:00:00');

  创建后的数据表如下所示:
在这里插入图片描述
  创建customer表(用户表),并插入如下测试数据,具体SQL语句代码如下:


DROP TABLE IF EXISTS `customer`;

CREATE TABLE `customer` (
  `cus_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `acno` varchar(32) DEFAULT NULL COMMENT '卡号',
  `gender` varchar(4) DEFAULT NULL COMMENT '性别',
  `phone` varchar(256) DEFAULT NULL COMMENT '电话',
  PRIMARY KEY (`cus_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

/*Data for the table `customer` */

insert  into `customer`(`cus_id`,`username`,`acno`,`gender`,`phone`) values (1,'刘云','6228286666666','男','13800000000'),(2,'李健','622848111111','男','13811111111'),(3,'张丽丽','622848333333','女','13822222222');

  创建后的数据表如下所示:
在这里插入图片描述
  创建batch表(批次表),并插入如下测试数据,具体SQL语句代码如下:

DROP TABLE IF EXISTS `batch`;

CREATE TABLE `batch` (
  `batch_id` int(11) NOT NULL AUTO_INCREMENT,
  `cus_id` int(11) NOT NULL COMMENT '创建批次用户id',
  `number` varchar(32) NOT NULL COMMENT '批次编码',
  `createtime` datetime NOT NULL COMMENT '创建批次时间',
  `note` varchar(100) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`batch_id`),
  KEY `FK_batch_1` (`cus_id`),
  CONSTRAINT `FK_batch_id` FOREIGN KEY (`cus_id`) REFERENCES `customer` (`cus_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

/*Data for the table `batch` */

insert  into `batch`(`batch_id`,`cus_id`,`number`,`createtime`,`note`) values (1,1,'00001','2017-07-22 00:00:00','首次购买'),(2,3,'00002','2017-03-11 00:00:00','委托购买');

  创建后的数据表如下所示:
在这里插入图片描述
  创建batchdetail表(批次明细表),并插入如下测试数据,具体SQL语句代码如下:

DROP TABLE IF EXISTS `batchdetail`;

CREATE TABLE `batchdetail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `batch_id` int(11) NOT NULL COMMENT '批次id',
  `product_id` int(11) NOT NULL COMMENT '理财产品id',
  `product_num` int(11) DEFAULT NULL COMMENT '理财产品购买数量',
  PRIMARY KEY (`id`),
  KEY `FK_batchdetail_1` (`batch_id`),
  KEY `FK_batchdetail_2` (`product_id`),
  CONSTRAINT `FK_batchdetai_1` FOREIGN KEY (`batch_id`) REFERENCES `batch` (`batch_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_batchdetai_2` FOREIGN KEY (`product_id`) REFERENCES `finacial_products` (`product_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

/*Data for the table `batchdetail` */

insert  into `batchdetail`(`id`,`batch_id`,`product_id`,`product_num`) values (1,1,1,2),(2,1,2,1),(3,1,3,1),(4,2,1,2),(5,2,2,1);

  创建后的数据表如下所示:
在这里插入图片描述

1.3 创建实体类

  在com.ccff.mybatis.model包下创建名为“FinacialProduct”的实体类,具体代码如下:

package com.ccff.mybatis.model;

import java.util.Date;
import java.util.Set;

public class FinacialProduct {
   
    private int product_id;
    private String name;
    private float price;
    private String detail;
    private String pic;
    private Date invasttime;
    private Set<Batch> batches;

    public int getProduct_id() {
   
        return product_id;
    }

    public void setProduct_id(int product_id) {
   
        this.product_id = product_id;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public float getPrice() {
   
        return price;
    }

    public void setPrice(float price) {
   
        this.price = price;
    }

    public String getDetail() {
   
        return detail;
    }

    public void setDetail(String detail) {
   
        this.detail = detail;
    }

    public String getPic() {
   
        return pic;
    }

    public void setPic(String pic) {
   
        this.
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值