新增订单
改造OrderController
在订单列表页面,点击【新增】,转到新增页面,需要准备门店数据的下拉列表
//在列表页面点击【新增】,跳转到新增页面
@RequestMapping(“/toAdd”)
public String toAdd(Model model){
//调用service层的功能,查询所有门店信息
List
//给页面准备数据
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
<!-- //新增<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”)
修改订单
OrderController中添加跳转
在订单列表页面,点击【修改】,转到修改页面
//在列表页面点击【修改】,跳转到修改页面
@RequestMapping(“/toUpdate”)
public String toUpdate(Integer id,
Model model){
//调用service层查询门店信息,给页面准备
List
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接口
修改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。
配置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文件。
生成的配置文件引入核心配置文件中
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 />}
测试






