1.首先来个需求
1.一个订单表和一个订单详情表,一个订单可以有多个订单详情,订单详情里面主要记录了购买商品的名称以及数量。那么,现在要查询一个订单的详细情况。也就是说这是一对多查询,从订单表里用其id查询订单详情表的所有记录。
2. 实现
2.1首先实现mepper.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">
<!-- 开发规范: 1.命名空间必须与包名一样 -->
<mapper namespace="com.ssm.mapping.OrderMapper">
<!-- 查询一个订单以及订单详情
一个订单可以有多个订单详情
也就是一对多关系
-->
<!--
定义resultmap
-->
<resultMap type="order" id="orderAndOrderDetail">
<id column="id" property="id"/>
<result column="user_id" property="user_id"/>
<result column="number" property="number"/>
<result column="create_time" property="create_time"/>
<result column="note" property="note"/>
<!--这里的id使用items_id标示不一样的商品详情-->
<collection property="list" ofType="orderDetail">
<id column="items_id" property="id"/>
<result column="items_id" property="items_id"/>
<result column="items_num" property="items_num"/>
</collection>
</resultMap>
<select id="findOrderAndOrderDetail" resultMap="orderAndOrderDetail">
SELECT
orders.*,
orderdetail.items_id,
orderdetail.items_num
FROM
orders,
orderdetail
WHERE orderdetail.orders_id = orders.id AND orders.id=3
</select>
</mapper>
2.2实现mapper.java
package com.ssm.mapping;
import com.ssm.model.Order;
public interface OrderMapper {
//一个订单可有多个订单详情函数名必须与mapper.xml中的id一致,
public Order findOrderAndOrderDetail();
}
2.3实现springmvc的控制器
package com.ssm.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.ssm.mapping.OrderMapper;
import com.ssm.model.Order;
@Controller
@RequestMapping("/order")
public class OrderController {
//自动注入
@Autowired
private OrderMapper ordermapper;
@RequestMapping(value="/findorder",method=RequestMethod.GET)
public String findOrderAndOrderDetail(HttpServletRequest request)
{
Order order = ordermapper.findOrderAndOrderDetail();
request.setAttribute("order", order);
return "order_detail";
}
}
2.4编写spring配置文件ordermapper生成实例,感觉这里应该有更好的方法实现,不然每次都要配置太麻烦,留着以后解决
<!-- 基于mapper代理的dao 开发不需要dao实现类 不能与原始dao接口开发一起使用 会造成原始的dao开发无法映射到相应的xml-->
<bean id="ordermapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 构造方法需要两个参数sqlsessionfactory 与 mapperInterface -->
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
<property name="mapperInterface" value="com.ssm.mapping.OrderMapper"></property>
</bean>
<!-- 页面处理器根据返回的字符串寻找jsp文件-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value="/WEB-INF/views/"></property>
<property name = "suffix" value = ".jsp"></property>
</bean>
2.5jsp页面
<body>
<p>订单id:${requestScope.order.id}</p>
<p>订单number:${requestScope.order.number}</p>
<p>订单user_id:${requestScope.order.user_id}</p>
<p>订单create_time:${requestScope.order.create_time}</p>
<p>订单note:${requestScope.order.note}</p>
<table border="1">
<tr><th>商品id</th><th>商品数量</th></tr>
<c:forEach items="${requestScope.order.list}" var="orderdetail">
<tr>
<td>${orderdetail.items_id}</td>
<td>${orderdetail.items_num}</td>
</tr>
</c:forEach>
</table>
</body>
2.6如果需要使用mybatis的配置,如使用别名,那么加上mybatis的配置文件
<?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>
<typeAliases>
<!-- 批量定义别名 别名为类名 首字母大小写均可-->
<package name="com.ssm.model"/>
</typeAliases>
</configuration>
以上,还有一些关于myeclipse调试快捷键
F5 --单步调试进入函数内部,注意使用,进入jar包内部就没必要了。
F6 --单步调试不进入函数内部,
F7 --由函数内部返回到调用处。
F8--一直执行到下一个断点。