当前位置: 首页 > news >正文

java简单ssm(spring+springmvc+mybatis)框架结构demo

1. 项目结构整理

项目采用标准的SSM(Spring + SpringMVC + MyBatis)框架结构,具体如下:

\ssm\
├── pom.xml                     # Maven项目依赖管理文件
├── src\                        # 源代码目录
│   └── main\                   # 主要源码
│       ├── java\               # Java源代码
│       │   └── com\            
│       │       └── demo\       
│       │           ├── bean\   # 实体类
│       │           │   ├── Dept.java    # 部门实体
│       │           │   └── Emp.java     # 员工实体
│       │           ├── controller\      # 控制器
│       │           │   └── SSMController.java  # 测试控制器
│       │           └── dao\     # 数据访问接口
│       │               ├── DeptDao.java  # 部门DAO接口
│       │               └── EmpDao.java   # 员工DAO接口
│       └── resources\          # 资源文件
│           ├── com\            # MyBatis映射文件
│           │   └── demo\       
│           │       └── dao\    
│           │           ├── DeptDao.xml   # 部门映射文件
│           │           └── EmpDao.xml    # 员工映射文件
│           ├── db.properties    # 数据库配置文件
│           ├── mybatis-config.xml  # MyBatis核心配置
│           ├── spring.xml       # Spring配置文件
│           └── springmvc.xml    # SpringMVC配置文件
├── ssm.iml                     # IDEA项目文件
└── web\                        # Web资源├── WEB-INF\                # Web应用配置│   ├── page\               # JSP页面│   │   └── success.jsp      # 成功页面│   └── web.xml              # Web应用部署描述符└── index.jsp                # 首页

2. SSM框架知识点练习分析

此项目主要练习了以下SSM框架的核心知识点:

Spring知识点:

  • Spring IOC容器的配置与使用
  • 注解扫描配置(@Controller@Service等)
  • 依赖注入(DI)实现(通过@Autowired注解)
  • 数据源配置(Druid连接池)
  • 事务管理配置(声明式事务)

SpringMVC知识点:

  • SpringMVC前端控制器配置
  • 请求映射配置(@RequestMapping
  • 控制器开发(Controller)
  • 视图解析器配置(InternalResourceViewResolver)
  • 静态资源处理
  • 编码过滤器配置
  • REST风格支持配置

MyBatis知识点:

  • MyBatis核心配置文件
  • 映射文件(Mapper XML)的编写
  • SQL语句与Java方法的映射
  • 实体类与数据表的映射
  • MyBatis与Spring的整合配置
  • Mapper接口扫描配置

其他综合知识点:

  • Maven项目管理与依赖配置
  • Web项目目录结构
  • JSP视图开发
  • 数据库连接配置

3. 项目文件功能分析

Java源代码文件:

  • 实体类(Bean):

    • Dept.java:部门实体类,包含部门编号(deptno)、部门名称(dname)、部门位置(loc)以及部门下的员工列表(emps),实现了Serializable接口支持序列化。
    • Emp.java:员工实体类,包含员工编号(empno)、姓名(ename)、职位(job)、上级(mgr)、入职日期(hiredate)、薪资(sal)、奖金(comm)和部门编号(deptno)。
  • 控制器(Controller):

    • SSMController.java:处理/test请求,注入EmpDao并调用其方法查询员工信息,将结果添加到Model中传递给视图。
  • 数据访问层(DAO):

    • DeptDao.java:部门数据访问接口,定义了查询部门信息的方法。
    • EmpDao.java:员工数据访问接口,定义了根据员工编号查询员工的方法。

配置文件:

  • 数据库配置:

    • db.properties:配置数据库连接信息,包括驱动类、URL、用户名和密码。
  • Spring配置:

    • spring.xml:Spring核心配置文件,配置了组件扫描、数据源、事务管理器以及与MyBatis的整合。
  • SpringMVC配置:

    • springmvc.xml:SpringMVC配置文件,配置了控制器扫描、静态资源处理、注解驱动以及视图解析器。
  • MyBatis配置:

    • mybatis-config.xml:MyBatis核心配置文件,配置了数据库环境和映射器扫描。
    • DeptDao.xml:部门DAO的MyBatis映射文件(目前为空)。
    • EmpDao.xml:员工DAO的MyBatis映射文件,实现了根据员工编号查询员工的SQL语句。

Web配置和页面:

  • web.xml:Web应用部署描述符,配置了Spring监听器、SpringMVC前端控制器、字符编码过滤器和REST风格支持过滤器。
  • success.jsp:成功页面,显示SSM框架测试信息和从控制器传递过来的员工姓名。

项目整体功能总结

这是一个简单的SSM框架练习项目,主要实现了以下功能流程:

  1. 用户访问/test请求
  2. SpringMVC的DispatcherServlet接收请求并交由SSMController处理
  3. SSMController注入EmpDao并调用其selectEmpByEmpno方法查询员工信息
  4. EmpDao通过MyBatis执行SQL查询数据库
  5. 查询结果返回给控制器,控制器将员工姓名添加到Model中
  6. 控制器返回"success"视图名,由SpringMVC视图解析器解析为对应的JSP页面
  7. JSP页面显示查询结果

这个项目虽然简单,但完整展示了SSM框架的核心工作流程和各组件之间的协作关系,是学习SSM框架的基础入门示例。

代码

实体类
public class Emp implements Serializable {private Integer empno;private String ename;private String job;private Integer mgr;private Date hiredate;private Double sal;private Double comm;private Integer deptno;
}public class Dept implements Serializable {private Integer deptno;private String dname;private String loc;private List<Emp> emps;
}
dao.java

import com.demo.bean.Emp;public interface EmpDao {public Emp selectEmpByEmpno(Integer empno);
}import com.demo.bean.Dept;public interface DeptDao {public Dept selectDeptByDeptno(Integer deptno);public Dept selectDeptByStep(Integer deptno);public Dept selectDeptByStemp2(Integer deptno);
}
dao.xml
<?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="com.demo.dao.EmpDao"><select id="selectEmpByEmpno" resultType="com.demo.bean.Emp">select * from emp where empno = #{empno}</select>
</mapper>
<?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="com.demo.dao.DeptDao"></mapper>
controller 层
package com.demo.controller;import com.demo.bean.Emp;
import com.demo.dao.EmpDao;
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
public class SSMController {@AutowiredEmpDao empDao;@RequestMapping("/test")public String test(Model model){System.out.println("test");Emp emp = empDao.selectEmpByEmpno(1111);System.out.println(emp);model.addAttribute("emp",emp.getEname());return "success";}
}
前端页面

<!-- index.jsp -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body>$END$</body>
</html><!-- WEB-INF/page/success.jsp --><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
ssm  6666
<br>
${emp}
</body>
</html>

配置文件

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/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--spring相关配置-->
<!--    监听器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<!--    属性,用来配置spring--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></context-param><!--springMVC相关配置--><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:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--配置编码过滤器--><filter><filter-name>CharacterEncoding</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><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--配置REST过滤器--><filter><filter-name>rest</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>rest</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>
pom.xml
<?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.demo</groupId><artifactId>ssm</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/cglib/cglib --><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version></dependency><!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency><!-- https://mvnrepository.com/artifact/aopalliance/aopalliance --><dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.21</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-web --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.2.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.3.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><!-- &lt;!&ndash; https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api &ndash;&gt;<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>--><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.10.3</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.3</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.10.3</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><!-- https://mvnrepository.com/artifact/javax.servlet/jstl --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis-ehcache</artifactId><version>1.2.0</version></dependency><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.0-alpha1</version></dependency><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>2.0.0-alpha1</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.4</version></dependency></dependencies>
</project>
db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
username=root
password=1234
mybatis-config.xml
<?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><properties resource="db.properties" ></properties><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><package name="com.demo.dao"/></mappers>
</configuration>
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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!--定义扫描的包--><context:component-scan base-package="com.demo" use-default-filters="false"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!--定义外部配置文件--><context:property-placeholder location="classpath:db.properties"></context:property-placeholder><!--配置数据源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${driver}"></property><property name="url" value="${url}"></property><property name="username" value="${username}"></property><property name="password" value="${password}"></property></bean><!--配置事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!--开启事务控制--><tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven><!--整合mybatis--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="mapperLocations" value="classpath:com/demo/dao/*.xml"></property></bean><!--定义mybatis扫描器,扫描映射文件--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.demo.dao"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--定义扫描的包use-default-filters:默认的扫描会包含@Controller,@Service,@Component,@Repository,我们再进行配置的时候需要扫描这么多组件只扫描@Controller这个注解--><context:component-scan base-package="com.demo" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!--请求静态资源--><mvc:default-servlet-handler></mvc:default-servlet-handler><!--请求动态资源--><mvc:annotation-driven></mvc:annotation-driven><!--设置视图管理器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/page/"></property><property name="suffix" value=".jsp"></property></bean>
</beans>
http://www.xdnf.cn/news/1375111.html

相关文章:

  • 大模型重构建筑“能耗基因“:企业如何用物联中台打响能源革命?
  • 手写MyBatis第36弹:MyBatis执行流程中SQL命令类型解析
  • 登录业务——密码重置与强制修改初始密码实现思路
  • 【微信小程序】分别解决H5的跨域代理问题 和小程序正常不需要代理问题
  • Coze用户账号设置修改用户名-后端源码
  • map|math
  • 腾讯位置商业授权微信小程序路线规划
  • 【开源工具】基于Flask与Socket.IO的跨平台屏幕监控系统实战(附完整源码)
  • 前端性能优化:从指标监控到全链路落地(2024最新实战指南)
  • 论文阅读:Gorilla: Large Language Model Connected with Massive APIs
  • 深度学习入门:神经网络基础知识
  • lesson47:Linux常用软件使用指南:远程连接、远程拷贝、Vim与Nginx
  • VESA时序检测模块设计verilog实现
  • Ubuntu 24 Server 如何设置无线网络
  • imx6ull-驱动开发篇45——Linux 下 SPI 驱动框架简介
  • d435i相机读取镜头内参和相对之间的外参
  • 艾体宝新闻 | 98%好评率!KnowBe4 连续5年蝉联第一,现开放免费钓鱼测试等你解锁
  • 内网应用如何实现外网访问?外地通过公网地址访问内网服务器的设置方法
  • 遗传算法:模拟自然选择的优化智慧
  • Spring Boot项目集成日志系统使用完整指南
  • 欧洲数字化养殖平台 Herdwatch 借力 Iceberg + StarRocks 提升分析能力
  • 嵌入式开发学习 C++:day01
  • 动态规划:硬币兑换(有趣)
  • LeetCode - 739. 每日温度
  • 线性回归原理推导与应用(十一):多重共线性
  • 获取服务器指标的信息
  • bin log 和 redo log有什么区别
  • Mybatis总结
  • 【如何解决Java中的ClassCastException类转换异常问题】
  • 基于Matlab结合肤色检测与卷积神经网络的人脸识别方法研究