这里需要用到两个标签,< collection >和< association >
< collection >用来表示一对多关系,如订单包含多个订单详情就可以用这个标签,主要用到两个属性:
property:属性名,可以理解为在该类型在父类型中的属性名
ofType:该属性所对应的POJO类型
< association >用来表示一对一关系,如订单详情对应一件商品,主要用到两个属性
property:属性名,可以理解为在该类型在父类型中的属性名
javaType:该属性所对应的POJO类型
特别注意,collection和association中描述POJO类型的属性名是不同的,collection是ofType,association是javaType
sql
为了方便重用,定了了三个sql标签,用来表示从三张表中索要查找的字段
orders.id orders_id,orders.user_id orders_user_id, orders.number orders_number,orders.createtime orders_createtime,orders.note orders_note
orderdetail.id orderdetail_id,orderdetail.orders_id orderdetail_orders_id, orderdetail.items_id orderdetail_items_id,orderdetail.items_num orderdetail_items_num
items.id items_id,items.name items_name,items.price items_price, items.detail items_detail,items.pic items_pic,items.createtime items_createtime
select标签
OrderResultMap就要勇当之前说过的collection和association标签,其余的部分与普通的resultMap的方式一样
POJO之间的关系,也相当于数据表之间的关系,只要定义好了主键和外键,mybatis会自动进行关联。
测试代码
package cn.elinzhou.mybatisTest.test; import cn.elinzhou.mybatisTest.mapper.OrdersMapper; import cn.elinzhou.mybatisTest.pojo.Orders; import cn.elinzhou.mybatisTest.pojo.OrdersCustrom; 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 org.junit.Before; import org.junit.Test; import java.io.Reader; import java.util.List; /** * Created by elin on 15-6-30. */ public class OrderMapperTest { SqlSession sqlSession = null; @Before public void setUp() throws Exception { // 通过配置文件获取数据库连接信息 Reader reader = Resources.getResourceAsReader("cn/elinzhou/mybatisTest/config/mybatis.xml"); // 通过配置信息构建一个SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 通过sqlSessionFactory打开一个数据库会话 sqlSession = sqlSessionFactory.openSession(); } @Test public void testFindOrders() throws Exception { OrdersMapper orderMapper = sqlSession.getMapper(OrdersMapper.class); List
list = orderMapper.findOrders(); System.out.println(list); } }