目录
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

永和大王门店管理系统

项目背景

门店模块CRUD - 图1

《永和大王门店管理系统》实现顾客进店后选择购买的套餐,系统生成订单,包括:是哪个门店的,产生订单流水号,并记录下订单类型及人数和收银员是谁,及下单时间和结账时间,并记录下订单详情,顾客点了哪些食物,及支付总金额。系统打印订单小票。同时,在订单下方展示本店的二维码,方便顾客扫描自助填写税务发票信息。
门店模块CRUD - 图2

必备的开发软件

  • 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程序

系统架构图

门店模块CRUD - 图3

mysql导入导出

创建数据库

门店模块CRUD - 图4

导入

打开SQL文件,复制内容到sqlYog中,然后批量执行
门店模块CRUD - 图5

导出

门店模块CRUD - 图6

表设计

门店模块CRUD - 图7

tb_door

门店模块CRUD - 图8

tb_order

门店模块CRUD - 图9

tb_order_detail

门店模块CRUD - 图10

tb_dept

门店模块CRUD - 图11

tb_user

门店模块CRUD - 图12

创建项目

门店模块CRUD - 图13
门店模块CRUD - 图14

查询所有门店

需求

门店模块CRUD - 图15

BasePojo.java

package cn.tedu.pojo;

import java.util.Date;

public class BasePojo {

  1. **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

门店模块CRUD - 图16
<?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:context=”http://www.springframework.org/schema/context“ xmlns:p=”http://www.springframework.org/schema/p
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:context=”http://www.springframework.org/schema/context“ xmlns:p=”http://www.springframework.org/schema/p
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:xsi=”http://www.w3.org/2001/XMLSchema-instance“ xmlns:p=”http://www.springframework.org/schema/p
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 />}

测试

门店模块CRUD - 图17

查询一个门店

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 />}

测试

门店模块CRUD - 图18

门店模块CRUD - 图19

新增门店

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列表方法

添加页面点击【提交】,需要调回列表页面,需要在添加方法里修改返回值,变成转发到列表方法。

扩展

总结

门店模块CRUD - 图20

配置别名

在applicationContext-mybatis.xml中配置别名包,就会把类名作为别名:
xmlns:context=”http://www.springframework.org/schema/context“ xmlns:p=”http://www.springframework.org/schema/p
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”;
}