您的位置:首页 > 其它

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

2016-07-12 15:38 253 查看
在前面的基础上继续看一对多的关联查询。

工程目录:

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

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: