mybatis学习笔记(十)一对多关联表查询

在前面的基础上继续看一对多的关联查询。

工程目录:



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("小王");  
	  
	    }  
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值