基于Spring MVC + Spring + MyBatis的【物流系统 - 公司信息管理】
阅读原文时间:2023年07月08日阅读:3

资源下载:https://download.csdn.net/download/weixin_44893902/45601768

练习点设计:模糊查询、删除、新增

一、语言和环境

  1. 实现语言:JAVA语言。
  2. 环境要求:MyEclipse/Eclipse + Tomcat + MySql。
  3. 使用技术:Jsp+Servlet+JavaBeanSpringMVC + Spring + Mybatis

二、实现功能

使用 SSM(Spring+SpringMVC+MyBatis)框架开发物流系统 - 公司信息管理模块,具体实现如下功能:

1,首页显示所有公司信息,如图 1 所示。

2,实现按公司名称模糊查询功能:在输入框中输入要查询的公司名称,点击“查找”按钮,显示相关的公司信息。

3,实现删除功能,删除之前弹出“删除确认”提示,删除成功后显示最新数据。效果图如图3所示。

4,实现增加公司信息的功能:点击首页上的“添加公司信息”,跳转到添加公司信息页面,页面效果如图4所示,完成增加功能,公司编号和公司名称必须输入。

三、数据库设计

1.创建数据库(logisticsDB)。

2.创建公司信息(tb_company)表,结构见表 1。
表1 公司信息表结构

四、推荐实现步骤

  1. 建立数据库和数据表,并且添加测试数据(至少添加5条测试数据)。

  2. 打开 Eclipse 或 Idea,创建 Web 工程,并创建相应包。

  3. 为工程添加 Spring、SpringMVC 和 MyBatis 支持。

  4. 在工程中创建实体类和与实体对应的 MyBatis 映射文件,正确配置MySQL 的 SQL 映射文件。

  5. 创建 Mapper映射器、业务类。在 映射器或映射文件中 编写 SQL 语句实现查询和增加操作。

  6. 创建 Controller 类,正确配置 SpringMVC 的配置文件。

  7. 正确配置 Spring 的配置文件,并有效管理 SQLSessionFactory。

五、实现代码

1.创建数据库(logisticsDB)。

2.创建公司信息(tb_company)表。

/*
 Date: 25/07/2021 22:02:55
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tb_company
-- ----------------------------
DROP TABLE IF EXISTS `tb_company`;
CREATE TABLE `tb_company`  (
  `Company_id` int(11) NOT NULL AUTO_INCREMENT,
  `Company_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Company_city` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Company_phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Company_fax` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Company_adress` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Company_remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`Company_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1006 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of tb_company
-- ----------------------------
INSERT INTO `tb_company` VALUES (1001, '长沙飞马传媒有限公司', '湖南湘潭', '0731-2784651', '0731-2784651', '望城', NULL);
INSERT INTO `tb_company` VALUES (1002, '长沙长奔汽车', '湖南株洲', '0731-2784555', '0731-2784555', '茶陵', NULL);
INSERT INTO `tb_company` VALUES (1003, '湖南汇通科技', '湖南长沙', '0731-2784777', '0731-2784777', '长沙', NULL);
INSERT INTO `tb_company` VALUES (1004, '长沙科技', '湖南长沙', '0731-2784651', '0731-2784651', '湘潭', NULL);

SET FOREIGN_KEY_CHECKS = 1;

目录结构
Company

JAR包:

src

com.controller

CompanyController.java

package com.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.entity.TbCompany;
import com.service.CompanyService;

@Controller
public class CompanyController {
    @Resource
    CompanyService companyService;

    // 查询与模糊查询
    @RequestMapping("/CompanysList")
    public String CompanysList(Model model, String Company_name) {
        List<TbCompany> companyList = companyService.selectAll(Company_name);
        model.addAttribute("companyList", companyList);
        return "/company";
    }

    // 跳转到添加页面
    @RequestMapping("/insertInto")
    public String insertInto() {
        return "/addCompany";
    }

    // 添加
    @RequestMapping("/insertCompany")
    public String insertCompany(TbCompany tbCompany) {
        int insertCompany = companyService.insertCompany(tbCompany);
        return "redirect:/CompanysList.do";
    }

    // 删除
    @RequestMapping("/delCompany")
    public String delCompany(int companyId) {
        int delCompany = companyService.delCompany(companyId);
        return "redirect:/CompanysList.do";
    }

}

com.dao

TbCompanyMapper.java

package com.dao;

import com.entity.TbCompany;
import java.util.List;

import org.apache.ibatis.annotations.Param;

public interface TbCompanyMapper {
    int deleteByPrimaryKey(Integer companyId);

    int insert(TbCompany record);

    List<TbCompany> selectAll(@Param("Company_name")String Company_name);

}

TbCompanyMapper.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="com.dao.TbCompanyMapper" >
  <resultMap id="BaseResultMap" type="com.entity.TbCompany" >
    <id column="Company_id" property="companyId" jdbcType="INTEGER" />
    <result column="Company_name" property="companyName" jdbcType="VARCHAR" />
    <result column="Company_city" property="companyCity" jdbcType="VARCHAR" />
    <result column="Company_phone" property="companyPhone" jdbcType="VARCHAR" />
    <result column="Company_fax" property="companyFax" jdbcType="VARCHAR" />
    <result column="Company_adress" property="companyAdress" jdbcType="VARCHAR" />
    <result column="Company_remark" property="companyRemark" jdbcType="VARCHAR" />
  </resultMap>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    delete from tb_company
    where Company_id = #{companyId,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.entity.TbCompany" >
    insert into tb_company (Company_id, Company_name, Company_city,
      Company_phone, Company_fax, Company_adress,
      Company_remark)
    values (#{companyId,jdbcType=INTEGER}, #{companyName,jdbcType=VARCHAR}, #{companyCity,jdbcType=VARCHAR},
      #{companyPhone,jdbcType=VARCHAR}, #{companyFax,jdbcType=VARCHAR}, #{companyAdress,jdbcType=VARCHAR},
      #{companyRemark,jdbcType=VARCHAR})
  </insert>

  <select id="selectAll" resultMap="BaseResultMap" >
    select Company_id, Company_name, Company_city, Company_phone, Company_fax, Company_adress,
    Company_remark
    from tb_company
    <where>
        <if test="Company_name!= null">Company_name like "%"#{Company_name}"%"   </if>
    </where>
  </select>
</mapper>

com.entity

TbCompany.java

package com.entity;

public class TbCompany {
    private Integer companyId;

    private String companyName;

    private String companyCity;

    private String companyPhone;

    private String companyFax;

    private String companyAdress;

    private String companyRemark;

    public Integer getCompanyId() {
        return companyId;
    }

    public void setCompanyId(Integer companyId) {
        this.companyId = companyId;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName == null ? null : companyName.trim();
    }

    public String getCompanyCity() {
        return companyCity;
    }

    public void setCompanyCity(String companyCity) {
        this.companyCity = companyCity == null ? null : companyCity.trim();
    }

    public String getCompanyPhone() {
        return companyPhone;
    }

    public void setCompanyPhone(String companyPhone) {
        this.companyPhone = companyPhone == null ? null : companyPhone.trim();
    }

    public String getCompanyFax() {
        return companyFax;
    }

    public void setCompanyFax(String companyFax) {
        this.companyFax = companyFax == null ? null : companyFax.trim();
    }

    public String getCompanyAdress() {
        return companyAdress;
    }

    public void setCompanyAdress(String companyAdress) {
        this.companyAdress = companyAdress == null ? null : companyAdress.trim();
    }

    public String getCompanyRemark() {
        return companyRemark;
    }

    public void setCompanyRemark(String companyRemark) {
        this.companyRemark = companyRemark == null ? null : companyRemark.trim();
    }
}

com.service

CompanyService.java

package com.service;

import java.util.List;

import com.entity.TbCompany;

public interface CompanyService {

    //查询
    List<TbCompany> selectAll(String Company_name);
    //添加
    int insertCompany(TbCompany tbCompany);
    //删除
    int  delCompany(int companyId);
}

com.serviceImpl

CompanyServiceImpl.java

package com.serviceImpl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.dao.TbCompanyMapper;
import com.entity.TbCompany;
import com.service.CompanyService;
@Service
public class CompanyServiceImpl implements CompanyService {

    @Resource
    TbCompanyMapper mapper;
    @Override
    public List<TbCompany> selectAll(String Company_name) {
        List<TbCompany> selectAll=mapper.selectAll(Company_name);
        return selectAll;
    }

    @Override
    public int insertCompany(TbCompany tbCompany) {
        int insertCompany=mapper.insert(tbCompany);
        return insertCompany;
    }

    @Override
    public int delCompany(int companyId) {
        int delCompany=mapper.deleteByPrimaryKey(companyId);
        return delCompany;
    }

}

mybatis

sqlMapConfig.xml.java

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 别名 -->
    <typeAliases>
        <package name="com.entity" />
    </typeAliases>
</configuration>

spring

applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd ">

    <!-- 指定spring容器读取db.properties文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!-- 将连接池注册到bean容器中 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="Url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!-- 配置SqlSessionFactory -->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 设置MyBatis核心配置文件 -->
        <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
        <!-- 设置数据源 -->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 配置Mapper扫描 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 设置Mapper扫描包 -->
        <property name="basePackage"  value="com.dao" />
    </bean>
    <!-- 配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        <!-- 开启注解方式管理AOP事务 -->
        <tx:annotation-driven transaction-manager="transactionManager" />
</beans>

applicationContext-service.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd ">
        <!-- 配置Service扫描 -->
        <context:component-scan base-package="com" />
</beans>

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd ">

        <!-- 配置Controller扫描 -->
        <context:component-scan base-package="com.controller" />
        <!-- 配置注解驱动 -->
        <mvc:annotation-driven />
        <!-- 配置视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 前缀 -->
            <property name="prefix" value="/WEB-INF/jsp/" />
            <!-- 后缀 -->
            <property name="suffix" value=".jsp" />
        </bean>
</beans>

jdbc.properties

jdbc.url=jdbc:mysql://localhost:3306/logisticsdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false
jdbc.username=root
jdbc.password=123456
jdbc.driver=com.mysql.jdbc.Driver

WebContent

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Company</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!--spring容器  -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/applicationContext-*.xml</param-value>
  </context-param>
  <!-- 监听器,加载spring配置 -->
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 前端控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!-- 设置post请求的字符编码过滤器 -->
  <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

JSP

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"
        +request.getServerPort()+path;
%>
<html>
<head>
<meta charset="utf-8">
<title>登录</title>
</head>
<body>
<script type="text/javascript">
    window.location.href="<%=basePath%>/CompanysList.do";
</script>
</body>
</html>

addCompany.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>添加公司信息</title>
<style type="text/css">
    .centen1 {
        width: 100%;
        height: 40px;
        color: white;
        line-height: 40px;
        background-color: #0098CB;
    }

    table {
        margin: auto;
    }

    span {
        color: red;
    }
</style>
</head>
<body>
    <div class="centen1">
        <h3>添加公司</h3>
    </div>

    <div class="centen2">
        <form action="insertCompany.do">

            <table border="0" cellspacing="10" cellpadding="6">
                <tr>
                    <td>公司编号:&nbsp;&nbsp;&nbsp;&nbsp; <input type="text"
                        name="companyId" required>&nbsp;&nbsp;<span>*</span>
                    </td>
                </tr>

                <tr>
                    <td>公司名称:&nbsp;&nbsp;&nbsp;&nbsp; <input type="text"
                        name="companyName" required>&nbsp;&nbsp;<span>*</span>
                    </td>
                </tr>

                <tr>
                    <td>所在城市:&nbsp;&nbsp;&nbsp;&nbsp; <input type="text"
                        name="companyCity">
                    </td>
                </tr>
                <tr>
                    <td>联系电话:&nbsp;&nbsp;&nbsp;&nbsp; <input type="text"
                        name="companyPhone">
                    </td>
                </tr>

                <tr>
                    <td>传
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;真:&nbsp;&nbsp;&nbsp;&nbsp; <input
                        type="text" name="companyFax">
                    </td>
                </tr>

                <tr>
                    <td>地
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;址:&nbsp;&nbsp;&nbsp;&nbsp; <input
                        type="text" name="companyAdress">
                    </td>
                </tr>
                <tr>
                    <td>备
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注:&nbsp;&nbsp;&nbsp;&nbsp; <input
                        type="text" name="companyRemark">
                    </td>
                </tr>
                <tr>
                    <td>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input
                        type="submit" value="保存" /> <input type="reset" value="重置" />
                    </td>
                </tr>
            </table>
        </form>
    </div>
</body>
</html>

company.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<meta charset="utf-8">
<title>物流系统 - 公司信息管理</title>
<style type="text/css">
    .head {
        height: 40px;
        width: 100%;
        background-color: #F8F4FF;
    }

    .head1 {
        width: 250px;
        height: 100%;
        float: left;
    }

    .head2 {
        width: 450px;
        height: 100%;
        line-height: 36px;
        float: right;
    }

    .centen {
        color: white;
        font-size: 20px;
        width: 100%;
        height: 36px;
        background-color: #0098CB;
        margin-top: 20px;
        line-height: 36px;
    }

    .foot {
        margin-top: 20px;
    }

    table {
        text-align: center;
    }
</style>
</head>
<body>
    <div class="head">
        <div class="head1">
            <a href="insertInto.do">
                <button type="button"
                    style="height: 36px; font-size: 20px; background-color: #D9F0FF; border: none;">添加公司信息</button>
            </a>
        </div>
        <div class="head2" style="font-size: 20px; text-align: center;">

            <form action="CompanysList.do" method="post">
                公司名称: <input type="text" placeholder="公司名称" name="Company_name"
                    style="height: 26px; font-size: 15px; margin-bottom: 2px;" /> <input
                    type="submit" value="查找" style="height: 30px; font-size: 15px;" />
            </form>
        </div>
    </div>
    <div class="centen">
        <h4>公司信息列表</h4>
    </div>
    <div class="foot">
        <table width="100%" border="1px" cellpadding="5" cellspacing="0">
            <tr>
                <th width="150px">公司名称</th>
                <th width="150px">城市</th>
                <th width="150px">电话</th>
                <th width="150px">传真</th>
                <th width="150px">地址</th>
                <th width="150px">操作</th>
            </tr>
            <c:forEach var="company" items="${companyList }" varStatus="item">
                <tr>
                    <td width="150px">${company.companyName}</td>
                    <td width="150px">${company.companyCity}</td>
                    <td width="150px">${company.companyPhone}</td>
                    <td width="150px">${company.companyFax}</td>
                    <td width="150px">${company.companyAdress}</td>
                    <td width="150px"><a
                        href="javascript:if(confirm('确实要删除吗?'))location='delCompany.do?companyId=${company.companyId}'">删除</a>
                    </td>
                </tr>
            </c:forEach>
        </table>
    </div>
</body>
</html>