springmvc-mybatis之一对多映射

本文介绍了如何在SpringMVC和MyBatis中实现一对多查询,通过订单表和订单详情表的例子,展示了从需求分析到Mapper、Controller、配置文件以及JSP页面的完整实现过程。此外,还分享了一些MyEclipse的调试快捷键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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--一直执行到下一个断点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值