【Mybatis】Mybatis关联查询一对一和一对多的实现

林炳文Evankaka原创作品。转载请注明出处

本文主要讲了使用Mybatis实现关联查询,分为一对一和一对多两种情况,最后并对ResultMap进行一个简要说明。

本文工程免费下载

一、创建表、分析

下面是两表,一个是顾客表,一个是车票表。一个顾客可以对应多张车票,但是一张车票只能对应一个顾客

t_customer:顾客表,一个顾客可以对应多张车票

t_ticket:车票表,一张车票只能对应一个顾客

1、创建数据表及插入初始数据

创建数据表

use test;DROP TABLE IF EXISTS t_customer;CREATE TABLE t_customer(customerId INT PRIMARY KEY AUTO_INCREMENT,customerName VARCHAR(20) NOT NULL,customerTel INT NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;DROP TABLE IF EXISTS t_ticket;CREATE TABLE t_ticket(ticketId INT PRIMARY KEY AUTO_INCREMENT,ticketAddress VARCHAR(50) NOT NULL,ticketPrice INT NOT NULL,ticketCId INT NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;插入数据:use test;insert into t_customer values(1,’小王’,1888327654);insert into t_customer values(2,’天天’,3456546354);insert into t_customer values(3,’阿大’,123345566);insert into t_ticket values(1,’武汉到重庆’,100,1);insert into t_ticket values(2,’北京到上海’,200,1);insert into t_ticket values(3,’深圳到广州’,50,1);传统的联合查询的方法select c.*,t.* from t_customer c JOIN t_ticket t ON (c.customerId=t.ticketCId) where c.customerName =’小王’;

结果如下:

二、工程创建

1、新建java工程,导入需要的包,最后整个工程目录 如下:

2、创建表对应的类:

Customer.java:

package com.mucfc.model;import java.util.List;/** *顾客信息类 *@author linbingwen *@2015年5月13日8:30:12 */public class Customer {private Integer customerId;private String customerName;private Integer customerTel;private List<Ticket> tickets;//使用一个List来表示车票public List<Ticket> getTickets() {return tickets;}public void setTickets(List<Ticket> tickets) {this.tickets = tickets;}public Integer getCustomerId() {return customerId;}public void setCustomerId(Integer customerId) {this.customerId = customerId;}public String getCustomerName() {return customerName;}public void setCustomerName(String customerName) {this.customerName = customerName;}public Integer getCustomerTel() {return customerTel;}public void setCustomerTel(Integer customerTel) {this.customerTel = customerTel;}@Overridepublic String toString() {return "Customer [customerId=" + customerId + ", customerName="+ customerName + ", customerTel=" + customerTel+"]";}}

Ticket.java:

package com.mucfc.model;/** *车票信息类 *@author linbingwen *@2015年5月13日8:30:12 */public class Ticket {private Integer ticketId;private String ticketAddress;private Integer ticketPrice;private Integer ticketCId;private Customer customer;//使用一个customer来表示顾客public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}public Integer getTicketId() {return ticketId;}public void setTicketId(Integer ticketId) {this.ticketId = ticketId;}public String getTicketAddress() {return ticketAddress;}public void setTicketAddress(String ticketAddress) {this.ticketAddress = ticketAddress;}public Integer getTicketPrice() {return ticketPrice;}public void setTicketPrice(Integer ticketPrice) {this.ticketPrice = ticketPrice;}public Integer getTicketCId() {return ticketCId;}public void setTicketCId(Integer ticketCId) {this.ticketCId = ticketCId;}@Overridepublic String toString() {return "Ticket [ticketId=" + ticketId + ", ticketAddress="+ ticketAddress + ", ticketPrice=" + ticketPrice+ ", ticketCId=" + ticketCId + "]";}}注意Customer.java:中有个list,list来存放车票,Ticket.java中有一个customer。

3、定义sql映射文件

(1)首先是一对多关联:

MyBatis中使用collection标签来解决一对一的关联查询,collection标签可用的属性如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"""><mapper namespace="com.mucfc.model.CustomerMapper"> <!–定义数据库字段与实体对象的映射关系–><resultMap type="Customer" id="customerBean"><id column="customerId" property="customerId"/><result column="customerName" property="customerName"/><result column="customerTel" property="customerTel"/><!– 一对多的关系 –><!– property: 指的是集合属性的值, ofType:指的是集合中元素的类型 –><collection property="tickets" ofType="Ticket"><id column="ticketId" property="ticketId"/><result column="ticketAddress" property="ticketAddress"/><result column="ticketPrice" property="ticketPrice"/><result column="ticketCId" property="ticketCId"/></collection></resultMap><!– 根据id查询Person, 关联将Orders查询出来 –><select id="selectCustomerByName" parameterType="string" resultMap="customerBean">select c.*,t.* from t_customer c,t_ticket t where c.customerId=t.ticketCId and c.customerName =#{customerName};</select> </mapper>(2)接着是一对一关联:而是自己。在你成功地把自己推销给别人之前,

【Mybatis】Mybatis关联查询一对一和一对多的实现

相关文章:

你感兴趣的文章:

标签云: