数据库表,请参照
MyBatis-高级映射之一对一 。
这里展示的一对多的例子:
1对1:从order表中查询对应的User信息 在配置文件中使用 association
1对多:从order表中查询对应orderdetail内容 在配置文件中使用collection
2.OrderUserOrderDetailMapper.xml配置
3.OrderUserOrderDetailMapper接口
<完>
这里展示的一对多的例子:
1对1:从order表中查询对应的User信息 在配置文件中使用 association
1对多:从order表中查询对应orderdetail内容 在配置文件中使用collection
1.原生sql语句:
mysql> select `order`.*, user.username, orderdetail.id, orderdetail.item_num fro
m `order`, user, orderdetail where (`order`.user_id=user.id) and (`order`.id = o
rderdetail.order_id);
+----+---------+--------+---------------------+----------+----+----------+
| id | user_id | number | createtime | username | id | item_num |
+----+---------+--------+---------------------+----------+----+----------+
| 1 | 1 | 3 | 2016-06-19 11:29:30 | high | 1 | 4 |
| 1 | 1 | 3 | 2016-06-19 11:29:30 | high | 2 | 3 |
| 1 | 1 | 3 | 2016-06-19 11:29:30 | high | 3 | 1 |
| 2 | 1 | 2 | 2016-06-18 12:23:20 | high | 4 | 1 |
| 2 | 1 | 2 | 2016-06-18 12:23:20 | high | 5 | 1 |
| 3 | 2 | 2 | 2016-05-12 12:22:20 | lily | 6 | 4 |
| 3 | 2 | 2 | 2016-05-12 12:22:20 | lily | 7 | 10 |
+----+---------+--------+---------------------+----------+----+----------+
2.OrderUserOrderDetailMapper.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="mapper.OrderUserOrderDetailMapper">
<resultMap id="orderUserOrderDetailMap" type="pojo.OrderUserOrderDetail">
<id column="id" property="id"/>
<result column="user_id" property="user_id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<!-- Order外键user_id关联的用户信息 -->
<association property="user" javaType="pojo.User">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="birthday" property="birthday"/>
</association>
<!-- Order对应的多个OrderDetail信息映射到集合中,注意这里的类型用的是ofType -->
<collection property="orderDetail" ofType="pojo.OrderDetail">
<id column="detail_id" property="id"/>
<result column="order_id" property="order_id"/>
<result column="item_id" property="item_id"/>
<result column="item_num" property="item_num"/>
</collection>
</resultMap>
<select id="selectOrderUserOrderDetailByResultMap" resultMap="orderUserOrderDetailMap">
select `order`.*, user.username, orderdetail.id as detail_id, orderdetail.item_num
from `order`, user, orderdetail
where (`order`.user_id=user.id) and (`order`.id = orderdetail.order_id);
</select>
</mapper>
3.OrderUserOrderDetailMapper接口
package mapper;
import java.util.List;
import pojo.OrderUserOrderDetail;
public interface OrderUserOrderDetailMapper {
List<OrderUserOrderDetail> selectOrderUserOrderDetailByResultMap() throws Exception;
}
4.测试代码
package test;
import java.io.InputStream;
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 mapper.OrderUserOrderDetailMapper;
import pojo.OrderUserOrderDetail;
public class UserOrderTest {
public static void main(String[] args) throws Exception{
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
OrderUserOrderDetailMapper orderUserOrderDetailMapper = session.getMapper(OrderUserOrderDetailMapper.class);
List<OrderUserOrderDetail> list = orderUserOrderDetailMapper.selectOrderUserOrderDetailByResultMap();
System.out.println(list);
}
}
<完>