SSM-SpringMVC+Spring+Mybatis

创建项目

创建好 项目后, 项目目录分析

数据库设计

我们采用员工表 Employee 与 部门表 Department

部门表 表设计---

员工表 --表设计

因为有文件上传操作,因此 建立 info表

(其中 员工只能隶属一个部门,因此 两张表之间 有外键关系)

java 代码 设计

数据库建立完毕后,需要为 每张表添加 3-4条数据

建立 entity 实体层

建立实体层: 注意事项

 # 实体层 注意事项​类名    --- 与表名  相对应 , java 中规定 类名首字母必须为大写字母属性名   ----- 与 列名 相对应,且 属性类型 与列名对应类型一致,属性名 采用小驼峰命名发, 列名 不区分大小写例如    表中 列 为 stuno 则属性为 stuNo实体类中 必须包含无参数的构造方法

建立mapper层 数据访问层

因为 我们使用的mybatis,因此 包名为mapper 当然也可以为dao

mybatis中 规定 接口与映射文件放在一起,并一一对应,

不仅名称一致,还需要再 xxxMapper.xml 配置 namespace, 指向 对应的接口

 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="mapper.EmployeeMapper">​</mapper>
建立service层 业务层

添加Spring 依赖

编写 pom.xml

  <!--spring aop 依赖 jar--><!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version><scope>runtime</scope></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.9.RELEASE</version></dependency>​<dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.9.RELEASE</version></dependency>​

添加mybatis 依赖

编写 pom.xml

  
 <!-- mbatis 分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency>​​<!--mybatis-spring 依赖--><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><!--引入mybatis.jar--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency>
添加其他一些依赖

添加 mysql 数据库依赖 及 log4j

 
 <!--mysql--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency>​<!--log4j--><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>

添加数据源 依赖

 
 <!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.5</version></dependency>

jsp 需要引入 jstl

  
<!--jstl 依赖 --><!-- https://mvnrepository.com/artifact/jstl/jstl --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>​

文件上传和下载

 <!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency>​<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>
 ​
为pom.xml 增加 build
 
 <!--资源--><build><resources>​<resource><!--目录--><directory>src/main/java</directory><!--包含--><includes><include>mapper/**.xml</include></includes></resource><resource><!--目录--><directory>src/main/resources</directory><!--包含--><includes><include>**.*</include></includes></resource></resources></build>
编写 数据库配置文件

如果 mysql版本 为 5.0 ,则 driver 应该为 com.mysql.jdbc.Driver

 文件名  db.properties# mysql 为8.0 配置uname=自己mysql的用户名password=mysql的密码driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/数据库名称?serverTimezone=GMT

编写日志配置文件
  文件名  log4j.properties​### 设置###log4j.rootLogger = debug,stdout### 输出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

编写spring 配置文件

spring.xml

 <?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"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsd"><!--spring 加载 db.properties --><context:property-placeholder location="classpath:db.properties"/><!-- 第一步   spring 管理 数据源 (以前mybatis自己管理)  --><bean id="ds" class="com.alibaba.druid.pool.DruidDataSource"  ><property name="driverClassName" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${uname}"/><property name="password" value="${password}"/></bean><!-- 第二步      将mybatis中 SqlSessionFactory 交由 spring--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--配置数据源属性--><property name="dataSource"  ref="ds"/><!-- 单独写了 mybatis的配置文件 , 使用以下方式引入 --><property name="configLocation" value="classpath:mybatis.xml"/><!-- 配置 mybatis 中的 别名 --><property name="typeAliasesPackage" value="entity"/><!--配置 mybatis 中的 映射器--><property name="mapperLocations" value="classpath:mapper/*.xml"/><!--配置分页mybati 插件--><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><!--使用下面的方式配置参数,一行配置一个 --><value>helperDialect=mysqlreasonable=true</value></property></bean></array></property></bean><!--第三步  配置 mapper 的扫描--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--配置 sqlSessionFactoryBeanName --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!-- 配置 扫描 mapper--><property name="basePackage" value="mapper"/></bean><!--扫描 service 包 , 因为 我们会对 service 做 事务管理--><context:component-scan base-package="service"/>​​<!-- 配置 文件 上传 需要 解析器--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--设置 最大上传 为10M --><property name="maxUploadSize" value="10240000000" /><!--默认编码为 utf-8 处理中文--><property name="defaultEncoding" value="utf-8"/></bean>​​<!--配置 事务 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!--配置数据源--><property name="dataSource" ref="ds"/></bean>​<!-- 使用 tx 之前 先 引入 命名空间  tx--><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="insert*" propagation="REQUIRED"/><tx:method name="save*" propagation="REQUIRED"/><tx:method name="create*" propagation="REQUIRED"/><tx:method name="add*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="del*" propagation="REQUIRED"/><tx:method name="select*" propagation="SUPPORTS" read-only="true"/><tx:method name="find*" propagation="SUPPORTS" read-only="true"/><tx:method name="search*" propagation="SUPPORTS" read-only="true"/><tx:method name="query*" propagation="SUPPORTS" read-only="true"/></tx:attributes></tx:advice>​<!--定义切面, 应用 通知--><aop:config><aop:advisor advice-ref="txAdvice"pointcut="execution(* service.*.*(..))"/></aop:config>​​​​</beans>
编写 springmvc 配置文件

springmvc.xml

 <?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:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">​<!--扫描 controller 包 --><context:component-scan base-package="controller"/><!--配置  视图 解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前缀--><property name="prefix" value="/WEB-INF/"/><!--后缀--><property name="suffix" value=".jsp"/></bean><mvc:annotation-driven/></beans>

编写mybatis配置文件

如果 mybatis 里面什么也 没有,可以 不配置改文件

 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>​<settings><!--增加 日志的输出  这样 控制台 就可以看到 sql--><setting name="logImpl" value="LOG4J"/></settings>​</configuration>

编写web.xml 文件
 <?xml version="1.0" encoding="UTF-8"?>​<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/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0" metadata-complete="false">​<display-name>Archetype Created Web Application</display-name><!-- 加载 spring 配置文件  --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></context-param><!--  监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>​<!--过滤器 处理中文--><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>​​​<!-- 配置 springmvc的 DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--配置 初始化 参数 ,自动加载 springmvc.xml--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>​
编写需求功能(这里以部门为例)
分页查询
编写mapper 接口 DepartmentMapper.java
    ```javaList<Department> findAll();```
编写mapper的xml 文件DepartmentMapper.xml
 ​<select id="findAll" resultType="department" >​select * from department</select>

编写 service及实现类

DepService.java

  List<Department> findAll();

DepServiceImpl.java

 @Servicepublic class DepServiceImpl  implements DepService {​​@Autowiredprivate DepartmentMapper departmentMapper;​​@Overridepublic List<Department> findAll() {return departmentMapper.findAll();}​}​

编写 controller

 @Controllerpublic class DepController {​@Autowiredprivate DepService depService;​private  final int PAGESIZE=3; // 定义 每页显示的 条数/*** 分页查询* @return*/@RequestMapping("/page")public String pageList(int current,Model model){//判断页码if(current==0){current =1; // 从第一页开始}// 分页处理PageHelper.startPage(current,PAGESIZE);// 获得全部数据List<Department> list = depService.searchInfo();// 创建 PageInfo 对象PageInfo<Department> pageInfo = new PageInfo<>(list);// 将 数据返回到 jspmodel.addAttribute("pageInfo",pageInfo);​return "listPage";}​​}

编写jsp页面

任意jsp页面

 <a href="/page?current=1"> 点我 分页查询 部门信息</a>

listPage.jsp

 ​
 <%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html><head><title>部门列表----分页查询</title></head><body><h2>部门名称                部门主管 </h2><ul>​<c:if test="${pageInfo.list !=null && pageInfo.list.size()>0 }"><c:forEach items="${pageInfo.list}" var="dep" ><li>${dep.depName}  -  ${dep.depEmpName}</li>​</c:forEach>​</c:if></ul>​<div>​<c:if test="${pageInfo.isFirstPage}"><%--   <a href="javascript:void(0)" disabled="disabled" >上一页</a>--%><button disabled >上一页</button></c:if><c:if test="${! pageInfo.isFirstPage}"><%--  <a href="/page?current=${pageInfo.pageNum-1}">上一页</a>--%><button onclick="window.location.href='/page?current=${pageInfo.pageNum-1}'" >上一页</button></c:if>​​<c:if test="${pageInfo.isLastPage}"><%--  <a href="javascript:void(0)" disabled="disabled" >下一页</a>--%><button disabled >下一页</button></c:if><c:if test="${! pageInfo.isLastPage}"><%-- <a href="/page?current=${pageInfo.pageNum+1}">下一页</a>--%><button onclick="window.location.href='/page?current=${pageInfo.pageNum+1}'" >下一页</button></c:if>​共${pageInfo.pages} 页 ,当前是 第${pageInfo.pageNum}页​</div></body></html>
 ​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/617821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过离散点拟合曲线

文章目录 使用离散点拟合曲线参考代码路径:作者源码:测试代码效果图:k3k4k5 使用离散点拟合曲线 参考代码路径: https://www.bragitoff.com/2015/09/c-program-for-polynomial-fit-least-squares/ https://gist.github.com/Thileban/272a67f2affdc14a5f69ad3220e5c24b https:/…

docker安装nacos+mysql+配置网络

一、配置网络 为什么要配置网络&#xff1f;因为 Nacos 内要连接MySQL数据库的&#xff0c;我的 MySQL 数据库也是用 Docker启动的&#xff0c;所以2个容器间要通信是需要配置他们使用相同的网络。这个操作要在启动Nacos容器之前。 注意&#xff1a;这里配置的网络只在镜像内部…

【python】OpenCV—Histogram(9)

学习参考来自 Python下opencv使用笔记&#xff08;九&#xff09;&#xff08;图像直方图&#xff09; 更多学习笔记可以参考 【python】OpenCV—RGB&#xff08;1&#xff09;【python】OpenCV—Rectangle, Circle, Selective Search&#xff08;1.2&#xff09;【python】…

Python学习从0到1 day3 python变量和debug

没关系&#xff0c;这破败的生活压不住我 ——24.1.13 一、变量的定义 1.什么是量&#xff1f; 量是程序运行中的最小单元 2.什么是变量呢&#xff1f; ①变量是存储数据的容器 ②变量存储的数据时临时的&#xff0c;变量只有在程序运行过程中是有效的&#xff0c;当程序执行结…

在vue中实现树形结构的表格,以及对数据结构的处理

需求&#xff1a;有一些告警数据&#xff0c;如果他们的计划编码相同则实现折叠效果&#xff0c;单击某行数据可以进行关闭&#xff0c;状态发生改变&#xff0c;关闭以后按钮禁用。 实现效果&#xff1a;目前所有告警消息都被关闭&#xff0c;如果未被关闭则可以进行关闭 实现…

【Python】编程练习的解密与实战(四)

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《Python | 编程解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1fa90;1. 初识Python &a…

集简云动作管理平台上线:创建强大且可分享的AI助手(GPTs)

OpenAI的GPT Store于昨天上线&#xff0c;用户可以找到好用的GPTs&#xff0c;也可以将自己的GPTs分享到GPT Store中。未来&#xff08;预计今年1季度&#xff09;甚至可以从GPTs Store中获取利润分成。 要创建强大的GPTs离不开调用外部的软件工具&#xff0c;比如查询CRM/ERP软…

Stable Diffusion初体验

体验了下 Stable Diffusion 2.0 的图片生成&#xff0c;效果还是挺惊艳的&#xff0c;没有细调prompt输入&#xff0c;直接输入了下面的内容&#xff1a; generate a Elimination Game image of burnning tree, Cyberpunk style 然后点击生成&#xff0c;经过了10多秒的等待就输…

TensorRT模型优化模型部署(七)--Quantization量化(PTQ and QAT)(二)

系列文章目录 第一章 TensorRT优化部署&#xff08;一&#xff09;–TensorRT和ONNX基础 第二章 TensorRT优化部署&#xff08;二&#xff09;–剖析ONNX架构 第三章 TensorRT优化部署&#xff08;三&#xff09;–ONNX注册算子 第四章 TensorRT模型优化部署&#xff08;四&am…

国产麒麟系统开机没有网络需要点一下这个设置

问题描述&#xff1a; 一台国产电脑网线连接正常&#xff0c;打开网页后显示无法访问&#xff0c;那么是什么原因无法上网呢&#xff1f;下面就告诉你一个小方法去解决一下这个问题&#xff1b; 检查故障&#xff1a; 检测交换机、网线、水晶头全都正常&#xff0c;同房间摆放的…

Hive基础知识(十):Hive导入数据的五种方式

1. 向表中装载数据&#xff08;Load&#xff09; 1&#xff09;语法 hive> load data [local] inpath 数据的 path[overwrite] into table student [partition (partcol1val1,…)]; &#xff08;1&#xff09;load data:表示加载数据 &#xff08;2&#xff09;local:表示…

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)

一、Cornerstone3D 是什么&#xff1f; Cornerstone3D官网&#xff1a;https://www.cornerstonejs.org/ 在线查看显示效果&#xff08;加载需时间&#xff0c;可先点击运行&#xff09;&#xff0c;欢迎fork 二、代码示例 了解了Cornerstone是什么&#xff0c;有什么作用后&…

竞赛保研 基于深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

2024年湖北职称评审对论文的要求

1.期刊发表版面的时间节点2024年12月及之前 2.期刊是正规的期刊&#xff0c;有国内刊号 3.期刊能在国家出版社总署检索到 4.文章内容查重符合知网查重标准 5.论文方向和申报专业方向一致 6.必须要是第一作者或者独著 7.评正高的人才们要准备中文核心论文两篇或出版专业学术论著…

UE5 简易MC教程学习心得

https://www.bilibili.com/video/BV12G411J7hV?p13&spm_id_frompageDriver&vd_sourceab35b4ab4f3968642ce6c3f773f85138 ———— 目录 0.摧毁逻辑学习 1.发光材质灯方块 2.封装。想让子类 不更改父类的变量。 3.材质命名习惯。 0.摧毁逻辑学习 达到摧毁的条件…

用模方软件进行模型的透明贴图,为什么翻出来透明部分是黑的?

答&#xff1a;透贴需要用PNG格式。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能&#xff0c;支持一键自动提取房屋结构&#xff0c;平均1栋复杂建筑物只需3…

JAVA毕业设计121—基于Java+Springboot的房屋租赁管理系统(源代码+数据库+9000字文档)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的房屋租赁管理系统(源代码数据库9000字文档)121 一、系统介绍 本项目还有ssm版本&#xff0c;分为用户、房东、管理员三种角色 1、用户&#xff1a; 注册、登…

【机器学习300问】5、什么是强化学习?

我将从三个方面为大家简明阐述什么是强化学习&#xff0c;首先从强化学习的定义大家的了解强化学习的特点&#xff0c;其次学习强化学习里特殊的术语加深对强化学习的理解&#xff0c;最后通过和监督学习与无监督学习的比较&#xff0c;通过对比学习来了解强化学习。 一、强化…

thinkphp6报错Driver [Think] not supported.

thinkphp6报错Driver [Think] not supported. 问题解决方法测试 问题 直接使用 View::fetch();渲染模板报错 解决方法 这个报错是由于有安装视图驱动造成的 运行如下命令安装即可 composer require topthink/think-view官方文档中是这么写的 视图功能由\think\View类配合视…

JavaScript基础03

1 - 循环 1.1 for循环 语法结构 for(初始化变量; 条件表达式; 操作表达式 ){//循环体 } 名称作用初始化变量通常被用于初始化一个计数器&#xff0c;该表达式可以使用 var 关键字声明新的变量&#xff0c;这个变量帮我们来记录次数。条件表达式用于确定每一次循环是否能被执行…