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

SSM 框架整合教程:从环境搭建到 CRUD 实现

前言

SSM 框架(Spring + SpringMVC + MyBatis)是企业级 Java 开发中非常流行的技术栈组合。Spring 负责依赖注入和事务管理,SpringMVC 处理 web 层请求,MyBatis 作为 ORM 框架操作数据库。本文将详细介绍 SSM 框架的整合过程,采用 XML + 注解的方式,从环境搭建到实现基本的 CRUD 操作,适合初学者入门学习。

第一章:搭建整合环境

1.1 整合思路

SSM 整合需要遵循一定的步骤,我们采用以下思路:

  1. 先搭建基础环境和 Spring 配置
  2. 整合 SpringMVC 框架
  3. 整合 MyBatis 框架
  4. 实现基本业务功能

1.2 创建数据库和表结构

首先创建所需的数据库和表:

create database ssm;use ssm;create table account(id int primary key auto_increment,name varchar(20),money double
);

 

1.3 创建 Maven 工程

创建一个 Maven Web 工程,命名为ssm,并在pom.xml中添加以下依赖:

<properties><spring.version>5.0.2.RELEASE</spring.version><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version><mysql.version>5.1.6</mysql.version><mybatis.version>3.4.5</mybatis.version>
</properties><dependencies><!-- Spring相关依赖 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</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-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-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- Servlet和JSP --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><!-- 连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>
</dependencies><build><finalName>ssm</finalName><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding><showWarnings>true</showWarnings></configuration></plugin></plugins></pluginManagement>
</build>

第二章:实体类与基础架构

2.1 编写实体类

创建cn.tx.domain包,编写 Account 实体类:

package cn.tx.domain;import java.io.Serializable;/*** 账户实体类*/
public class Account implements Serializable{// 主键private Integer id;// 账户名称private String name;// 账号的金额private Double money;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Double getMoney() {return money;}public void setMoney(Double money) {this.money = money;}@Overridepublic String toString() {return "Account{" +"id=" + id +", name='" + name + '\'' +", money=" + money +'}';}
}

2.2 编写 Service 接口和实现类

创建cn.tx.service包,编写 AccountService 接口:

package cn.tx.service;import cn.tx.domain.Account;
import java.util.List;/*** 账户服务接口*/
public interface AccountService {// 查询所有public List<Account> findAll();// 保存账户public void save(Account account);
}

创建cn.tx.service.impl包,编写 AccountServiceImpl 实现类:

package cn.tx.service.impl;import cn.tx.dao.AccountDao;
import cn.tx.domain.Account;
import cn.tx.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** 账户服务实现类*/
@Service
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountDao accountDao;@Overridepublic List<Account> findAll() {System.out.println("业务层:查询所有的账号...");return accountDao.findAll();}/*** 保存账户* @param account*/@Overridepublic void save(Account account) {accountDao.save(account);}
}

第三章:Spring 框架配置

3.1 搭建 Spring 开发环境

src/main/resources目录下创建applicationContext.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: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.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 开启注解扫描,扫描service包 --><context:component-scan base-package="cn.tx.service" /><!-- 配置druid连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql:///ssm" /><property name="username" value="root" /><property name="password" value="root" /></bean><!-- Spring整合MyBatis --><bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" ><!-- 注入连接池对象 --><property name="dataSource" ref="dataSource" /><!-- 加载映射配置文件 --><property name="mapperLocations" value="classpath:mappers/*.xml" /></bean><!-- 把dao对象存入到IOC容器中 --><bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactory" ref="sessionFactory" /><!-- 扫描dao所在的包 --><property name="basePackage" value="cn.tx.dao" /></bean><!-- 配置声明式事务管理 --><!-- 平台事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 配置事务的通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" read-only="true"/><tx:method name="*" /></tx:attributes></tx:advice><!-- 配置事务的增强 --><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(public * cn.tx.service.impl.*ServiceImpl.*(..))" /></aop:config>
</beans>

3.2 测试 Spring 环境

创建测试类,验证 Spring 环境是否搭建成功:

package cn.tx.test;import cn.tx.service.AccountService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Spring测试类*/
public class TestSpring {/*** 测试Spring框架的环境*/@Testpublic void run1(){// 创建工厂,加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");// 获取service对象,调用方法AccountService service = ac.getBean(AccountService.class);service.findAll();}
}

 

第四章:SpringMVC 框架配置与整合

4.1 配置 web.xml

webapp/WEB-INF目录下配置web.xml

<!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://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!-- 配置Spring的监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置加载类路径的配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- 配置前端控制器 --><servlet><servlet-name>dispatcherServlet</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><!-- 启动加载 --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</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>

4.2 创建 SpringMVC 配置文件

src/main/resources目录下创建springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 扫描controller的注解 --><context:component-scan base-package="cn.tx.controller"></context:component-scan><!-- 配置视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- JSP文件所在的目录 --><property name="prefix" value="/pages/" /><!-- 文件的后缀名 --><property name="suffix" value=".jsp" /></bean><!-- 开启对SpringMVC注解的支持 --><mvc:annotation-driven />
</beans>

4.3 编写 Controller

创建cn.tx.controller包,编写 AccountController:

package cn.tx.controller;import cn.tx.domain.Account;
import cn.tx.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;/*** 账户控制器*/
@Controller
@RequestMapping("/account")
public class AccountController {// 注入Service@Autowiredprivate AccountService accountService;/*** 查询所有* @return*/@RequestMapping("/findAll.do")public ModelAndView findAll(){System.out.println("表现层:查询所有的账号...");// 调用service对象的方法List<Account> list = accountService.findAll();for (Account account : list) {System.out.println(account);}ModelAndView mv = new ModelAndView();mv.addObject("accountList", list);mv.setViewName("suc");return mv;}/*** 保存* @return*/@RequestMapping("/save.do")public String save(Account account){// 调用service,保存数据accountService.save(account);return "redirect:findAll.do"; // 重定向到查询所有方法,避免表单重复提交}
}

第五章:MyBatis 框架配置与整合

5.1 编写 Dao 接口

创建cn.tx.dao包,编写 AccountDao 接口:

package cn.tx.dao;import cn.tx.domain.Account;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import java.util.List;/*** 账户数据访问接口*/
public interface AccountDao {@Select(value = "select * from account")public List<Account> findAll();@Insert("insert into account (name,money) values (#{name},#{money})")void save(Account account);
}

5.2 编写 MyBatis 配置文件(可选)

src/main/resources目录下创建SqlMapConfig.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><!-- 可以配置MyBatis的全局属性 --><!-- 例如别名设置、插件等 -->
</configuration>

第六章:编写 JSP 页面

6.1 创建首页

webapp目录下创建index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>SSM整合示例</title>
</head>
<body><h3>账号列表页面</h3><a href="/account/findAll.do">查询所有</a><h3>添加账户</h3><form action="/account/save.do" method="post">姓名:<input type="text" name="name" /><br/>金额:<input type="text" name="money" /><br/><input type="submit" value="保存" /></form>
</body>
</html>

6.2 创建成功页面

webapp/pages目录下创建suc.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><title>账户列表</title><style>table {border-collapse: collapse;width: 60%;margin: 20px auto;}th, td {border: 1px solid #ddd;padding: 8px;text-align: left;}th {background-color: #f2f2f2;}tr:nth-child(even) {background-color: #f2f2f2;}.container {text-align: center;margin-top: 20px;}</style>
</head>
<body>
<div class="container"><h3>账户列表</h3><table><tr><th>ID</th><th>姓名</th><th>金额</th></tr><c:forEach items="${accountList}" var="account"><tr><td>${account.id}</td><td>${account.name}</td><td>${account.money}</td></tr></c:forEach></table><a href="/index.jsp">返回首页</a>
</div>
</body>
</html>

第七章:部署与测试

7.1 部署项目

  1. 将项目添加到 Tomcat 服务器
  2. 启动 Tomcat 服务器
  3. 在浏览器中访问http://localhost:8080/ssm

7.2 功能测试

  1. 测试查询功能:点击 "查询所有" 链接,应该能看到数据库中的所有账户信息(如果有的话)
  2. 测试添加功能:在表单中输入姓名和金额,点击 "保存" 按钮,应该能看到新添加的账户信息

 

 

总结

通过本文的步骤,我们完成了 SSM 框架的整合,并实现了基本的查询和保存功能。主要关键点包括:

  1. 正确配置 Maven 依赖,确保各框架版本兼容
  2. 配置 Spring 的核心配置文件,实现依赖注入和事务管理
  3. 配置 SpringMVC,实现请求处理和视图解析
  4. 整合 MyBatis,实现数据访问层功能
  5. 通过注解实现各层之间的依赖注入

在实际开发中,还可以根据需要添加更多功能,如分页、条件查询、删除、更新等操作。同时,也可以考虑使用 Spring Boot 来简化 SSM 框架的配置,提高开发效率。

常见问题及解决方法

  1. 数据库连接问题:检查数据库驱动版本、连接 URL、用户名和密码是否正确
  2. 依赖冲突:使用mvn dependency:tree命令查看依赖树,解决版本冲突
  3. 注解扫描问题:确保 Spring 和 SpringMVC 的注解扫描包配置正确,避免重复扫描或漏扫
  4. 事务不生效:检查事务配置是否正确,特别是 AOP 切入点表达式是否匹配 Service 实现类
  5. 中文乱码:确保 web.xml 中配置了 CharacterEncodingFilter 过滤器

http://www.dtcms.com/a/273143.html

相关文章:

  • html页面,一个控件,可以粘贴图片和样式,一直按enter键会将下面内容推下去
  • OrCAD 24.1补丁005中文界面切换指南
  • QT Android 如何打包大文件到目录下?
  • 【Pandas】pandas DataFrame from_records
  • Android开发中几种scope的对比
  • ClickHouse JSON 解析
  • Kubernetes Dashboard UI 部署安装
  • stm32计时的两个方法
  • HarmonyOS学习记录4
  • 基于U-net的高阶心音信号去噪系统设计与实现
  • SSE方式调用php,不是直接 post,
  • 【C++基础语法】
  • STM32F103之ModBus\RS232\RS422\RS485
  • 瑞幸X多邻国“疯感”营销:以情感共鸣取代硬广触达
  • Qt开发:QtConcurrent介绍和使用
  • Python正则表达式实战指南
  • 深度学习13(经典卷积网络结构+卷积网络结构优化)
  • J1939协议
  • 个体户核定多地暂停,将不再享受核定征收?
  • 人工智能-基础篇-29-什么是低代码平台?
  • 大数据学习6:Sqoop数据迁移工具
  • ArcGIS 打开 nc 降雨量文件
  • MinerU2将PDF转成md文件,并分拣图片
  • TB6612电机驱动
  • [注解: @ComponentScan]-原理分析
  • Cloudflare 发布容器服务公测版:边缘计算新时代来临?
  • 职坐标:嵌入式AI边缘计算实战
  • React 实现五子棋人机对战小游戏
  • FFmpeg Windows安装
  • 定位模拟的详细步骤