非常简单的基于SSM整合的java项目

本文介绍了一个使用Spring、Spring MVC和MyBatis(SSM)框架搭建的产品宣传网站项目,涵盖了项目结构、依赖管理、数据库设计、前后端交互及页面展示等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我完成的第一个项目

1.首先说一下这个项目是干什么的,项目的源码地址在下面
整个项目的功能模块图
2.数据库的设计
在这里插入图片描述
表结构很简单,当初建的时候没考虑那么全。那个外键可有可无。

接下来是项目网站的页面

1.网站首页
在这里插入图片描述
在这里插入图片描述
2.登录页面
在这里插入图片描述
3.后台页面
在这里插入图片描述
借鉴了一个后台的项目模板,大概就是这个样子。下面是pom文件和我以链接举个例子

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.sz</groupId>
  <artifactId>Publicity</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>product Publicity website</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.8.RELEASE</spring.version>
    <jackson.version>2.9.3</jackson.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
<!--spring 依赖 start-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
<!--利用它来处理事务问题-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
<!--spring end-->



<!--    json-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>


<!--    新添加处理json为javaBean-->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-core-asl</artifactId>
      <version>1.9.2</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.2</version>
    </dependency>

<!--    新添加处理json为javabean   end-->
<!--    文件上传依赖 start-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
<!--    文件上传依赖  end-->

<!--    持久层依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>

<!--    日志依赖  start-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.12</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.12</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
<!--    日志依赖  end-->

<!--    数据源的引入-->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.2.1</version>
    </dependency>

<!--    mybatis与spring整合所需的依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

<!--    servlet jsp jstL 等依赖 start-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
<!--    servlet jsp jstL 等依赖 end-->

<!--    处理时间格式-->
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.9</version>
    </dependency>

<!--    mybatis 分页依赖 start-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.2</version>
    </dependency>

<!--    apache 用于MD5加密-->
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.10</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-maven-plugin -->
    <dependency>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>1.3.7</version>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>

  </dependencies>

  <build>
    <finalName>Publicity</finalName>
    <plugins>
      <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.7</version>
      </plugin>
    </plugins>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>

      </plugins>
    </pluginManagement>
  </build>
</project>

链接模块的表结构
在这里插入图片描述
controller层

package com.sz.controller;


import com.sz.pojo.NewLink;
import com.sz.service.SsmService;

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

@Controller
@RequestMapping("/link")
public class SsmController {
    /**
     *链接控制层
     */

    @Autowired
    SsmService ssmService;

    @RequestMapping("/find")
    public String findAll(Model model){
        model.addAttribute("map", ssmService.queryAllDate());
        return "link";
    }

    /**
     * 修改前查询操作
     * @param id
     * @param model
     * @return
     */
    @RequestMapping("/findbyid")
    public String findById(Integer id, Model model){
        model.addAttribute("map", ssmService.queryDateById(id));
        return "linkupdate";
    }

    //修改操作
    @RequestMapping("/updLink")
    public String updUserById(String text, String link, Integer id){
        NewLink newLink = new NewLink();
        newLink.setText(text);
        newLink.setLink(link);
        newLink.setId(id);
        ssmService.updLink(newLink);
        return "linkupdate";
    }
    @RequestMapping("/findBefore")
    public String findLink(Model model){
        model.addAttribute("map", ssmService.queryAllDate());
        return "index";
    }

}

service层接口

public interface SsmService {
    Map<String, NewLink> queryAllDate();

    //更新
    void updLink(NewLink newLink);

    NewLink queryDateById(Integer id);
}

service层实现类

package com.sz.service.impl;

import com.sz.mapper.SsmMapper;
import com.sz.pojo.NewLink;
import com.sz.service.SsmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.xml.ws.ServiceMode;
import java.util.HashMap;
import java.util.Map;

@Service("ssmService")
public class SsmServiceImpl implements SsmService {

    @Autowired
    SsmMapper ssmMapper;

    @Override
    public Map<String, NewLink> queryAllDate() {
        Map<String, NewLink> map = new HashMap<>();
        for (int i = 1; i <= 6; i ++){
            NewLink newLink = ssmMapper.queryAllDate(i);
            map.put(i+"" ,newLink);
        }


        return map;
    }



    @Override
    public void updLink(NewLink newLink) {
        ssmMapper.updLink(newLink);
    }

    @Override
    public NewLink queryDateById(Integer id) {
        return ssmMapper.queryDateById(id);
    }
}

这里for循环里的6应该用查询出来count代替的。

mapper层接口

public interface SsmMapper {

    NewLink queryAllDate(Integer id);
    //更新前查询
    NewLink queryDateById(Integer id);
    //更新
    void updLink(NewLink newLink);

}

mapper.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.sz.mapper.SsmMapper">
    <select id="queryAllDate"  parameterType="int" resultType="com.sz.pojo.NewLink">
        select * from new_link
        where id = #{id}
    </select>
    <select id="queryDateById" resultType="com.sz.pojo.NewLink">
        select * from new_link
        where id = #{id}
    </select>
    <!--更新-->
    <update id="updLink" parameterType="com.sz.pojo.NewLink">
    update new_link set text=#{text},link=#{link} where id=#{id}
</update>
</mapper>

数据库配置 db.properties

jdbc.url=jdbc:mysql://localhost:3306/airuiqi_website?characterEncoding=UTF-8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=自己的数据库用户名
jdbc.password=自己的用户名密码
没有密码的置空不写就行了。

jsp页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>爱蕊崎产品宣传网站</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="robots" content="all,follow">
    <!-- Bootstrap CSS-->
    <link rel="stylesheet" href="../page/behindPage/vendor/bootstrap/css/bootstrap.min.css">
    <!-- Font Awesome CSS-->
    <link rel="stylesheet" href="../page/behindPage/vendor/font-awesome/css/font-awesome.min.css">
    <!-- Fontastic Custom icon font-->
    <link rel="stylesheet" href="../page/behindPage/css/fontastic.css">
    <!-- Google fonts - Poppins -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,700">
    <!-- theme stylesheet-->
    <link rel="stylesheet" href="../page/behindPage/css/style.default.css" id="theme-stylesheet">
    <!-- Custom stylesheet - for your changes-->
    <link rel="stylesheet" href="../page/behindPage/css/custom.css">
    <!-- Favicon-->
    <link rel="shortcut icon" href="../page/behindPage/img/favicon.ico">
    <!-- Tweaks for older IEs-->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]-->
    <style type="text/css">
        a:link {
            color: black;
            /*未访问的链接颜色*/
        }

        a:visited {
            color: red;
            /*已访问的链接颜色*/
        }

        a:hover {
            color: blue;
            /*鼠标移动到链接的颜色*/
            text-decoration: underline;
        }

        a:active {
            color: orange;
            /*鼠标点击时的颜色*/
        }

        a {
            text-decoration: none;
            /*去掉下划线*/
        }
        h1.h4{
            text-shadow: 5px 5px 5px #FF0000;
        }
    </style>
</head>

<body>
<div class="page">
    <!-- Main Navbar-->
    <header class="header">
        <nav class="navbar">
            <!-- Search Box 准备用留言板的,到时候看看用不用-->
            <div class="search-box">
                <button class="dismiss"><i class="icon-close"></i></button>
                <form id="searchForm" action="#" role="search">
                    <input type="search" placeholder="What are you looking for..." class="form-control">
                </form>
            </div>
            <div class="container-fluid">
                <div class="navbar-holder d-flex align-items-center justify-content-between">
                    <!-- Navbar Header-->
                    <div class="navbar-header">
                        <!-- Navbar Brand -->
                        <a href="#" class="navbar-brand d-none d-sm-inline-block">
                            <div class="brand-text d-none d-lg-inline-block"><span>爱蕊崎</span><strong>后台管理</strong></div>
                            <div class="brand-text d-none d-sm-inline-block d-lg-none"><strong>BD</strong></div>
                        </a>
                        <!-- Toggle Button--><a id="toggle-btn" href="#" class="menu-btn active"><span></span><span></span><span></span></a>
                    </div>
                    <!-- Navbar Menu -->
                    <ul class="nav-menu list-unstyled d-flex flex-md-row align-items-md-center">


                        <ul aria-labelledby="notifications" class="dropdown-menu">
                            <li>
                                <a rel="nofollow" href="#" class="dropdown-item">
                                    <div class="notification">
                                        <div class="notification-content"><i class="fa fa-envelope bg-green"></i>You have 6 new messages </div>
                                        <div class="notification-time"><small>4 minutes ago</small></div>
                                    </div>
                                </a>
                            </li>
                            <li>
                                <a rel="nofollow" href="#" class="dropdown-item">
                                    <div class="notification">
                                        <div class="notification-content"><i class="fa fa-twitter bg-blue"></i>You have 2 followers</div>
                                        <div class="notification-time"><small>4 minutes ago</small></div>
                                    </div>
                                </a>
                            </li>
                            <li>
                                <a rel="nofollow" href="#" class="dropdown-item">
                                    <div class="notification">
                                        <div class="notification-content"><i class="fa fa-upload bg-orange"></i>Server Rebooted</div>
                                        <div class="notification-time"><small>4 minutes ago</small></div>
                                    </div>
                                </a>
                            </li>
                            <li>
                                <a rel="nofollow" href="#" class="dropdown-item">
                                    <div class="notification">
                                        <div class="notification-content"><i class="fa fa-twitter bg-blue"></i>You have 2 followers</div>
                                        <div class="notification-time"><small>10 minutes ago</small></div>
                                    </div>
                                </a>
                            </li>
                            <li>
                                <a rel="nofollow" href="#" class="dropdown-item all-notifications text-center"> <strong>view all notifications                                            </strong></a>
                            </li>
                        </ul>
                        </li>
                        <!-- Messages                        -->
                        <li class="nav-item dropdown"> <a id="messages" rel="nofollow" data-target="#" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link"><i class="fa fa-envelope-o"></i><span class="badge bg-orange badge-corner">${sessionScope.get("count")}</span></a>

                        </li>
                        <!-- Languages dropdown    -->
                        <li class="nav-item dropdown">

                            <ul aria-labelledby="languages" class="dropdown-menu">
                                <li>
                                    <a rel="nofollow" href="#" class="dropdown-item"> <img src="../page/behindPage/img/flags/16/DE.png" alt="English" class="mr-2">German</a>
                                </li>
                                <li>
                                    <a rel="nofollow" href="#" class="dropdown-item"> <img src="../page/behindPage/img/flags/16/FR.png" alt="English" class="mr-2">French </a>
                                </li>
                            </ul>
                        </li>
                        <!-- Logout    -->
                        <li class="nav-item">
                            <a href="login.jsp" class="nav-link logout"> <span class="d-none d-sm-inline">退出登录</span><i class="fa fa-sign-out"></i></a>
                        </li>
                    </ul>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="page-content d-flex align-items-stretch">
        <!-- Side Navbar -->
        <nav class="side-navbar">
            <!-- Sidebar Header-->
            <div class="sidebar-header d-flex align-items-center">
                <div class="avatar"><img src="${ctx}/page/behindPage/img/logo01.png" alt="..." class="img-fluid rounded-circle"></div>
                <div class="title">
                    <!--以后要调成用户名一样-->
                    <h1 class="h4">${sessionScope.get("user").username}</h1>
                    <p>Welcome</p>
                </div>
            </div>
            <!-- Sidebar Navidation Menus--><span class="heading">功能列表</span>
            <ul class="list-unstyled">
                <li class="active">
                    <a href="${ctx}/user/find?id=${sessionScope.get("user").id}"> <i class="icon-home"></i>用户管理 </a>
                </li>
                <li>
                    <a href="${ctx}/product/find"> <i class="icon-grid"></i>产品管理 </a>
                </li>
                <li>
                    <a href="${ctx}/gszixun/find"> <i class="fa fa-bar-chart"></i>公司咨讯 </a>
                </li>
                <li>
                    <a href="${ctx}/companyNew/find"> <i class="icon-padnote"></i>公司简介 </a>
                </li>
                <li>
                    <a href="${ctx}/message/find"> <i class="icon-padnote"></i>留言板管理 </a>
                </li>
                <li>
                    <a href="${ctx}/link/find"> <i class="icon-padnote"></i>链接管理 </a>
                </li>

                <li>
                    <a href="${ctx}/page/login.jsp"> <i class="icon-interface-windows"></i>登录页面 </a>
                </li>
            </ul>
        </nav>
        <div class="content-inner">
            <!-- Page Header-->
            <header class="page-header">
                <div class="container-fluid">
                    <h2 class="no-margin-bottom">用户管理</h2>
                </div>
            </header>

            <body>
            <table class="table table-hover" border="1px" >
                <tr>
                    <th>序号</th>
                    <th>名称</th>
                    <th>链接</th>
                    <th>操作</th>
                </tr>



                    <c:forEach items="${map}" var="obj" varStatus="status">
                    <tr>
                        <td>
                            <p style="text-align: center; font-size: medium;">
                                    ${status.count}
                            </p>

                        </td>
                        <td>
                            <p style="text-align: center; font-size: medium;">
                                    ${obj.value.text}
                            </p>
                        </td>
                        <td>
                            <a href="">${obj.value.link}</a>
                        </td>
                        <td>
                            <a href="${ctx}/link/findbyid?id=${obj.value.id}">修改</a>
                        </td>
                </tr>
                    </c:forEach>

            </table>

            </body>




            <!-- Page Footer-->
            <footer class="main-footer">
                <div class="container-fluid">
                    <div class="row">
                        <div class="col-sm-6">

                        </div>
                        <div class="col-sm-6 text-right">
                            <p></p>
                            <!-- Please do not remove the backlink to us unless you support further theme's development at https://bootstrapious.com/donate. It is part of the license conditions. Thank you for understanding :)-->
                        </div>
                    </div>
                </div>
            </footer>
        </div>
    </div>
</div>
<!-- JavaScript files-->
<script src="../page/behindPage/vendor/jquery/jquery.min.js"></script>
<script src="../page/behindPage/vendor/popper.js/umd/popper.min.js">
</script>
<script src="../page/behindPage/vendor/bootstrap/js/bootstrap.min.js"></script>
<script src="../page/behindPage/vendor/jquery.cookie/jquery.cookie.js">
</script>
<script src="../page/behindPage/vendor/chart.js/Chart.min.js"></script>
<script src="../page/behindPage/vendor/jquery-validation/jquery.validate.min.js"></script>
<script src="../page/behindPage/js/charts-home.js"></script>
<!-- Main File-->
<script src="../page/behindPage/js/front.js"></script>

</body>

</html>

大概就这么些了,下面说两句

这个项目还是有待改进的,下面是我的github上的项目地址

 https://gitee.com/zhoushiwangchao/SSMairuiqiwebsite
github地址:https://github.com/zhoushibo-111/SSMairuiqiwebsite
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值