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

整合ssm框架,详细讲解

今天针对 SSMSpringSpringMVCMyBatis框架整合展开了学习学习内容如下我们在进行 JavaEE 开发时为了实现解耦和提高开发效率通常会采用 SSMSpringSpringMVCMyBatis框架整合的方案。Spring作为核心容器负责管理业务组件Service和持久层组件DAO/Repository并提供事务管理功能。SpringMVC作为表现层框架负责处理 HTTP 请求接收前端参数并返回视图或数据。MyBatis作为持久层框架负责简化数据库操作实现对象与数据库表的映射。SSM 框架整合的核心思路是Spring 整合 MyBatis将 MyBatis 的SqlSessionFactory交给 Spring 容器管理并扫描 Mapper 接口生成代理对象让 Service 层可以直接注入 Mapper 进行使用。SpringMVC 的配置配置前端控制器DispatcherServlet和处理器映射处理 Web 层的请求。1. 环境准备与依赖配置首先我们需要在pom.xml中引入 SSM 三大框架以及数据库驱动、连接池等必要的依赖。注意为了使用注解进行事务管理我们需要引入spring-aspects依赖。1dependencies 2 !-- Spring 上下文环境 -- 3 dependency 4 groupIdorg.springframework/groupId 5 artifactIdspring-context/artifactId 6 version5.3.15/version 7 /dependency 8 !-- Spring 事务 -- 9 dependency 10 groupIdorg.springframework/groupId 11 artifactIdspring-tx/artifactId 12 version5.3.15/version 13 /dependency 14 !-- Spring JDBC -- 15 dependency 16 groupIdorg.springframework/groupId 17 artifactIdspring-jdbc/artifactId 18 version5.3.15/version 19 /dependency 20 !-- SpringMVC -- 21 dependency 22 groupIdorg.springframework/groupId 23 artifactIdspring-webmvc/artifactId 24 version5.3.15/version 25 /dependency 26 27 !-- Druid 数据源 -- 28 dependency 29 groupIdcom.alibaba/groupId 30 artifactIddruid/artifactId 31 version1.2.8/version 32 /dependency 33 34 !-- MySQL 驱动 -- 35 dependency 36 groupIdmysql/groupId 37 artifactIdmysql-connector-java/artifactId 38 version8.0.28/version 39 /dependency 40 41 !-- MyBatis -- 42 dependency 43 groupIdorg.mybatis/groupId 44 artifactIdmybatis/artifactId 45 version3.5.9/version 46 /dependency 47 !-- MyBatis 与 Spring 整合包 -- 48 dependency 49 groupIdorg.mybatis/groupId 50 artifactIdmybatis-spring/artifactId 51 version2.0.7/version 52 /dependency 53 54 !-- Lombok -- 55 dependency 56 groupIdorg.projectlombok/groupId 57 artifactIdlombok/artifactId 58 version1.18.22/version 59 /dependency 60/dependencies2. 配置文件详解SSM 整合涉及三个主要的配置文件web.xmlWeb 容器配置、springmvc.xml表现层配置、applicationContext.xml业务与持久层配置。2.1 web.xml 配置这是 JavaWeb 的入口我们需要配置 Spring 的监听器和 SpringMVC 的前端控制器。1web-app 2 !-- 配置 Spring 监听器加载业务层配置 -- 3 listener 4 listener-classorg.springframework.web.context.ContextLoaderListener/listener-class 5 /listener 6 !-- 指定 Spring 配置文件位置 -- 7 context-param 8 param-namecontextConfigLocation/param-name 9 param-valueclasspath:applicationContext.xml/param-value 10 /context-param 11 12 !-- 配置 SpringMVC 前端控制器 -- 13 servlet 14 servlet-namedispatcher/servlet-name 15 servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class 16 init-param 17 param-namecontextConfigLocation/param-name 18 param-valueclasspath:springmvc.xml/param-value 19 /init-param 20 load-on-startup1/load-on-startup 21 /servlet 22 servlet-mapping 23 servlet-namedispatcher/servlet-name 24 url-pattern//url-pattern 25 /servlet-mapping 26/web-app2.2 MyBatis 配置 (SqlMapConfig.xml)虽然大部分配置在 Spring 中完成但 MyBatis 的核心配置文件如别名、插件等仍需单独配置。1configuration 2 !-- 别名配置对应实体类包 -- 3 typeAliases 4 package namecom.xzit.entity/ 5 /typeAliases 6 !-- Mapper 映射文件位置 -- 7 mappers 8 package namecom.xzit.mapper/ 9 /mappers 10/configuration2.3 Spring 核心配置 (applicationContext.xml)这是整合的关键配置了数据源、SqlSessionFactory 和 Mapper 扫描。1beans xmlnshttp://www.springframework.org/schema/beans 2 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance 3 xmlns:contexthttp://www.springframework.org/schema/context 4 xmlns:txhttp://www.springframework.org/schema/tx 5 xsi:schemaLocation... 6 7 !-- 1. 加载数据库配置文件 -- 8 context:property-placeholder locationclasspath:db.properties/ 9 10 !-- 2. 组件扫描扫描 Service 和 Repository -- 11 context:component-scan base-packagecom.xzit/ 12 13 !-- 3. 配置数据源 Druid -- 14 bean iddataSource classcom.alibaba.druid.pool.DruidDataSource 15 property namedriverClassName value${jdbc.driver}/ 16 property nameurl value${jdbc.url}/ 17 property nameusername value${jdbc.username}/ 18 property namepassword value${jdbc.password}/ 19 /bean 20 21 !-- 4. 配置 SqlSessionFactory -- 22 bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean 23 property namedataSource refdataSource/ 24 property nameconfigLocation valueclasspath:SqlMapConfig.xml/ 25 /bean 26 27 !-- 5. 配置 Mapper 扫描器生成代理对象 -- 28 bean classorg.mybatis.spring.mapper.MapperScannerConfigurer 29 property namebasePackage valuecom.xzit.mapper/ 30 !-- 如果 SqlSessionFactory 的 id 不是默认的需要指定 -- 31 property namesqlSessionFactoryBeanName valuesqlSessionFactory/ 32 /bean 33 34 !-- 6. 配置事务管理器 -- 35 bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManager 36 property namedataSource refdataSource/ 37 /bean 38 !-- 开启注解事务 -- 39 tx:annotation-driven transaction-managertransactionManager/ 40/beans2.4 SpringMVC 配置 (springmvc.xml)配置视图解析器和注解驱动。1beans xmlnshttp://www.springframework.org/schema/beans 2 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance 3 xmlns:contexthttp://www.springframework.org/schema/context 4 xmlns:mvchttp://www.springframework.org/schema/mvc 5 xsi:schemaLocation... 6 7 !-- 扫描控制层组件 -- 8 context:component-scan base-packagecom.xzit.controller/ 9 10 !-- 开启 MVC 注解驱动 -- 11 mvc:annotation-driven/ 12 13 !-- 配置视图解析器 (如果使用 JSP) -- 14 bean classorg.springframework.web.servlet.view.InternalResourceViewResolver 15 property nameprefix value/WEB-INF/views// 16 property namesuffix value.jsp/ 17 /bean 18/beans3. 代码实战完成配置后我们编写一个简单的用户管理模块来测试整合是否成功。3.1 数据库表结构1CREATE TABLE user ( 2 id int NOT NULL AUTO_INCREMENT, 3 name varchar(255) DEFAULT NULL, 4 age int DEFAULT NULL, 5 PRIMARY KEY (id) 6);3.2 实体类 (Entity)1package com.xzit.entity; 2 3import lombok.Data; 4 5Data 6public class User { 7 private Integer id; 8 private String name; 9 private Integer age; 10}3.3 Mapper 接口与 XML接口1package com.xzit.mapper; 2 3import com.xzit.entity.User; 4import org.apache.ibatis.annotations.Mapper; 5import org.springframework.stereotype.Repository; 6 7import java.util.List; 8 9Repository 10public interface UserMapper { 11 void save(User user); 12 User findById(Integer id); 13 ListUser findAll(); 14}UserMapper.xml (放在 resources/mapper 目录下)1?xml version1.0 encodingUTF-8 ? 2!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd 3mapper namespacecom.xzit.mapper.UserMapper 4 insert idsave parameterTypeUser 5 INSERT INTO user(name, age) VALUES(#{name}, #{age}) 6 /insert 7 select idfindById resultTypeUser 8 SELECT * FROM user WHERE id #{id} 9 /select 10 select idfindAll resultTypeUser 11 SELECT * FROM user 12 /select 13/mapper3.4 Service 层1package com.xzit.service; 2 3import com.xzit.entity.User; 4import com.xzit.mapper.UserMapper; 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Service; 7import org.springframework.transaction.annotation.Transactional; 8 9import java.util.List; 10 11Service 12Transactional // 开启事务 13public class UserService { 14 15 Autowired 16 private UserMapper userMapper; 17 18 public void addUser(User user) { 19 userMapper.save(user); 20 // 如果这里抛出异常数据会回滚 21 } 22 23 public User getUserById(Integer id) { 24 return userMapper.findById(id); 25 } 26}3.5 Controller 层1package com.xzit.controller; 2 3import com.xzit.entity.User; 4import com.xzit.service.UserService; 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Controller; 7import org.springframework.web.bind.annotation.*; 8 9RestController // 等价于 Controller ResponseBody 10RequestMapping(/user) 11public class UserController { 12 13 Autowired 14 private UserService userService; 15 16 PostMapping(/add) 17 public String addUser(RequestBody User user) { 18 userService.addUser(user); 19 return success; 20 } 21 22 GetMapping(/{id}) 23 public User getUser(PathVariable Integer id) { 24 return userService.getUserById(id); 25 } 26}

相关文章:

整合ssm框架,详细讲解

今天针对 SSM(SpringSpringMVCMyBatis)框架整合展开了学习,学习内容如下:我们在进行 JavaEE 开发时,为了实现解耦和提高开发效率,通常会采用 SSM(SpringSpringMVCMyBatis)框架整合的…...

矩阵键盘原理与实战:从扫描算法到Arduino/CircuitPython驱动指南

1. 项目概述:为什么我们需要矩阵键盘? 在嵌入式项目里,给设备加几个按钮是再常见不过的需求。但如果你需要10个、12个甚至16个独立的按键呢?按照传统思路,一个按键对应一个微控制器的数字输入引脚,那你的Ar…...

自制AVR ISP批量编程器:从ZIF插座到AVRDUDE一键烧录全攻略

1. 项目概述:为什么你需要一个批量编程器?如果你玩过Arduino或者自己做过一些基于AVR单片机的小项目,那么对“烧录程序”这个步骤一定不陌生。通常,我们是用一根USB线,或者一个USBasp、USBtinyISP这样的小编程器&#…...

树莓派驱动MAX31855热电偶传感器:从SPI通信到高精度测温实践

1. 项目概述:从热电偶到Python读数在嵌入式开发、工业监控或者任何需要精确测温的项目里,热电偶(Thermocouple)往往是工程师们的首选传感器。它结构简单、皮实耐用,而且测温范围能从零下两百多度一直覆盖到上千度&…...

5分钟实现专业级3D高斯泼溅渲染:Unity场景重建终极指南

5分钟实现专业级3D高斯泼溅渲染:Unity场景重建终极指南 【免费下载链接】UnityGaussianSplatting Toy Gaussian Splatting visualization in Unity 项目地址: https://gitcode.com/gh_mirrors/un/UnityGaussianSplatting 想象一下,你花费数小时扫…...

【SRC漏洞挖掘系列】第02期:XSS与CSRF——Web世界的“偷家”艺术

上期回顾:我们扒光了目标的资产(情报收集)。本期开始,我们要对这些目标进行“物理超度”——哦不,是合法的安全测试。今天的主角是 Web 漏洞界的“哼哈二将”:XSS​ 和 CSRF。一、为什么这俩货这么重要&…...

企业内网开发环境通过Taotoken安全调用外部大模型API

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内网开发环境通过Taotoken安全调用外部大模型API 对于许多企业开发团队而言,在内部研发流程中引入大模型能力已成为…...

RK3588 ARM开发板KVM虚拟机搭建与性能优化实战指南

1. 项目概述:为什么要在RK3588上折腾虚拟机?最近几年,国产芯片的势头越来越猛,尤其是在嵌入式和高性能计算领域。RK3588这颗芯片,作为瑞芯微的旗舰级SoC,凭借其8核CPU(4xA76 4xA55)…...

iOS设备激活锁绕过全指南:AppleRa1n离线解锁解决方案

iOS设备激活锁绕过全指南:AppleRa1n离线解锁解决方案 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾遇到过这样的情况:购买了一台二手iPhone,却发现设备被…...

独立开发者应对Claude Code封号风险的备用方案与接入实践

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者应对Claude Code封号风险的备用方案与接入实践 对于依赖Claude Code进行日常开发的独立开发者或小型团队而言&#xff0…...

基于开源LLM构建私有化智能体:从意图解析到安全执行的工程实践

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫giocaizzi/ralph-copilot。乍一看这个名字,可能会让人联想到微软的 GitHub Copilot,但它的定位和实现方式其实非常不同。简单来说,这是一个基于开源大语言模型&#xff…...

3个核心优势:重新定义Windows平台Fastboot工具的工作流

3个核心优势:重新定义Windows平台Fastboot工具的工作流 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance FastbootEnhance是一款专为Win…...

3大核心功能解密:HS2-HF_Patch如何让Honey Select 2游戏体验焕然一新

3大核心功能解密:HS2-HF_Patch如何让Honey Select 2游戏体验焕然一新 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 如果你正在玩Honey Select 2却…...

3步彻底清理Windows右键菜单:ContextMenuManager高效管理指南

3步彻底清理Windows右键菜单:ContextMenuManager高效管理指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾因Windows右键菜单中堆积如山的…...

基于Feather M0与VS1053打造可穿戴MP3播放器:从硬件到软件的完整DIY指南

1. 项目概述:打造你的专属可穿戴音乐伴侣几年前,我在一个创客市集上看到一个朋友把MP3播放器做成了复古磁带的样子,当时就觉得特别酷。那种把数字音乐和实体交互结合起来的乐趣,是手机播放器给不了的。后来接触到Adafruit的Feathe…...

4.4 Spark SQL数据源 - JSON

Spark SQL JSON数据源实战涵盖:自动Schema推断读取JSON文件、spark.read.json()方法应用、文件格式规范(每行独立JSON)、HDFS文件操作及Spark Shell交互式查询。核心实践包括:从HDFS读取用户与成绩JSON文件创建DataFrame并关联分析…...

Loop窗口管理:终极Mac多窗口高效布局指南

Loop窗口管理:终极Mac多窗口高效布局指南 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是不是经常在Mac上同时打开十几个窗口,然后迷失在层层叠叠的界面中?写代码…...

基于CircuitPython与NeoTrellis的DIY可编程声音板:从硬件搭建到软件编程全解析

1. 项目概述:打造你的专属可编程声音板如果你对嵌入式开发感兴趣,想亲手制作一个既炫酷又实用的交互设备,那么这个基于CircuitPython和NeoTrellis的DIY可编程声音板项目,绝对是一个不容错过的实践机会。简单来说,这是一…...

ESP32开发板Flash型号傻傻分不清?教你用esptool.py一键查询并看懂ID(附厂商对照表)

ESP32开发板Flash型号识别全攻略:从ID解析到厂商对照 当你拿到一块ESP32开发板或模组时,是否经常遇到这样的困惑:Flash芯片的具体型号和容量不明,导致在menuconfig配置时无从下手?这种"盲盒"体验确实让人头疼…...

ChartGPT终极指南:如何用AI快速生成专业图表

ChartGPT终极指南:如何用AI快速生成专业图表 【免费下载链接】chart-gpt AI tool to build charts based on text input 项目地址: https://gitcode.com/gh_mirrors/ch/chart-gpt 如果你还在为制作数据图表而烦恼,那么ChartGPT正是你需要的AI图表…...

aivectormemory:轻量级向量记忆库,为AI应用开发提供灵活存储方案

1. 项目概述:向量记忆库的“新玩家”最近在折腾AI应用开发,特别是涉及到需要让模型“记住”大量私有知识或者进行复杂对话的场景时,一个绕不开的核心组件就是向量数据库。大家熟知的Pinecone、Weaviate、Milvus这些方案固然强大,但…...

3分钟掌握ppInk:Windows屏幕标注工具的终极使用指南

3分钟掌握ppInk:Windows屏幕标注工具的终极使用指南 【免费下载链接】ppInk Fork from Gink 项目地址: https://gitcode.com/gh_mirrors/pp/ppInk 你是否在演示时需要用鼠标或触摸屏快速标注屏幕内容?是否希望有一款简单易用但功能强大的标注工具…...

魔兽世界宏编辑器终极指南:5分钟掌握GSE高级宏编译工具

魔兽世界宏编辑器终极指南:5分钟掌握GSE高级宏编译工具 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_mirrors/gs/GSE-Advanced-Macro-Compi…...

告别Web Client:当ESXi主机SSH连不上时,我用这10条esxcli命令完成了紧急修复

告别Web Client:当ESXi主机SSH连不上时,我用这10条esxcli命令完成了紧急修复 凌晨三点,数据中心告警铃声刺破夜空。一台承载着核心业务的ESXi主机突然失联,vSphere Client和Web界面均无法访问,SSH连接也毫无响应。面对…...

免费网盘直链下载助手:一站式解决九大平台文件下载难题

免费网盘直链下载助手:一站式解决九大平台文件下载难题 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

基于PyPortal与AirNow API的物联网空气质量监测显示系统实战

1. 项目概述与核心价值如果你对物联网开发感兴趣,或者一直想做一个能摆在桌面上、实时显示环境数据的“小玩意儿”,那么这个基于PyPortal和AirNow API的空气质量监测显示系统,绝对是一个能让你从零到一跑通整个物联网数据流、并且最终获得一个…...

终极英雄联盟工具箱:5个核心功能快速提升你的游戏体验

终极英雄联盟工具箱:5个核心功能快速提升你的游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款专为英雄…...

零基础转行信息安全,老师傅来支招

现在这个环境下,转行做信息安全的人已经越来越少了,但还是有热爱这一行的人。 今天,我们以零基础入行为例,按照下面的成长路径,来分析分析从2025年的招聘数据来看,需要哪些能力。 对零基础转行的人来说&a…...

如何像管理代码一样构建个人技能树:从知识管理到职业发展

1. 项目概述与核心价值最近在整理个人知识库和技能树时,发现了一个挺有意思的项目,叫mxyhi/ok-skills。乍一看,这像是一个个人仓库,但深入探究后,我发现它远不止是一个简单的代码托管。它更像是一个结构化的个人能力发…...

基于PyPortal与CircuitPython的桌面空气质量监测站DIY指南

1. 项目概述:打造你的桌面级空气质量监测站如果你和我一样,对身边的空气质量有点“强迫症”,总想知道窗外空气到底怎么样,但又不想总去翻手机App,那么这个项目就是为你量身定做的。我们将利用一块名为PyPortal的开发板…...