Mybatis关联查询一对一和一对多的实现(二)

2015-07-24 09:22:54 · 作者: · 浏览: 6
icketId + ", ticketAddress=" + ticketAddress + ", ticketPrice=" + ticketPrice + ", ticketCId=" + ticketCId + "]"; } } 注意Customer.java:中有个list,list来存放车票,Ticket.java中有一个 customer。

?

3、定义sql映射文件

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

MyBatis中使用collection标签来解决一对一的关联查询,collection标签可用的属性如下:property:指的是集合属性的值ofType:指的是集合中元素的类型column:所对应的外键字段名称select:使用另一个查询封装的结果

  
  
  
   
      
          
          
               
          
          
          
              
              
              
              
          
        
      
      
      
      
   

  

(2)接着是一对一关联:

?

MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:property:对象属性的名称javaType:对象属性的类型column:所对应的外键字段名称select:使用另一个查询封装的结果

  
  
  
      
      
          
          
          
          
          
          
          
              
              
              
          
      
      
      
  

4、总配置文件

?

  
  
  
  
      
      
          
          
      
      
      
      
          
              
              
              
                
               
                
              
          
      
      
      
      
          
           
      
  

5、测试

?

?

package com.mucfc.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.mucfc.model.Customer;
import com.mucfc.model.Ticket;

public class Test {
	private static SqlSessionFactory sqlSessionFactory;
	private static Reader reader;
	static {
		try {
			reader = Resources.getResourceAsReader("mybatis-config.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/*
	 * 一对一关联查询
	 */
	public static void selectTicketById(int id) {
		SqlSession session = null;
		try {
			session = sqlSessionFactory.openSession();
			Ticket ticket = (Ticket) session.selectOne(
					"com.mucfc.model.TicketMapper.selectTicketById", id);
			if (ticket == null)
				System.out.println("null");
			else {
				System.out.println(ticket);
				System.out.println(ticket.getCustomer());
			}
		} finally {
			session.close();
		}
	}

	/*
	 * 一对多关联查询
	 */
	public static void selectCustomerByName(String string) {
		SqlSession session = null;
		try {
			session = sqlSessionFactory.openSession();
			Customer customer = (Customer) session
					.selectOne(
							"com.mucfc.model.CustomerMapper.selectCustomerByName",
							string);
			if (customer == null)
				System.out.println("null");
			else {
				System.out.println(customer);
				List
  
    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("小王");

	}

}

  

结果:

?

\

结果显示,查询正确。

三、ResultMap标签                        

?

?

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属