在前面的基础上继续看一对多的关联查询。
工程目录:
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.mybaits.onetomany.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>
测试:
package com.mybatis.test;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.mybaits.onetomany.model.Customer;
import com.mybaits.onetomany.model.Ticket;
public class Test {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
private static String resource ="config/mybatis-config.xml";
static {
try {
reader = Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param id
* @return
* 根据车票id查询相应乘客(车票对人是一对一的关系)
*/
public static void selectTicketById(int id) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
Ticket ticket = (Ticket) session.selectOne(
"com.mybaits.onetomany.model.TicketMapper.selectTicketById", id);
if (ticket == null)
System.out.println("null");
else {
System.out.println("车票信息:"+ticket);
System.out.println("乘客信息:"+ticket.getCustomer());
}
} finally {
session.close();
}
}
/**
* @param id
* @return
* 根据乘客姓名查询其拥有的车票信息(一个人可以有多张车票)
*/
public static void selectCustomerByName(String name){
SqlSession session = null;
try{
session = sqlSessionFactory.openSession();
Customer customer = (Customer)session.selectOne(
"com.mybaits.onetomany.model.CustomerMapper.selectCustomerByName",name);
if (customer == null){
System.out.println("null");
}else{
System.out.println(customer);
List<Ticket> tickets = customer.getTickets();
for (Ticket ticket : tickets) {
System.out.println(ticket);
}
}
}finally{
session.close();
}
}
public static void main(String[] args) {
// System.out.println("==============一对一查询,根据车票来查顾客===============");
// selectTicketById(1);
System.out.println("==============一对多查询,根据顾客来查车票===============");
selectCustomerByName("小王");
}
}