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("小王"); } }
相关文章推荐
- Linux磁盘管理
- structs框架结构
- vs2010编译最新live555
- zabbix短信接口调用
- OC_UIColor 类扩展支持十六进制
- 《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
- 拥有300万安装量的应用是如何恶意推广刷榜的?
- 进军硅谷 数位重组
- oracle基础一
- TCP option 3, Window Scale
- HDU 1254 推箱子 (BFS + DFS)
- spring 事务详解
- des+base加密解密
- Android Activity的四种launchmode
- mysql sql语句的用法
- angularjs自定义指令的用法
- C语言 二叉树的链式存储实例
- Leetcode 206. Reverse Linked List (Easy) (cpp)
- [转] 四种常见的 POST 提交数据方式
- 简陋hash算法