关键词:
day02_SSM综合案例
一、课程目标
1. 【掌握】订单管理查询
2. 查询所有订单信息
3. 理解关系--mybatis;一对多 一对一
4. 理解 订单详情
二、订单管理
2.1 查询所有订单
2.1 订单表关系结构图
2.2 创建相应的实体类
//会员类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Member
private int id;
private String name;
private String nickName;
private String phoneNum;
private String email;
//旅客类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Traveller
private int id;
private String name;
private String sex;
private String phoneNum;
private int credentialsType;//'证件类型 0身份证 1护照 2军官证',
private String credentialsNum;// '证件号码',想到 正则表达式,要求会使用别人写好的
private int travellerType;//'旅客类型(人群) 0 成人 1 儿童',
//订单类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order
private int id;
private String orderNum;
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
private Date orderTime;
private int peopleCount;
private String orderDesc;
private int payType;//'支付方式(0 支付宝 1微信 2 其他'
private int orderStatus;// '订单状态(0未支付1已支付)',
private int productId;// '产品id外键',
private int memberId;// '会员(联系人)id外键',
private String orderTimeStr; //在需要修改的成员变量后加Str
private Product product;
private List<Traveller> travellers;
//1.获取日期格式化信息;
public String getOrderTimeStr()
// 对日期格式化
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
if (null != orderTime)
orderTimeStr = dateFormat.format(orderTime);
return orderTimeStr;
public String getPayTypeStr()
String pageTypeStr; //将这个变量返回一下
switch (payType)
case 0:pageTypeStr="支付宝";break;
case 1:pageTypeStr="微信";break;
default:pageTypeStr="其他";break;
return pageTypeStr;
public String getOrderStatusStr() // 复习了三元运算符; 嵌套会吗?
return orderStatus==0? "未支付":"已支付";
编写OrderMapper
public interface OrderMapper
List<Order> findAll();
编写OrderService
public interface OrderService
List<Order> findAll();
实现类
@Service
public class OrderServiceImpl implements OrderService
@Autowired
private OrderMapper orderMapper;
@Override
public List<Order> findAll()
return orderMapper.findAll();
编写OrderController
@Controller
@RequestMapping("/order")
public class OrderController
@Autowired
private OrderService orderService;
/**
* 分页查询所有订单
* @param page
* @param limit
* @return
*/
@RequestMapping("/findAll")
public ModelAndView findAll(@RequestParam(name = "page",defaultValue = "1")int pageNum,
@RequestParam(name = "limit",defaultValue = "5")int pageSize)
//利用分页,赋值
Page page= PageHelper.startPage(pageNum,pageSize);
ModelAndView mv=new ModelAndView();
// 查询数据
List<Order> orderList = orderService.findAll();
PageInfo pageInfo=new PageInfo(orderList);
//为mv设置对象
mv.addObject("pageInfo",pageInfo);
mv.setViewName("order-list");
return mv;
编写OrderMapper.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="cn.yh.mapper.OrderMapper">
<!--查询订单,查询订单对应的产品-->
<resultMap id="findAll_product" type="com.yh.pojo.Orders" autoMapping="true">
<association property="product" column="productId" select="com.yh.mapper.ProductMapper.selectById">
</association>
</resultMap>
<select id="selectAll" resultMap="findAll_product">
select * from orders
</select>
</mapper>
测试
总结:这里建议使用findAll,注意和之前的Product的定义保持一致,再次来理解restful风格。
好处:前后端分离开发,风格统一;
/项目名/product/findAll
/项目名/order/findAll
/项目名/user/findAll
2.2 订单详情
查询订单详情流程
点击订单详情,查询当前订单关联信息在页面显示
2.1 5表关联查询
select *,o.id oid,p.id pid,t.id tid,t.`name` tname,t.phoneNum tnum
from orders o
left join product p on o.productId=p.id
left join member m on o.memberId=m.id
left join order_traveller ot on o.id=ot.orderId -- 这些继续和游客表建立关联;
left join traveller t on ot.travellerId=t.id
where o.id=1
2.2 Member实体类
//会员类 代码同上
Traveller实体类
//旅客类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Traveller
private int id;
private String name;
private String sex;
private String phoneNum;
private int credentialsType;//'证件类型 0身份证 1护照 2军官证',
private String credentialsNum;// '证件号码',
private int travellerType;//'旅客类型(人群) 0 成人 1 儿童',
private String credentialsTypeStr;
private String travellerTypeStr;
public String getCredentialsTypeStr()
String typeStr="";
switch (credentialsType)
case 0:typeStr="身份证";break;
case 1:typeStr="护照";break;
case 2:typeStr="军官证";break;
return typeStr;
public String getTravellerTypeStr()
return travellerType==0?"成人":"儿童";
编写OrderMapper
public interface OrderMapper
//根据id查询订单详细信息
public Order findById(int id);
编写Orderervice
//2.根据id来查询订单;
public Order findById(Integer id);
实现类
public Order findById(Integer id)
return orderMapper.findById(id);
编写OrderController
@RequestMapping("/findById")
public String findById(HttpServletRequest request,int id)
Order order = ordersService.findById(id);
request.setAttribute("order",orders);
return "order-show";
编写OrderMapper.xml
方式一:
<!--*****************************resultMap:findByIdMap 定义********************-->
<resultMap id="findByIdMap" type="Order" autoMapping="true">
<!--订单表的id 主键-->
<id property="id" column="oid"/>
<!-- 映射到产品表 -->
<association property="product" autoMapping="true">
<id property="id" column="pid"/>
</association>
<!-- 映射到会员表 -->
<association property="member" autoMapping="true">
<id property="id" column="mid"/>
</association>
<!-- 映射到游客表,订单表和游客表的关系是啥??? M:N 多对多的关系 -->
<collection property="travellers" ofType="Traveller" autoMapping="true">
<id property="id" column="tid"/>
<result property="name" column="tname"/>
<result property="phoneNum" column="tnum"/>
</collection>
</resultMap>
<!-- 3.findById这个方法的编写;由于是复杂数据类型,所以,返回类型是resultMap,不是resultType -->
<select id="findById" resultMap="findByIdMap">
select *,o.id oid,p.id pid,m.id mid,t.id tid,t.`name` tname,t.phoneNum tnum
from orders o
left join product p on o.productId=p.id
left join member m on o.memberId=m.id
left join order_traveller ot on o.id=ot.orderId -- 这些继续和游客表建立关联;
left join traveller t on ot.travellerId=t.id
where o.id=#id
</select>
方式二:
<resultMap id="o_p_m_t" type="com.yh.pojo.Orders" autoMapping="true">
<association property="product" column="productId" select="com.yh.mapper.ProductMapper.selectById"> </association>
<association property="member" column="memberId" select="com.yh.mapper.MemberMapper.selectById"></association>
<collection property="travellers" column="id" select="com.yh.mapper.TravellerMapper.selectByOid"></collection>
</resultMap>
<select id="selectById" resultMap="o_p_m_t">
select * from orders where id=#id
</select>
// 注意下面是三个ProductMapper MemberMapper TravellerMapper
//根据产品id查询产品信息
@Select("select * from product where id =#id")
public Product selectById(int id);
//根据会员id查询会员信息
@Select("select * from member where id=#id")
public List<Member> selectById(int id);
//根据订单id查询旅客信息
@Select("select t.* from traveller t,order_traveller ot where t.id=ot.travellerId and ot.orderId=#oid")
public List<Traveller> selectByOid(int oid);
测试
2.3 多条件模糊查询
就是在查询所有数据的基础上添加查询条件
2.3.1 OrderMapper
@Param用于dao层,是mybatis中的注解
使得mapper.xml中的参数与后台的参数对应上,也增强了可读性
如果两者参数名一致得话,spring会自动进行封装,不一致的时候就需要手动去使其对应上。
即:用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 。
复习mybatis的@Param技术点,向mapper.xml传值
public interface OrderMapper
//根据查询所有数据根据orderNum查询 productName模糊查询
public List<Order> selectAll(@Param("orderNum") String orderNum, @Param("productName") String productName);
2.3.2 OrderService
public interface OrderService
//根据查询所有数据根据orderNum查询 productName模糊查询
public List<Order> findAll(String orderNum, String productName);
@Service
public class OrderServiceImpl implements OrderService
@Autowired
private OrderMapper orderMapper;
/**
* 根据查询所有数据根据orderNum查询 productName模糊查询
* @param orderId
* @return
*/
@Override
public List<Order> findAll(String orderNum, String productName)
return orderMapper.selectAll(orderNum, productName);
旧OrderController(不写)
@Controller
@RequestMapping("/order")
public class OrderController
@Autowired
private OrderService orderService;
/**
* 根据查询所有数据根据orderNum查询 productName模糊查询
* @param page limit key value
* @return
*/
@RequestMapping("/findAll")
public String findAll(HttpServletRequest request, @RequestParam(value = "page",required = false,defaultValue = "1") int page, @RequestParam(value = "limit",required = false,defaultValue = "5")int limit,@RequestParam(value = "key",required = false,defaultValue = "")String key,@RequestParam(value = "value",required = false,defaultValue = "") String value)
PageHelper.startPage(page,limit); //?代码省略方式
List<Orders> all =null;
switch (key) //key:匹配orderNum 或productName;再做查询;
case "orderNum":
all= ordersService.findAll(value,null);break;
case "productName":
all= ordersService.findAll(null,value);break;
case "":
all= ordersService.findAll(null,null);
request.setAttribute("select",key);
request.setAttribute("selectValue",value);
PageInfo<Orders> pageInfo=new PageInfo<>(all);
request.setAttribute("pageInfo",pageInfo);
return "/orders-list";
2.3.3 优化的OrderController
@RequestMapping("/findAll")
public ModelAndView findAll(@RequestParam(name = "page",defaultValue = "1")int pageNum,
@RequestParam(name = "limit",defaultValue = "5")int pageSize,
@RequestParam(name = "key",defaultValue = "")String key,
@RequestParam(name = "value",defaultValue = "")String value)
javaee框架技术之17之ssm综合案例角色管理(代码片段)
...综合案例一、课程目标1.【掌握】角色管理功能 要求:1.1框架必须掌握住; 1.2这次的使用来复习注解sql开发 1.3restful风格的实现,有能力的去尝试2.【掌握】用户管理功能二、角色管理2.1查询角色2.1.1RoleMapper接口@Select("select*fromro... 查看详情
javaee框架技术之14ssm综合案例产品管理crud(代码片段)
SSM综合案例一、课程目标1.【掌握】SSM整合2.【√】学习Lombok使用3.【理解】Layui页面书写(备注:其他前端技术也可以)4.【理解】理解SSM综合案例表的结构5.【掌握】产品管理二、SSM整合Spring+SpringMVC+Mybatis–>SSMSpring+Struts2+Hiber... 查看详情
javaee框架技术之14ssm综合案例(代码片段)
SSM综合案例一、课程目标1.【掌握】SSM整合2.【√】学习Lombok使用3.【理解】Layui页面书写(备注:其他前端技术也可以)4.【理解】理解SSM综合案例表的结构5.【掌握】产品管理二、SSM整合Spring+SpringMVC+Mybatis–>SSMSpring+Struts2+Hiber... 查看详情
03ssm综合案例之16springsecurity(代码片段)
day03_SSM综合案例一、课程目标1.【理解】SpringSecurity权限框架2.【掌握】使用SpringSecurity进行用户登录3.【掌握】资源权限管理二、SpringSecurity2.1什么是SpringSecuritySpringSecurity的前身是AcegiSecurity,是Spring项目组中用来提供安全认... 查看详情
ssm综合案例之角色管理实战
一、课程目标1.【掌握】角色管理功能2.【掌握】用户管理功能二、角色管理2.1查询角色编写RoleMapper接口//查询所有角色@Select("select*fromrole")publicList<Role>selectAll();编写RoleServicepublicinterfaceRoleService//查询所有角色publicList<Role&g... 查看详情
javaee框架技术之9-mybatis高级查询技术文档(代码片段)
高级查询Mybatis作为一个ORM框架,也对sql的高级查询作了支持,下面我来学习mybatis中的一对一,一对多,多对多案例说明此案例中的业务关系是用户,订单,订单详情,商品之间的关系,其中一个订... 查看详情
javaee框架技术之9-mybatis高级查询技术文档(代码片段)
高级查询Mybatis作为一个ORM框架,也对sql的高级查询作了支持,下面我来学习mybatis中的一对一,一对多,多对多案例说明此案例中的业务关系是用户,订单,订单详情,商品之间的关系,其中一个订... 查看详情
javaee框架技术之9-mybatis高级查询技术文档(代码片段)
高级查询Mybatis作为一个ORM框架,也对sql的高级查询作了支持,下面我来学习mybatis中的一对一,一对多,多对多案例说明此案例中的业务关系是用户,订单,订单详情,商品之间的关系,其中一个订... 查看详情
03ssm综合案例之springsecurity(代码片段)
day03_SSM综合案例一、课程目标1.【理解】SpringSecurity权限框架2.【掌握】使用SpringSecurity进行用户登录3.【掌握】资源权限管理二、SpringSecurity2.1什么是SpringSecuritySpringSecurity的前身是AcegiSecurity,是Spring项目组中用来提供安全认... 查看详情
杨老师课堂之javaee三大框架hibernate入门第一课
本篇任务1.使用Hibernate框架完成对客户的增删改查的操作教学导航1.能够说出Hibernate的执行流程2.能够独立使用Hibernate框架完成增删改查的操作框架和CRM项目的整体介绍1.什么是CRM*CRM(CustomerRelationshipManagement)客户关系管理,是利... 查看详情
javaee开发前景如何?
...-Lucene&solr入门&进阶|16-SpringMvc_SSM综合实战|15-整合ssm框架_mybatis|14-国际物流云商项目|13-Maven|12-Oracle数据库|11-CRM-客户管理系统|10-Spring框架|09-Struts2框架|08-Hibernate框架|07-store项目|06-JavaWeb技术加强|05-JavaWeb知识 参考技... 查看详情
基于ssm+jsp实现的民宿预订网站(用户管理房源管理注册登录民宿预定订单管理订单删除等)
...于SSM+JSP实现的民宿预订网站实现功能截图系统功能使用技术完整源码基于SSM+JSP实现的民宿预订网站本系统是SSM的民宿管理系统,可以实现用户管理、房源管理、用户注册登录、民宿预定、订单管理等功能。(文末查看完整源码)... 查看详情
计算机毕业设计之java+ssm手机综合类门户网站
手机综合类门户网站采用ssm框架和eclipse编辑器、MySQL数据库设计并实现的,主要包括系统手机评测管理模块、文章管理模块、手机新闻管理、所有评论管理、登录模块、和退出模块等多个模块。管理员的登录模块:管理员登录... 查看详情
计算机毕业设计之java+ssm学生综合测评系统
...生综合测评信息管理功能的选择。学生综合测评系统采用技术,基于mysql开发,实现了个人中心, 查看详情
小付博客目录
...列总结大数据Vue项目单表案例大数据Vue项目案例总结JavaEE综合案例宿舍管理开发流程定时任务总结柱状图饼图用户管理系统案例用户管理系统视频讲解3D初级旋转相册3D中级旋转相册宿舍管理开发流程宿舍管理开发视频讲解二、... 查看详情
idea+java+ssm+jsp+mysql实现超市订单系统(代码片段)
目录一、系统介绍1.开发环境2.技术选型3.系统功能4.数据库文件二、系统展示1.登录系统2.系统首页3.订单管理4.供应商管理5.用户管理6.修改密码三、部分代码BaseControllerBillControllerLoginControllerProviderController 四、其他1.更多系统Java&... 查看详情
igmpv3广播电视网络应用案例之pim-ssm技术
广播电视网络应用案例之PIM-SSM技术一、PIM-SSM技术简介组播业务模型分为SSM(Source-SpecificMulticast,指定信源组播)模型和ASM(Any-SourceMulticast,任意信源组播)模型。其中,ASM模型包括PIM-DM和PIM-SM两种组播业务模式,两者的相同点... 查看详情
基于ssm+mysql+jsp实现水果蔬菜商城系统
...境配置系统开发平台:Tomcat8.0+JDK1.8+Windows开发语言:JavaEE框架:SSM-Spring+SpringMVC+Mybatis前端:JSP数据库:MySql5.7以上开发环境:IntelijIdea浏览器:Chrome二、功能展示1.主页(客户)2.登陆(客户)3.我的购物车(客户)4.我的订单(客户)5.... 查看详情