?
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里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属