Mybaits中映射关系一对多(二)

一对多的话,这里用到的是Customer跟LinkMan,一个customer对应多个linkman。(表的关系见hibernate映射关系中的表)

1、创建实体

LinkMan.java

package com.nieshenkuan.model;

public class LinkMan {
    // CREATE TABLE linkman(
    // lkm_id BIGINT(32) PRIMARY KEY auto_increment,
    // lkm_name VARCHAR(32) NOT NULL,
    // lkm_sex CHAR(1),
    // lkm_phone VARCHAR(16),
    // lkm_cus_id BIGINT(32),
    // CONSTRAINT fk_cus_lkm FOREIGN KEY(lkm_cus_id) REFERENCES customer(cus_id)
    // )ENGINE=INNODB CHARSET=utf8;
    private Long lkm_id;
    private String lkm_name;
    private Character lkm_sex;
    private String lkm_phone;
    private Long lkm_cus_id;

    public Long getLkm_id() {
        return lkm_id;
    }

    public void setLkm_id(Long lkm_id) {
        this.lkm_id = lkm_id;
    }

    public String getLkm_name() {
        return lkm_name;
    }

    public void setLkm_name(String lkm_name) {
        this.lkm_name = lkm_name;
    }

    public Character getLkm_sex() {
        return lkm_sex;
    }

    public void setLkm_sex(Character lkm_sex) {
        this.lkm_sex = lkm_sex;
    }

    public String getLkm_phone() {
        return lkm_phone;
    }

    public void setLkm_phone(String lkm_phone) {
        this.lkm_phone = lkm_phone;
    }

    public Long getLkm_cus_id() {
        return lkm_cus_id;
    }

    public void setLkm_cus_id(Long lkm_cus_id) {
        this.lkm_cus_id = lkm_cus_id;
    }

    @Override
    public String toString() {
        return "LinkMan [lkm_id=" + lkm_id + ", lkm_name=" + lkm_name + ", lkm_sex=" + lkm_sex + ", lkm_phone="
                + lkm_phone + ", lkm_cus_id=" + lkm_cus_id + "]";
    }
    

}

Customer.java

package com.nieshenkuan.model;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Customer {
//  CREATE table customer(
//          cus_id BIGINT(32) PRIMARY KEY auto_increment,
//          cus_name VARCHAR(32) NOT NULL,
//          cus_mobile VARCHAR(32) DEFAULT NULL,

//          )ENGINE=INNODB CHARSET=utf8;
    private Long cus_id;
    private String cus_name;
    private String cus_mobile;

    private List<LinkMan> linkMan;
    
    
    public Long getCus_id() {
        return cus_id;
    }
    public void setCus_id(Long cus_id) {
        this.cus_id = cus_id;
    }
    public String getCus_name() {
        return cus_name;
    }
    public void setCus_name(String cus_name) {
        this.cus_name = cus_name;
    }
    public String getCus_mobile() {
        return cus_mobile;
    }
    public void setCus_mobile(String cus_mobile) {
        this.cus_mobile = cus_mobile;
    }
    public List<LinkMan> getLinkMan() {
        return linkMan;
    }
    public void setLinkMan(List<LinkMan> linkMan) {
        this.linkMan = linkMan;
    }
    @Override
    public String toString() {
        return "Customer [cus_id=" + cus_id + ", cus_name=" + cus_name + ", cus_mobile=" + cus_mobile + ", linkMan="
                + linkMan + "]";
    }
    
    
    
}

2、创建CustomerMapper.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.nieshenkuan.dao.CustomerMapper">

    <resultMap type="com.nieshenkuan.model.Customer" id="customerResultMap">
        <id property="cus_id" column="cus_id" javaType="java.lang.Long"/>
        <result property="cus_name" column="cus_name" />
        <result property="cus_mobile" column="cus_mobile" />
        <collection property="linkMan" ofType="com.nieshenkuan.model.LinkMan"
            column="lkm_cus_id">
            <id property="lkm_id" column="lkm_id" javaType="java.lang.Long"
                jdbcType="INTEGER" />
            <result property="lkm_name" column="lkm_name" javaType="java.lang.String"
                jdbcType="VARCHAR" />
            <result property="lkm_sex" column="lkm_sex" javaType="java.lang.Character"
                jdbcType="CHAR" />
            <result property="lkm_name" column="lkm_name" javaType="java.lang.String"
                jdbcType="VARCHAR" />
            <result property="lkm_cus_id" column="lkm_cus_id" javaType="java.lang.Long"
                jdbcType="INTEGER" />
        </collection>
    </resultMap>
    
    
    <select id="getCustomer" resultMap="customerResultMap" parameterType="java.lang.Long">
        SELECT c.*,l.*
        FROM customer c, linkman l
        WHERE c.cus_id=l.lkm_cus_id and c.cus_id=#{cus_id}
  </select>


</mapper>

3、创建dao接口CustomerMapper.java

package com.nieshenkuan.dao;

import com.nieshenkuan.model.Customer;

public interface CustomerMapper {
    
    public Customer getCustomer(Long id);
}

4、将CustomerMapper.xml注册到sqlMapperConfig.xml文件中去

<mappers>
        <mapper resource="com/nieshenkuan/mapper/PersonMapper.xml"></mapper>
            <mapper resource="com/nieshenkuan/mapper/CustomerMapper.xml"></mapper>

    </mappers>

5、测试

package com.nieshenkuan.test;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.nieshenkuan.dao.CustomerMapper;
import com.nieshenkuan.model.Customer;
import com.nieshenkuan.util.MyBatisUtil;

public class TestOneToMany {
    @Test
    public void test1() throws IOException {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
/**
 * 这里是一对多的实例
 * 
 */
        /*1、一对多就是利用collection关键字来弄得。
         * 首先,这里是是从一的一方,通过查到一的一方,并把对应多的数据也查出来。
         * 一个顾客对应多个联系人。即一个customer对应多个linkman
         * */
        /*
         * 2、查找到customer,就能把所有的linkman也顺带查出来。
         * 这里也是通过外键的形式,外键建在多的一方,即linkman这一方
         * linkman这一数据库对应的实体有一个字段作为外键,指向customer的主键。
         * 从而从linkman到customer形成多对一的关系
         * 从customer到linkman形成一对多的关系。
         * 
         * 如果我们要从customer中找到多的一方,要用collection集合带出所有的查询结果。
         * 这点在mapper.xml文件中显现的很明显。
         * */
        CustomerMapper customerMapper=sqlSession.getMapper(CustomerMapper.class);
        Customer customer=customerMapper.getCustomer(2l);
        System.out.println(customer);
    }
}

6、测试结果

Customer [cus_id=2, cus_name=阿里巴巴, cus_mobile=null, linkMan=[LinkMan [lkm_id=3, lkm_name=马云, lkm_sex=null, lkm_phone=null, lkm_cus_id=2], LinkMan [lkm_id=4, lkm_name=基哥, lkm_sex=null, lkm_phone=null, lkm_cus_id=2]]]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • 目录 1. Hibernate框架的概述 1.1 Hibernate简介 1.2 为什么要学习Hibernate ...
    深海鱼Q阅读 1,013评论 0 14
  • 本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...
    廖少少阅读 3,462评论 9 66
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,559评论 18 399
  • 1、时刻记住,身体是革命的本钱。保持好的身材和体魄健康是第一位的。这带来的不仅仅是好的身体状态和精神状态,更是生活...
    龙猫不是猫吧阅读 183评论 0 0
  • 今天调动文件开始生效,接下来就是工作移交了。从基层部门到管理部门,虽然只有一个走廊宽度的距离,却恍如光年,即便我原...
    意贷阅读 164评论 0 0