目录
1 第五天:门店模块CRUD 2
1.1 永和大王门店管理系统 3
1.1.1 项目背景 3
1.1.2 必备的开发软件 4
1.1.3 系统架构图 5
1.2 mysql导入导出 5
1.2.1 创建数据库 5
1.2.2 导入 5
1.2.3 导出 6
1.3 表设计 7
1.3.1 tb_door 7
1.3.2 tb_order 8
1.3.1 tb_order_detail 8
1.3.2 tb_dept 9
1.3.3 tb_user 9
1.4 创建项目 10
1.5 查询所有门店 11
1.5.1 需求 11
1.5.2 BasePojo.java 11
1.5.3 Door 12
1.5.4 DoorMapper.xml 13
1.5.5 DoorMapper接口文件 14
1.5.6 DoorService接口 14
1.5.7 DoorServiceImpl 15
1.5.8 DoorController.java 15
1.5.9 door.jsp 16
1.5.10 applicationContext-mybatis.xml 17
1.5.11 jdbc.properties 18
1.5.12 applicationContext.xml 18
1.5.13 springmvc-config.xml 18
1.5.14 改造door.jsp 19
1.5.15 改造DoorController 20
1.5.16 测试 21
1.6 查询一个门店 21
1.6.1 DoorMapper.xml 21
1.6.2 DoorMapper接口 21
1.6.3 DoorService接口 21
1.6.4 DoorServiceImpl 21
1.6.5 DoorController 22
1.6.6 测试 22
1.7 新增门店 22
1.7.1 DoorMapper.xml 22
1.7.2 DoorMapper接口 22
1.7.3 DoorService接口 22
1.7.4 DoorServiceImpl 22
1.7.5 DoorController 22
1.7.6 测试 22
1.7.7 doorAdd.jsp 22
1.7.8 DoorController中添加toAdd 23
1.7.9 修改DoorController列表方法 23
1.8 扩展 24
1.8.1 总结 24
1.8.2 配置别名 24
1.8.3 RESTFul架构支持 25
第五天:门店模块CRUD
永和大王门店管理系统
项目背景

《永和大王门店管理系统》实现顾客进店后选择购买的套餐,系统生成订单,包括:是哪个门店的,产生订单流水号,并记录下订单类型及人数和收银员是谁,及下单时间和结账时间,并记录下订单详情,顾客点了哪些食物,及支付总金额。系统打印订单小票。同时,在订单下方展示本店的二维码,方便顾客扫描自助填写税务发票信息。
必备的开发软件
PowerDesinger v15.1 数据库表设计&UML设计
mysql-5.5.27-winx64.msi mysql数据库
SQLyogEnt v8.2 /navicat 数据库客户端
安装双jdk1.7 & jdk1.8 java环境
Eclipse Mars.2 Release (4.5.2) IDE 开发工具,配置jdk、tomcat
安装Tomcat Web中间件,运行web程序
系统架构图
mysql导入导出
创建数据库
导入
导出

表设计
tb_door
tb_order
tb_order_detail
tb_dept
tb_user
创建项目
查询所有门店
需求
BasePojo.java
package cn.tedu.pojo;
import java.util.Date;
public class BasePojo {
**private** Date created ;<br /> **private** Date updated ;<br /> <br /> //getters and setters<br /> <br /> **public** Date getCreated() {<br /> **return** created;<br /> }<br /> **public** **void** setCreated(Date created) {<br /> **this**.created = created;<br /> }<br /> **public** Date getUpdated() {<br /> **return** updated;<br /> }<br /> **public** **void** setUpdated(Date updated) {<br /> **this**.updated = updated;<br /> }<br /> <br /> <br /> <br /> <br />}
Door
package cn.tedu.pojo;
//描述门店表
public class Door extends BasePojo{
//id字段<br /> **private** Integer id;<br /> //name字段<br /> **private** String name;<br /> //tel字段<br /> **private** String tel;<br /> <br /> //setters and getters<br /> <br /> **public** Integer getId() {<br /> **return** id;<br /> }<br /> **public** **void** setId(Integer id) {<br /> **this**.id = id;<br /> }<br /> **public** String getName() {<br /> **return** name;<br /> }<br /> **public** **void** setName(String name) {<br /> **this**.name = name;<br /> }<br /> **public** String getTel() {<br /> **return** tel;<br /> }<br /> **public** **void** setTel(String tel) {<br /> **this**.tel = tel;<br /> }<br /> <br /> //toString<br /> <br /> @Override<br /> **public** String toString() {<br /> **return** "Door [id=" + id + ", name=" + name + ", tel=" + tel + "]";<br /> }<br /> <br />}
DoorMapper.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">
<!-- 查询所有门店信息 <br /> resultType把结果集要封装给哪个pojo对象<br /> --><br /> <select id=_"SelectAll"_<br /> resultType=_"cn.tedu.pojo.Door"_><br /> select * from tb_door<br /> </select>
DoorMapper接口文件
1、 Mapper接口方法名和mapper.xml中定义sql的id值相同
2、 Mapper接口方法接收的参数类型和mapper.xml中定义的sql 的parameterType的类型相同
3、 Mapper接口方法的返回值类型和mapper.xml中定义的sql的resultType的类
package cn.tedu.dao;
import java.util.List;
import cn.tedu.pojo.Door;
/
1、 Mapper接口方法名和mapper.xml中定义sql的id值相同
2、 Mapper接口方法接收的参数类型和mapper.xml中定义的sql 的parameterType的类型相同
3、 Mapper接口方法的返回值类型和mapper.xml中定义的sql的resultType的类
/
public interface DoorMapper {
//查询门店表所有数据<br /> //<select id="SelectAll" <br /> //resultType="cn.tedu.pojo.Door"><br /> **public** List<Door> SelectAll();<br /> <br /> <br />}
DoorService接口
package cn.tedu.service;
import java.util.List;
import cn.tedu.pojo.Door;
//和mapper接口方法保持一致
public interface DoorService {
//查询门店表所有数据<br /> //<select id="SelectAll" <br /> //resultType="cn.tedu.pojo.Door"><br /> **public** List<Door> SelectAll();<br /> <br /> <br />}
DoorServiceImpl
package cn.tedu.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.tedu.dao.DoorMapper;
import cn.tedu.pojo.Door;
@Service
//作用1:把这个对象交给spring容器管理
//作用2:作为的业务层代码
public class DoorServiceImpl
implements DoorService {
//声明DoorMapper<br /> @Autowired //自动注入<br /> **private** DoorMapper doorMapper;<br /> <br /> //查询所有<br /> @Override<br /> **public** List<Door> SelectAll() {<br /> List<Door> list = <br /> doorMapper.SelectAll();<br /> **return** list;<br /> }
}
DoorController.java
package cn.tedu.controller;
//这个类用来完成门店管理CRUD
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.tedu.pojo.Door;
import cn.tedu.service.DoorService;
//作用1:把对象交给spring容器管理
//作用2:是控制层代码
@Controller
public class DoorController {
@Autowired<br /> **private** DoorService doorService;<br /> <br /> //所有数据的列表<br /> @RequestMapping("list")<br /> **public** String list(){<br /> //查询所有数据<br /> List<Door> list = doorService.SelectAll();<br /> **for** (Door door : list) {<br /> System._**out**_.println(door);<br /> }<br /> <br /> **return** "door";<br /> }<br /> <br />}
door.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">
<div style="padding: 5px;"><br /> <h1>永和大王门店管理系统-门店列表</h1><br /> </div>
<div>
<table border="1" cellspacing="0"><br /> <tr align="center" style="font-weight: bold;"><br /> <td>序号</td><br /> <td>门店名称</td><br /> <td>联系电话</td><br /> </tr><br /> <c:forEach items="${doorList}" var="o" varStatus="i"><br /> <tr><br /> <td align="center">${i.index+1}</td><br /> <td>${o.name}</td><br /> <td>${o.tel}</td><br /> <br /> </tr><br /> </c:forEach><br /> </table><br /> </div><br /></body>
applicationContext-mybatis.xml
/spring目录下:扫描mapper层
xmlns:aop=”http://www.springframework.org/schema/aop“ xmlns:tx=”http://www.springframework.org/schema/tx“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 构造SqlSessionFactory --><br /><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><br /> <!-- 1、定义数据源 --><br /> <property name="dataSource" ref="dataSource"/>
<!-- 2、mybatis-config.xml --><br /> <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/><br /> <br /> <!-- 3、扫描所有的映射文件 mapper.xml --><br /><property name="**mapperLocations**" value="classpath:mybatis/mapper/*.xml"/><br /> </bean><br /> <br /> <!-- 4、定义Mapper接口扫描器 --><br /> <bean class="org.mybatis.spring.mapper.**MapperScannerConfigurer**"><br /> <!-- 扫描mapper接口 --><br /> <property name="basePackage" value="cn.tedu.dao"/><br /> </bean>
jdbc.properties
db.username=root
db.password=root
db.driverClass=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/yhmisdb?characterEncoding=utf8
applicationContext.xml
/spring目录下:扫描service层
xmlns:aop=”http://www.springframework.org/schema/aop“ xmlns:tx=”http://www.springframework.org/schema/tx“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 读取属性配置文件 --><br /><context:property-placeholder location="classpath:jdbc.properties"/>
<br /> <!-- 阿里Druid全球最快的连接池 --><br /> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"><br /> <property name="driverClassName" value="${db.driverClass}" /><br /> <property name="url" value="${db.url}" /><br /> <property name="username" value="${db.username}" /><br /> <property name="password" value="${db.password}" /><br /> </bean>
springmvc-config.xml
/spring目录下:扫描controller层
<?xml version=”1.0” encoding=”UTF-8”?>
xmlns:context=”http://www.springframework.org/schema/context“
xmlns:mvc=”http://www.springframework.org/schema/mvc“
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- MVC注解驱动,对json支持 --><br /> <mvc:annotation-driven/>
<!-- 配置扫描器,使得@Controller注解生效 --><br /> <context:component-scan base-package="cn.tedu.controller" />
<!-- 定义视图解析器,拼页面路径:/WEB-INF/jsp/test.jsp" --><br /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><br /> <!-- 前缀 --><br /> <property name="prefix" value="/WEB-INF/pages/" /><br /> <!-- 后缀 --><br /> <property name="suffix" value=".jsp" /><br /> </bean><br /></beans>
改造door.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">
<div style="padding: 5px;"><br /> <h1>永和大王门店管理系统-门店列表</h1><br /> </div>
<div><br /> <a href="toAdd">新增</a><br /> <table border="1" cellspacing="0"><br /> <tr align="center" style="font-weight: bold;"><br /> <td>序号</td><br /> <td>门店名称</td><br /> <td>联系电话</td><br /> <td>操作</td><br /> </tr><br /> <c:forEach items="${doorList}" var="o" varStatus="i"><br /> <tr><br /> <td align="center">${i.index+1}</td><br /> <td>${o.name}</td><br /> <td>${o.tel}</td><br /> <td><br /> <br /> <a href="toUpdate?id=${o.id }">修改</a><br /> <a href="delete?id=${o.id }">删除</a><br /> </td><br /> </tr><br /> </c:forEach><br /> </table><br /> </div><br /></body>
改造DoorController
package cn.tedu.controller;
//这个类用来完成门店管理CRUD
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.tedu.pojo.Door;
import cn.tedu.service.DoorService;
//作用1:把对象交给spring容器管理
//作用2:是控制层代码
@Controller
@RequestMapping(“door”)
public class DoorController {
@Autowired<br /> private DoorService doorService;<br /> <br /> //所有数据的列表<br /> @RequestMapping("list")<br /> public String list(**Model model**){<br /> //查询所有数据<br /> List<Door> list =<br /> doorService.SelectAll();<br />//给页面准备数据<br /> model.addAttribute("doorList",list);<br /> return "door";<br /> }<br /> <br />}
测试

查询一个门店
DoorMapper.xml
resultType=“cn.tedu.pojo.Door”>
select * from tb_door
where id=#{id}
DoorMapper接口
package cn.tedu.dao;
import java.util.List;
import cn.tedu.pojo.Door;
/
1、 Mapper接口方法名和mapper.xml中定义sql的id值相同
2、 Mapper接口方法接收的参数类型和mapper.xml中定义的sql 的parameterType的类型相同
3、 Mapper接口方法的返回值类型和mapper.xml中定义的sql的resultType的类
/
public interface DoorMapper {
//查询门店表所有数据<br /> //<select id="SelectAll"<br /> //resultType="cn.tedu.pojo.Door"><br /> public List<Door> SelectAll();<br /> <br /> //<!-- 查询一个门店 --><br /> //<select id="SelectOne"<br /> //resultType="cn.tedu.pojo.Door"><br /> public Door SelectOne(Integer id);<br /> <br /> <br />}
DoorService接口
package cn.tedu.service;
import java.util.List;
import cn.tedu.pojo.Door;
//和mapper接口方法保持一致
public interface DoorService {
//查询门店表所有数据<br /> //<select id="SelectAll"<br /> //resultType="cn.tedu.pojo.Door"><br /> public List<Door> SelectAll();<br /> <br /> //<!-- 查询一个门店 --><br /> //<select id="SelectOne"<br /> //resultType="cn.tedu.pojo.Door"><br /> public Door SelectOne(Integer id);
<br /> <br />}
DoorServiceImpl
package cn.tedu.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.tedu.dao.DoorMapper;
import cn.tedu.pojo.Door;
@Service
//作用1:把这个对象交给spring容器管理
//作用2:作为的业务层代码
public class DoorServiceImpl
implements DoorService {
//声明DoorMapper<br /> @Autowired //自动注入<br /> private DoorMapper doorMapper;<br /> <br /> //查询所有<br /> @Override<br /> public List<Door> SelectAll() {<br /> List<Door> list =<br /> doorMapper.SelectAll();<br /> <br /> //TODO<br /> return list;<br /> }
//查询一个门店<br /> @Override<br /> public Door SelectOne(Integer id) {<br /> return doorMapper.SelectOne(id);<br /> }
DoorController
package cn.tedu.controller;
//这个类用来完成门店管理CRUD
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.tedu.pojo.Door;
import cn.tedu.service.DoorService;
//作用1:把对象交给spring容器管理
//作用2:是控制层代码
@Controller
@RequestMapping(“door”)
public class DoorController {
private static final String SelectOne = null;<br /> @Autowired<br /> private DoorService doorService;<br /> <br /> //所有数据的列表<br /> @RequestMapping("list")<br /> public String list(Model model){<br /> //查询所有数据<br /> List<Door> list =<br /> doorService.SelectAll();<br /> model.addAttribute("doorList",list);<br /> return "door";<br /> }<br /> <br /> //查询一个门店信息<br /> @RequestMapping("findOne")<br /> public String findOne(Integer id){<br /> Door door = <br /> doorService.SelectOne(id);<br /> System.out.println(door);<br /> <br /> return "door";<br /> }<br /> <br />或者<br />//查询一个门店信息,显示json数据<br /> @RequestMapping("findOneJson")<br /> @ResponseBody//在页面显示json格式的数据<br /> **public** Door findOneJson(Integer id){<br /> **return** doorService.SelectOne(id);<br /> }<br /> <br /> <br />}
测试

新增门店
DoorMapper.xml
DoorMapper接口
DoorService接口
DoorServiceImpl
DoorController
测试
doorAdd.jsp
<%@ page language=”java” contentType=”text/html; charset=utf-8”
pageEncoding=”utf-8”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd">
<div style="padding: 5px;"><br /> <h1>永和大王门店管理系统-门店添加</h1><br /> </div>
<form action="add" method=”post”><br /> 名称:<input type="text" name="name"/><br /> 电话:<input type="text" name="tel"/><br /> <input type="submit" value="提交"><br /> </form><br /></body>
DoorController中添加toAdd
//跳转doorAdd.jsp页面
@RequestMapping(“toAdd”)
public String toAdd(){
return “doorAdd”;
}
修改DoorController列表方法
添加页面点击【提交】,需要调回列表页面,需要在添加方法里修改返回值,变成转发到列表方法。
扩展
总结
配置别名
在applicationContext-mybatis.xml中配置别名包,就会把类名作为别名:
xmlns:aop=”http://www.springframework.org/schema/aop“ xmlns:tx=”http://www.springframework.org/schema/tx“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 配置sqlsessionfactory --><br /> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><br /> <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property><br /> <property name="dataSource" ref="dataSource"></property><br /> <br /> <!-- 扫描mapper --><br /> <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"></property><br /> <br /> <!-- 配置别名包 --><br /><property name="**typeAliasesPackage**" value="cn.tedu.pojo"></property><br /> <br /> </bean><br /> <br /> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <br /> <property name="basePackage" value="cn.tedu.dao"></property><br /> </bean><br /> <br /></beans>
RESTFul架构支持
传统get访问:door/insert?name=lisi&tel=123456&id=3
Restful访问:door/insert/lisi/123456/3
一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。它更加简洁,安全。强化URL GET访问方式。
传统方式
http://localhost:8060/door/resttest?name=lisi&id=998
@RequestMapping(“resttest”)
public String rest(
String name,
Integer id,
Door door
){
System.out.println(name);
System.out.println(id);
System.out.println(door);
return “doorList”;
}
restful方式
在RequestMapping中利用占位符{name}绑定参数的位置,再通过@PathVariable将请求URL中的模板变量映射到功能处理方法的参数上,形成RUSTFul形式。
注意:当利用对象来接收参数时,不需要加**@PathVariable**
http://localhost:8060/door/resttest/lisi/99
@RequestMapping(“resttest/{name}/{id}“)
public String rest(
@PathVariable String name,
@PathVariable Integer id,
Door door
){
System.out.println(name);
System.out.println(id);
System.out.println(door);
return “doorList”;
}

