赞
踩
https://gitee.com/ZXAcademy/First-PaperSystem-SSM
相比较于此文,如上项目源码做了如下修改:
项目演示见本文 第三章。
另外,推荐两款完整的,适合入门学习的Spring快速开发脚手架:
Spring Boot项目:一套基于Spring Boot+Layui的内容管理系统/快速开发脚手架(含完整的开发文档、演示网址等) ,强烈推荐!
SSM项目:点击此处查看
package com.pojo; public class Paper { private long paperId; private String paperName; private int paperNum; private String paperDetail; public long getPaperId() { return paperId; } public void setPaperId(long paperId) { this.paperId = paperId; } public String getPaperName() { return paperName; } public void setPaperName(String paperName) { this.paperName = paperName; } public int getPaperNum() { return paperNum; } public void setPaperNum(int paperNum) { this.paperNum = paperNum; } public String getPaperDetail() { return paperDetail; } public void setPaperDetail(String paperDetail) { this.paperDetail = paperDetail; } }
package com.controller; import com.pojo.Paper; import com.service.PaperService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; @Controller @RequestMapping("/paper") public class PaperController { @Autowired private PaperService paperService; @RequestMapping("/allPaper") public String list(Model model) { List<Paper> list = paperService.queryAllPaper(); model.addAttribute("list", list); return "allPaper"; } @RequestMapping("toAddPaper") public String toAddPaper() { return "addPaper"; } @RequestMapping("/addPaper") public String addPaper(Paper paper) { paperService.addPaper(paper); return "redirect:/paper/allPaper"; } @RequestMapping("/del/{paperId}") public String deletePaper(@PathVariable("paperId") Long id) { paperService.deletePaperById(id); return "redirect:/paper/allPaper"; } @RequestMapping("toUpdatePaper") public String toUpdatePaper(Model model, Long id) { model.addAttribute("paper", paperService.queryById(id)); return "updatePaper"; } @RequestMapping("/updatePaper") public String updatePaper(Model model, Paper paper) { paperService.updatePaper(paper); paper = paperService.queryById(paper.getPaperId()); model.addAttribute("paper", paper); return "redirect:/paper/allPaper"; } }
package com.dao; import com.pojo.Paper; import java.util.List; public interface PaperDao { int addPaper(Paper paper); int deletePaperById(long id); int updatePaper(Paper paper); Paper queryById(long id); List<Paper> queryAllPaper(); }
package com.service; import com.pojo.Paper; import java.util.List; public interface PaperService { int addPaper(Paper paper); int deletePaperById(long id); int updatePaper(Paper paper); Paper queryById(long id); List<Paper> queryAllPaper(); }
package com.service.impl; import com.dao.PaperDao; import com.pojo.Paper; import com.service.PaperService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class PaperServiceImpl implements PaperService { @Autowired PaperDao paperDao; public int addPaper(Paper paper) { return paperDao.addPaper(paper); } public int deletePaperById(long id) { return paperDao.deletePaperById(id); } public int updatePaper(Paper paper) { return paperDao.updatePaper(paper); } public Paper queryById(long id) { return paperDao.queryById(id); } public List<Paper> queryAllPaper() { return paperDao.queryAllPaper(); } }
<?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.PaperDao"> <resultMap type="Paper" id="paperResultMap" > <id property="paperId" column="paper_id"/> <result property="paperName" column="name"/> <result property="paperNum" column="number"/> <result property="paperDetail" column="detail"/> </resultMap> <insert id="addPaper" parameterType="Paper"> INSERT INTO paper(paper_id,name,number,detail) VALUE (#{paperId},#{paperName}, #{paperNum}, #{paperDetail}) </insert> <delete id="deletePaperById" parameterType="long"> DELETE FROM paper WHERE paper_id=#{paperID} </delete> <update id="updatePaper" parameterType="Paper"> UPDATE paper SET NAME = #{paperName},NUMBER = #{paperNum},detail = #{paperDetail} WHERE paper_id = #{paperId} </update> <select id="queryById" resultType="Paper" parameterType="long"> SELECT paper_id,name,number,detail FROM paper WHERE paper_id=#{paperId} </select> <select id="queryAllPaper" resultMap="paperResultMap"> SELECT paper_id,name,number,detail FROM paper </select> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置整合mybatis过程 --> <!-- 1.配置数据库相关参数properties的属性:${url} --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 2.数据库连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置连接池属性 --> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- c3p0连接池的私有属性 --> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <!-- 关闭连接后不自动commit --> <property name="autoCommitOnClose" value="false"/> <!-- 获取连接超时时间 --> <property name="checkoutTimeout" value="10000"/> <!-- 当获取连接失败重试次数 --> <property name="acquireRetryAttempts" value="2"/> </bean> <!-- 3.配置SqlSessionFactory对象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource"/> <!-- 配置MyBaties全局配置文件:mybatis-config.xml --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 扫描pojo包 使用别名 --> <property name="typeAliasesPackage" value="com.pojo"/> <!-- 扫描sql配置文件:mapper需要的xml文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 给出需要扫描Dao接口包 --> <property name="basePackage" value="com.dao"/> </bean> </beans>
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置整合mybatis过程 --> <!-- 1.配置数据库相关参数properties的属性:${url} --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 2.数据库连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置连接池属性 --> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- c3p0连接池的私有属性 --> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <!-- 关闭连接后不自动commit --> <property name="autoCommitOnClose" value="false"/> <!-- 获取连接超时时间 --> <property name="checkoutTimeout" value="10000"/> <!-- 当获取连接失败重试次数 --> <property name="acquireRetryAttempts" value="2"/> </bean> <!-- 3.配置SqlSessionFactory对象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource"/> <!-- 配置MyBaties全局配置文件:mybatis-config.xml --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 扫描pojo包 使用别名 --> <property name="typeAliasesPackage" value="com.pojo"/> <!-- 扫描sql配置文件:mapper需要的xml文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 给出需要扫描Dao接口包 --> <property name="basePackage" value="com.dao"/> </bean> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 扫描service包下所有使用注解的类型 --> <context:component-scan base-package="com.service" /> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置基于注解的声明式事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/db_ssm?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=123456
log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
<?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> <!-- 配置全局属性 --> <settings> <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 --> <setting name="useGeneratedKeys" value="true" /> <!-- 使用列别名替换列名 默认:true --> <setting name="useColumnLabel" value="true" /> <!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} --> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings> </configuration>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <% pageContext.setAttribute("path", request.getContextPath()); %> <!DOCTYPE HTML> <html> <head> <title>首页</title> <style type="text/css"> a { text-decoration: none; color: black; font-size: 18px; } h3 { width: 180px; height: 38px; margin: 100px auto; text-align: center; line-height: 38px; background: deepskyblue; border-radius: 4px; } </style> </head> <body> <div class="container"> <div class="row clearfix"> <div class="col-md-12 column"> <div class="page-header"> <h1> 基于SSM框架的管理系统:简单实现增、删、改、查。 </h1> </div> </div> </div> </div> <br><br> <h3> <a href="${path }/paper/allPaper">点击进入管理页面</a> </h3> </body> </html>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置springMVC需要加载的配置文件 spring-dao.xml,spring-service.xml,spring-mvc.xml Mybatis - > spring -> springmvc --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-*.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <!-- 默认匹配所有的请求 --> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</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>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
<?xml version="1.0" encoding="UTF-8" ?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- - This is a sample configuration for log4j. - It simply just logs everything into a single log file. - Note, that you can use properties for value substitution. --> <appender name="CORE" class="org.apache.log4j.FileAppender"> <param name="File" value="${org.apache.cocoon.work.directory}/cocoon-logs/log4j.log" /> <param name="Append" value="false" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %t %c - %m%n"/> </layout> </appender> <root> <priority value="${org.apache.cocoon.log4j.loglevel}"/> <appender-ref ref="CORE"/> </root> </log4j:configuration>
<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- @version $Id: applicationContext.xml 561608 2007-08-01 00:33:12Z vgritsenko $ --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:configurator="http://cocoon.apache.org/schema/configurator" xmlns:avalon="http://cocoon.apache.org/schema/avalon" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://cocoon.apache.org/schema/configurator http://cocoon.apache.org/schema/configurator/cocoon-configurator-1.0.1.xsd http://cocoon.apache.org/schema/avalon http://cocoon.apache.org/schema/avalon/cocoon-avalon-1.0.xsd"> <!-- Activate Cocoon Spring Configurator --> <configurator:settings/> <!-- Configure Log4j --> <bean name="org.apache.cocoon.spring.configurator.log4j" class="org.apache.cocoon.spring.configurator.log4j.Log4JConfigurator" scope="singleton"> <property name="settings" ref="org.apache.cocoon.configuration.Settings"/> <property name="resource" value="/WEB-INF/log4j.xml"/> </bean> <!-- Activate Avalon Bridge --> <avalon:bridge/> </beans>
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2018/4/7 Time: 16:45 To change this template use File | Settings | File Templates. --%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <html> <head> <title>新增论文</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 引入 Bootstrap --> <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="row clearfix"> <div class="col-md-12 column"> <div class="page-header"> <h1> 基于SSM框架的管理系统:简单实现增、删、改、查。 </h1> </div> </div> </div> <div class="row clearfix"> <div class="col-md-12 column"> <div class="page-header"> <h1> <small>新增论文</small> </h1> </div> </div> </div> <form action="" name="userForm"> 论文名称:<input type="text" name="paperName"><br><br><br> 论文数量:<input type="text" name="paperNum"><br><br><br> 论文详情:<input type="text" name="paperDetail"><br><br><br> <input type="button" value="添加" οnclick="addPaper()"> </form> <script type="text/javascript"> function addPaper() { var form = document.forms[0]; form.action = "<%=basePath %>paper/addPaper"; form.method = "post"; form.submit(); } </script> </div>
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2018/4/6 Time: 16:57 To change this template use File | Settings | File Templates. --%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String appPath = request.getContextPath(); %> <html> <head> <title>Paper列表</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 引入 Bootstrap --> <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="row clearfix"> <div class="col-md-12 column"> <div class="page-header"> <h1> 基于SSM框架的管理系统:简单实现增、删、改、查。 </h1> </div> </div> </div> <div class="row clearfix"> <div class="col-md-12 column"> <div class="page-header"> <h1> <small>论文列表 —— 显示所有论文</small> </h1> </div> </div> </div> <div class="row"> <div class="col-md-4 column"> <a class="btn btn-primary" href="${path}/paper/toAddPaper">新增</a> </div> </div> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-hover table-striped"> <thead> <tr> <th>论文编号</th> <th>论文名字</th> <th>论文数量</th> <th>论文详情</th> <th>操作</th> </tr> </thead> <tbody> <c:forEach var="paper" items="${requestScope.get('list')}" varStatus="status"> <tr> <td>${paper.paperId}</td> <td>${paper.paperName}</td> <td>${paper.paperNum}</td> <td>${paper.paperDetail}</td> <td> <a href="${path}/paper/toUpdatePaper?id=${paper.paperId}">更改</a> | <a href="<%=appPath%>/paper/del/${paper.paperId}">删除</a> </td> </tr> </c:forEach> </tbody> </table> </div> </div> </div>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <html> <head> <title>修改论文</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 引入 Bootstrap --> <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="row clearfix"> <div class="col-md-12 column"> <div class="page-header"> <h1> 基于SSM框架的管理系统:简单实现增、删、改、查。 </h1> </div> </div> </div> <div class="row clearfix"> <div class="col-md-12 column"> <div class="page-header"> <h1> <small>修改论文</small> </h1> </div> </div> </div> <form action="" name="userForm"> <input type="hidden" name="paperId" value="${paper.paperId}"/> 论文名称:<input type="text" name="paperName" value="${paper.paperName}"/> 论文数量:<input type="text" name="paperNum" value="${paper.paperNum}"/> 论文详情:<input type="text" name="paperDetail" value="${paper.paperDetail }"/> <input type="button" value="提交" οnclick="updatePaper()"/> </form> <script type="text/javascript"> function updatePaper() { var form = document.forms[0]; form.action = "<%=basePath %>paper/updatePaper"; form.method = "post"; form.submit(); } </script> </div>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。