新增订单

订单管理 - 图1

改造OrderController

在订单列表页面,点击【新增】,转到新增页面,需要准备门店数据的下拉列表
//在列表页面点击【新增】,跳转到新增页面
@RequestMapping(“/toAdd”)
public String toAdd(Model model){
//调用service层的功能,查询所有门店信息
List list = doorService.findAll();

//给页面准备数据
model.addAttribute(“doorList”, list);

return “orderAdd”;
}

orderAdd.jsp

<%@ page language=”java” contentType=”text/html; charset=utf-8”
pageEncoding=”utf-8”%>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core“ %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd">







永和大王门店管理系统-订单添加




































所属门店:

   
订单号: 订单类型:
人数: 收银员:
开单时间: 结账时间:
支付方式: 支付金额:




  





修改OrderMapper.xml

  1. <!-- //新增<br /> void save(Order order); --><br /> <insert id="save"><br /> insert into tb_order values(<br /> #{id},#{doorId},#{orderNo},#{orderType},<br /> #{personNum},#{cashier},#{createTime},<br /> #{endTime},#{paymentType},#{price},<br /> now(),now()<br /> )<br /> </insert>

修改OrderMapper接口

//新增<br />    void save(Order order);

修改OrderService接口

//新增<br />    void save(Order order);

修改OrderServiceImpl

//新增
@Override
public void save(Order order) {
orderMapper.save(order);
}

OrderController中添加新增方法

当在订单新增页面,点击【提交】,会访问controller插入数据库,并跳转到列表方法,列出新数据。<br />//在新增页面点击【提交】,实现入库保存数据<br />    @RequestMapping("/save")<br />    **public** String save(Order order){<br />        //调用service层的功能<br />        orderService.save(order);<br />        <br />        **return** "redirect:findAll";<br />    }<br />        

注意:日期字段

默认是使用/,但是可以在日期类型的属性上面加注解来改变格式
@DateTimeFormat(pattern=”yyyy-MM-dd”)

修改订单

订单管理 - 图2

OrderController中添加跳转

在订单列表页面,点击【修改】,转到修改页面

//在列表页面点击【修改】,跳转到修改页面
@RequestMapping(“/toUpdate”)
public String toUpdate(Integer id,
Model model){
//调用service层查询门店信息,给页面准备
List list = doorService.findAll();
model.addAttribute(“doorList”, list);

//调用service层查询订单信息,给页面准备
Order order = orderService.findOne(id);
model.addAttribute(“order”, order);

return “orderUpdate”;
}

orderUpdate.jsp

<%@ page language=”java” contentType=”text/html; charset=utf-8”
pageEncoding=”utf-8”%>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core“ %>
<%@ taglib prefix=”fmt” uri=”http://java.sun.com/jsp/jstl/fmt“ %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd">







永和大王门店管理系统-订单修改






































所属门店:

   
订单号: 订单类型:
人数: 收银员:
开单时间: "/> 结账时间: "/>
支付方式: 支付金额:




  




修改OrderMapper.xml



update tb_order set
door_id=#{doorId},
order_no=#{orderNo},
order_type=#{orderType},
person_num=#{personNum},
cashier=#{cashier},
create_time=#{createTime},
end_time=#{endTime},
payment_type=#{paymentType},
price=#{price},
updated=now()
where
id=#{id}

修改OrderMapper接口

//更新<br />    void update(Order order);

修改OrderService接口

//更新<br />    void update(Order order);<br />    

修改OrderServiceImpl

//更新<br />    @Override<br />    public void update(Order order) {<br />        orderMapper.update(order);<br />    }    

OrderController中添加修改保存方法

//在修改页面点击【提交】,实现修改库里数据<br />    @RequestMapping("/update")<br />    public String update(Order order){<br />        //调用service层<br />        orderService.update(order);<br />        <br />        return "redirect:findAll";<br />    }

删除订单

修改OrderMapper.xml

<!-- //删除<br />    void delete(Integer id); --><br />    <delete id="delete"><br />        delete from tb_order<br />        where id=#{id}<br />    </delete>

修改OrderMapper接口

//删除
void delete(Integer id);

修改OrderService接口

//删除
void delete(Integer id);

修改OrderServiceImpl

//删除
@Override
public void delete(Integer id) {
orderMapper.delete(id);
}

OrderController中添加删除方法

//在列表页面点击【删除】,实现删除指定记录
@RequestMapping(“/delete”)
public String delete(Integer id){
//调用service执行删除业务
orderService.delete(id);

return “redirect:findAll”;
}

拓展

工具:自动生成代码-eclipse插件

jdbcType 当这个值为null时,告诉jdbc驱动程序,这个值当null时应该按什么类型来处理。
Mysql驱动不需要,Oracle驱动底层不能识别,所以必须指定jdbcType,不指定报错。
只有在修改时,才需要指定。
利用这个工具产生insert的全字段的代码;update使用动态SQL语句的;select一般直接从insert的语句中拷贝字段;delete语句直接拷贝

安装插件

1、将给定的plugins和feaures目录直接拷贝到D:\java\ide\eclipse\dropins
2、重启eclipse。
订单管理 - 图3

配置sqlMapGenerator.xml

指定mysql的驱动包的路径(千万别放中文路径下)配置数据源和生成的代码所存放的位置。
创建一个配置文件sqlMapGeneractor.xml,这个文件名称随便起,它会自动识别你文件的头信息是否包含<!DOCTYPE generatorConfiguration>。
<?xml version=”1.0” encoding=”UTF-8” ?>
<!DOCTYPE generatorConfiguration PUBLIC “-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN” “http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd“ >
















    <!-- 为哪些表生成代码 tableName:表名 schema:不用填写 --><br />        <table schema="" tableName="tb_door" /><br />        <table schema="" tableName="tb_order" />

</context><br /></generatorConfiguration>

配置generatorConfig.properties

suppressAllComments=false
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/yhmisdb?characterEncoding=utf-8
username=root
password=root

modeltargetPackage=cn.tedu.pojo
targetProject=test
sqltargetPackage=cn.tedu.mapper
clienttargetPackage=cn.tedu.dao

测试

我们可能会担心一旦重新执行generate的时候,我们自己编写的代码会不会丢失,不会的,插件不会修改或丢弃我们自己编写的代码。
一旦掌握了插件如何使用,重要的工作就是如何使用XXXExample类了。这种方式,完全不用编写繁琐的mapper xml文件。

订单管理 - 图4
订单管理 - 图5

生成的配置文件引入核心配置文件中




SQL中有特殊字符

当SQL中有特殊字符,mybatis不能正常解析时,用CDATA括起来
<![CDATA[ age<=#{age} ]]>

#和$取值的区别

1、#取值的方式,底层调用的是jdbc中的新对象PreparedStatement,在SQL拼接时,用?当做占位符,可以防止SQL注入。
2、#在拼接参数时,会去判断参数是否是字符串类型,如果是自动拼接一对引号
在开发中,能用#尽量不用$。

对订单详情表的数据进行CRUD,没有jsp页面,用json数据格式来测试

创建OrderDetail实体对象

package cn.tedu.pojo;

public class OrderDetail extends BasePojo{

**private** Integer id;<br />    **private** Integer orderId;<br />    **private** Integer num;<br />    **private** String item;<br />    **private** Double price;<br />    <br />    **public** Integer getId() {<br />        **return** id;<br />    }<br />    **public** **void** setId(Integer id) {<br />        **this**.id = id;<br />    }<br />    **public** Integer getOrderId() {<br />        **return** orderId;<br />    }<br />    **public** **void** setOrderId(Integer orderId) {<br />        **this**.orderId = orderId;<br />    }<br />    **public** Integer getNum() {<br />        **return** num;<br />    }<br />    **public** **void** setNum(Integer num) {<br />        **this**.num = num;<br />    }<br />    **public** String getItem() {<br />        **return** item;<br />    }<br />    **public** **void** setItem(String item) {<br />        **this**.item = item;<br />    }<br />    **public** Double getPrice() {<br />        **return** price;<br />    }<br />    **public** **void** setPrice(Double price) {<br />        **this**.price = price;<br />    }<br />    <br />    <br />    <br />}

创建OrderDetailMapper接口

package cn.tedu.dao;

import java.util.List;

import cn.tedu.pojo.OrderDetail;

public interface OrderDetailMapper {

List<OrderDetail> findAll();<br />    <br />    OrderDetail findOne(Integer id);<br />    <br />    **void** save(OrderDetail orderDetail);<br />    <br />    **void** update(OrderDetail orderDetail);<br />    <br />    **void** delete(Integer id);<br />}

创建OrderDetailMapper.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">









</resultMap>

<!-- //查询所有订单 List<Order> findAll(); resultType:把结果封装给哪个对象(别名) resultType只能处理属性名和字段名一致的情况 --><br />    <select id=_"findAll"_ resultMap=_"OrderDetailRM"_><br />        select * from tb_order_detail<br />    </select>


<!-- 查询一个订单信息 --><br />    <select id=_"findOne"_ resultMap=_"OrderDetailRM"_><br />        select * from tb_order_detail<br />        where id=#{id}<br />    </select>


<!-- //新增<br />    void save(Order order); --><br />    <insert id=_"save"_><br />        insert into tb_order_detail values(<br />            #{id},#{orderId},#{num},#{item},#{price},<br />            now(),now()<br />        )<br />    </insert>

<!-- //更新<br />    void update(Order order); <br />        字段=属性的值<br />    --><br />    <update id=_"update"_><br />        update tb_order_detail set <br />            order_id=#{orderId},<br />            num=#{num},<br />            item=#{item},<br />            price=#{price},<br />            updated=#{updated}<br />        where <br />            id=#{id}<br />    </update><br />    <br />    <br />    <!-- //删除<br />    void delete(Integer id); --><br />    <delete id=_"delete"_><br />        delete from tb_order_detail<br />        where id=#{id}<br />    </delete><br />    <br />    <br />    


创建OrderDetailService接口

package cn.tedu.dao;

import java.util.List;

import cn.tedu.pojo.OrderDetail;

public interface OrderDetailMapper {

List<OrderDetail> findAll();<br />    <br />    OrderDetail findOne(Integer id);<br />    <br />    **void** save(OrderDetail orderDetail);<br />    <br />    **void** update(OrderDetail orderDetail);<br />    <br />    **void** delete(Integer id);<br />}

创建OrderDetailServiceImpl

package cn.tedu.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.tedu.dao.OrderDetailMapper;
import cn.tedu.pojo.OrderDetail;
@Service
public class OrderDetailServiceImpl implements OrderDetailService {

@Autowired<br />    **private** OrderDetailMapper  orderDetailMapper;<br />    <br />    @Override<br />    **public** List<OrderDetail> findAll() {<br />        **return** orderDetailMapper.findAll();<br />    }

@Override<br />    **public** OrderDetail findOne(Integer id) {<br />        **return** orderDetailMapper.findOne(id);<br />    }

@Override<br />    **public** **void** save(OrderDetail orderDetail) {<br />        orderDetailMapper.save(orderDetail);<br />        <br />    }

@Override<br />    **public** **void** update(OrderDetail orderDetail) {<br />        orderDetailMapper.update(orderDetail);<br />    }

@Override<br />    **public** **void** delete(Integer id) {<br />        orderDetailMapper.delete(id);<br />    }

}

创建OrderDetailController

package cn.tedu.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.tedu.pojo.OrderDetail;
import cn.tedu.service.OrderDetailService;

@Controller
@RequestMapping(“/orderdetail”)
public class OrderDetailController {

@Autowired<br />    private OrderDetailService  orderDetailService;<br />    <br />    @RequestMapping("/findAll")<br />    @ResponseBody<br />    public List<OrderDetail> findAll(){<br />        return orderDetailService.findAll();<br />    }<br />    <br />    <br />    @RequestMapping("/findOne/{id}")<br />    @ResponseBody<br />    public OrderDetail findOne(<br />                    @PathVariable Integer id){<br />        return orderDetailService.findOne(id);<br />    }<br />    <br />    @RequestMapping("/save")<br />    @ResponseBody<br />    public void save(OrderDetail orderDetail){<br />        orderDetailService.save(orderDetail);<br />    }<br />    <br />    @RequestMapping("/update")<br />    @ResponseBody<br />    public void update(OrderDetail orderDetail){<br />        orderDetailService.update(orderDetail);<br />    }<br />    <br />    @RequestMapping("/delete")<br />    @ResponseBody<br />    public void delete(Integer id){<br />        orderDetailService.delete(id);<br />    }<br />    <br />    <br />    <br />}

测试

订单管理 - 图6
订单管理 - 图7
订单管理 - 图8
订单管理 - 图9
订单管理 - 图10