第一步:数据源和domain
第二步:接口OrderMapper
package it.heima.dao;
import it.heima.domain.Order;
import org.apache.ibatis.annotations.Param;
public interface OrderMapper {
//需求:根据订单号 查询订单,查询出所属用户,并且查询出订单的详情,及订单详情中的对应的商品信息
public Order queryOrderWithUserAndOrderItemsAndProductByOrderNumber(@Param("orderNumber") String ordernumber);
}
第三步:OrderMapper.xml文件
注意事项:property标签里面的都必须在domain中找到对应的成员变量
在成员变量是list集合时,必须 <collection property="orderitemList" javaType="list" ofType="Orderitem"/>
<?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="it.heima.dao.OrderMapper">
<resultMap id="queryOrderWithUserAndOrderItemsAndProductByOrderNumber" type="Order" autoMapping="true">
<!--关联订单表主键-->
<id property="oid" column="oid" javaType="int"/>
<!--订单表与用户表是多对一的关系-->
<association property="user" javaType="User" autoMapping="true">
<!--关联用户表主键-->
<id property="id" column="id" javaType="long"/>
</association>
<!--订单表与订单详情表是多对多关系-->
<collection property="orderitemList" javaType="list" ofType="Orderitem" autoMapping="true">
<!--关联订单详情表主键-->
<id property="itemId" column="item_id"/>
<!--订单详情表与产品表是多对一的关系-->
<association property="product" javaType="Product" autoMapping="true">
<!--关联产品表的主键-->
<id property="pid" column="pid"/>
</association>
</collection>
</resultMap>
<!--需求:根据订单号 查询订单,查询出所属用户,并且查询出订单的详情,及订单详情中的对应的商品信息-->
<select id="queryOrderWithUserAndOrderItemsAndProductByOrderNumber" resultMap="queryOrderWithUserAndOrderItemsAndProductByOrderNumber"> //resultMap名字必须和上面的一致
SELECT * FROM tb_order o
LEFT JOIN tb_user u ON o.user_id=u.id
LEFT JOIN tb_orderitem oi ON o.oid=oi.order_id
LEFT JOIN tb_product p ON oi.product_id=p.pid
WHERE o.order_number=#{orderNumber}
</select>
</mapper>
第四步:mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--导入配置文件-->
<properties resource="jdbc.properties"/>
<!--开启驼峰标识-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--开启自动扫描包-->
<typeAliases>
<package name="it.heima"/>
</typeAliases>
<!--配置数据库连接对象-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--导入mapper文件-->
<mappers>
<mapper resource="OrderMapper.xml"/>
</mappers>
</configuration>
第五步:测试
public class OrderMapperTest {
@Test
public void queryOrderWithUserAndOrderItemsAndProductByOrderNumber() throws Exception {
//---------注册mybatis-config,获得具体mapper---------------
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
//---------根据方法,查询------------------------
Order order = mapper.queryOrderWithUserAndOrderItemsAndProductByOrderNumber("20140921001");
System.out.println(order);
}
}