SSM整合----第一个SSM项目

文章目录

  • 前言
  • 一、使用步骤
    • 1.引入库
    • 2.建表
    • 3 项目结构
    • 4 web.xml的配置
    • 5 配置数据源
    • 6 SpringMVC配置
    • 7 配置MyBatis Mapper
    • 8 书写控制类
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

SSM整合是指Spring、SpringMVC和MyBatis这三个框架的整合使用。它们分别是Java企业级开发中常用的三个框架,通过整合使用可以实现更加高效、灵活和可维护的开发。

具体来说,SSM整合的步骤如下:

  1. 配置Spring:在Spring的配置文件中定义Bean,配置数据源、事务管理器等。
  2. 配置SpringMVC:在SpringMVC的配置文件中配置视图解析器、处理器映射器等。
  3. 配置MyBatis:在MyBatis的配置文件中配置数据源、Mapper扫描等。
  4. 整合Spring和MyBatis:通过Spring的配置文件中配置MyBatis的SqlSessionFactoryBean,将MyBatis与Spring整合。
  5. 整合SpringMVC和Spring:在SpringMVC的配置文件中配置Spring的上下文,将SpringMVC与Spring整合。

整合完成后,可以在Spring中管理MyBatis的Mapper,并且在SpringMVC中使用注解方式进行请求处理。这样可以充分发挥三个框架的优势,提高开发效率和代码质量。


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用步骤

1.引入库

在pom文件中添加以下依赖项,代码如下(示例):

        <!--mybatis spring 桥梁--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.1.2</version></dependency><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.15</version></dependency><!--引入事务管理--><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.9.1</version></dependency><!--spring mvc核心依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.32</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency>

2.建表

代码如下(示例):

/*Navicat Premium Data TransferSource Server         : RpWnSource Server Type    : MySQLSource Server Version : 50735 (5.7.35)Source Host           : localhost:3306Source Schema         : demoTarget Server Type    : MySQLTarget Server Version : 50735 (5.7.35)File Encoding         : 65001Date: 07/04/2024 14:53:54
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo`  (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`state` int(11) NULL DEFAULT 1,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES (1, 'root', 'root', 1);
INSERT INTO `userinfo` VALUES (2, 'admin', 'admin', 1);
INSERT INTO `userinfo` VALUES (3, 'pyy', '123', 2);
INSERT INTO `userinfo` VALUES (33, '123qwe', '123', 1);
INSERT INTO `userinfo` VALUES (34, '123', '123', 1);
INSERT INTO `userinfo` VALUES (35, '765434', '3443', 1);
INSERT INTO `userinfo` VALUES (36, '4321', '1234', 1);
INSERT INTO `userinfo` VALUES (37, 'qq123', '123', 1);
INSERT INTO `userinfo` VALUES (38, 'admin321', '123', 1);
INSERT INTO `userinfo` VALUES (42, 'setf', 'tgrd', 1);
INSERT INTO `userinfo` VALUES (43, 'ertfe', 'rdgt', 1);
INSERT INTO `userinfo` VALUES (44, '435', '345', 0);
INSERT INTO `userinfo` VALUES (45, '435', '345', 1);
INSERT INTO `userinfo` VALUES (46, 'String', 'String', 0);SET FOREIGN_KEY_CHECKS = 1;

3 项目结构

建成这样目录结构的项目
在这里插入图片描述

4 web.xml的配置

添加以下代码防止乱码

<filter><filter-name>encodingResult</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>encodingResult</filter-name><url-pattern>/*</url-pattern></filter-mapping>

5 配置数据源

在db.properties文件中书写数据库连接数据源
在DBConfig书写

@Configuration
@PropertySource("classpath:db.properties")
@EnableTransactionManagement//启用事务注解的支持
@ComponentScan("com.llf")
@MapperScan("com.llf.mapper")
@EnableWebMvc//启用mvc注解支持
public class DbConfig {@Value("${user}")String username;@Value("${password}")String password;@Value("${driver}")String driver;@Value("${url}")String url;@Beanpublic DataSource dataSource() {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setUsername(username);dataSource.setPassword(password);dataSource.setUrl(url);dataSource.setDriverClassName(driver);return dataSource;}/*** 事务管理器** @param dataSource* @return*/@Beanpublic DataSourceTransactionManager transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();//设置数据源factoryBean.setDataSource(dataSource);//设置别名factoryBean.setTypeAliasesPackage("com.llf.bean");//mybaits配置类org.apache.ibatis.session.Configuration cfg = new org.apache.ibatis.session.Configuration();//输出sql语句cfg.setLogImpl(StdOutImpl.class);factoryBean.setConfiguration(cfg);//设置映射文件的位置PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();//读取类路径下mybatis文件夹下  以Mapper.xml结尾的文件Resource[] resources = null;try {resources = resolver.getResources("classpath:mybatis/*Mapper.xml");} catch (IOException e) {throw new RuntimeException(e);}factoryBean.setMapperLocations(resources);try {return factoryBean.getObject();} catch (Exception e) {throw new RuntimeException(e);}}}

6 SpringMVC配置

在WebApp中书写以下代码

public class WebApp extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{DbConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[0];}@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
}

7 配置MyBatis Mapper

在这里插入图片描述
在mapper.xml文件中书写sql语句

<mapper namespace="com.llf.mapper.UserMapper"><insert id="save">insert into userinfo(username, password, state)values (#{username}, #{password}, #{status})</insert></mapper>

8 书写控制类

写userController类用于用户请求并相应

    @PostMapping("/user")public ResultBean save(@RequestBody User user) {int rs = userService.save(user);return rs == 1 ? success("保存成功") : fail("保存失败");}

总结

SSM整合核心有以下几点:

Spring的IOC容器创建先于SpringMVC的IOC容器
SpringMVC扫描的是controller包,Spring要把其他的包扫描了,两个框架管理各自的组件
了解 ContextLoaderListener 监听器的作用,在服务器启动的时候加载Spring的配置文件
Spring配置文件代替原来的 mybatis-config.xml
其余的配置与单独使用时基本一致。

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

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

相关文章

MTK i500p AIoT解决方案

一、方案概述 i500p是一款强大而高效的AIoT平台&#xff0c;专为便携式、家用或商用物联网应用而设计&#xff0c;这些应用通常需要大量的边缘计算&#xff0c;需要强大的多媒体功能和多任务操作系统。该平台集成了Arm Cortex-A73 和 Cortex-A53 的四核集群&#xff0c;工作频…

【论文速读】| 大语言模型平台安全:将系统评估框架应用于OpenAI的ChatGPT插件

本次分享论文为&#xff1a;LLM Platform Security: Applying a Systematic Evaluation Framework to OpenAI’s ChatGPT Plugins 基本信息 原文作者&#xff1a;Umar Iqbal, Tadayoshi Kohno, Franziska Roesner 作者单位&#xff1a;华盛顿大学圣路易斯分校&#xff0c;华盛…

web安全学习笔记(7)

记一下第十一节课的内容。 这节课主要学习post传参和js弹窗与跳转 一、post传参 1.简单的post传参介绍 将index.php重命名为login.php&#xff0c;并将login.html从template文件夹下拿到根目录下&#xff0c;并删除template目录。 将login.html中内容改为如下所示&#xf…

Ubuntu下TexStudio如何兼容中文

怎么就想起来研究一下这个&#xff1f; 我使用大名鼎鼎的3Blue1Brown数学动画引擎Manim&#xff0c;制作了一个特别小的动画视频克里金插值。在视频中&#xff0c;绘制文字时&#xff0c;Manim使用到了texlive texlive-latex-extra这些库。专业的关系&#xff0c;当年的毕设没…

一个更难破解的加密算法 Bcrypt

BCrypt是由Niels Provos和David Mazires设计的密码哈希函数&#xff0c;他是基于Blowfish密码而来的&#xff0c;并于1999年在USENIX上提出。 除了加盐来抵御rainbow table 攻击之外&#xff0c;bcrypt的一个非常重要的特征就是自适应性&#xff0c;可以保证加密的速度在一个特…

linux学习:gcc编译

编译.c gcc hello.c -o hello 用gcc 这个工具编译 hello.c&#xff0c;并且使之生成一个二进制文件 hello。 其中 –o 的意义是 output&#xff0c;指明要生成的文件的名称&#xff0c;如果不写 –o hello 的话会生成默 认的一个 a.out 文件 获得 C 源程序经过预处理之后的文…

书生·浦语训练营二期第三次笔记-茴香豆:搭建你的 RAG 智能助理

RAG学习文档1&#xff1a; https://paragshah.medium.com/unlock-the-power-of-your-knowledge-base-with-openai-gpt-apis-db9a1138cac4 RAG学习文档2: https://blog.demir.io/hands-on-with-rag-step-by-step-guide-to-integrating-retrieval-augmented-generation-in-llms-a…

C#/.NET/.NET Core推荐学习书籍(24年4月更新,已分类)

前言 古人云&#xff1a;“书中自有黄金屋&#xff0c;书中自有颜如玉”&#xff0c;说明了书籍的重要性。作为程序员&#xff0c;我们需要不断学习以提升自己的核心竞争力。以下是一些优秀的C#/.NET/.NET Core相关学习书籍&#xff08;包含了C#、.NET、.NET Core、Linq、EF/E…

云原生安全当前的挑战与解决办法

云原生安全作为一种新兴的安全理念&#xff0c;不仅解决云计算普及带来的安全问题&#xff0c;更强调以原生的思维构建云上安全建设、部署与应用&#xff0c;推动安全与云计算深度融合。所以现在云原生安全在云安全领域越来受到重视&#xff0c;云安全厂商在这块的投入也是越来…

34-4 CSRF漏洞 - CSRF跨站点请求伪造

一、漏洞定义 CSRF(跨站请求伪造)是一种客户端攻击,又称为“一键式攻击”。该漏洞利用了Web应用程序与受害用户之间的信任关系,通过滥用同源策略,使受害者在不知情的情况下代表攻击者执行操作。与XSS攻击不同,XSS利用用户对特定网站的信任,而CSRF则利用了网站对用户网页…

HiveSQL如何生成连续日期剖析

HiveSQL如何生成连续日期剖析 情景假设&#xff1a; 有一结果表&#xff0c;表中有start_dt和end_dt两个字段&#xff0c;&#xff0c;想要根据开始和结束时间生成连续日期的多条数据&#xff0c;应该怎么做&#xff1f;直接上结果sql。&#xff08;为了便于演示和测试这里通过…

C++:MySQL的事务概念与使用(四)

1、事务的概念 定义&#xff1a;事务是构成单一逻辑工作单元的操作集合&#xff0c;要么完整的执行&#xff0c;要么完全不执行。无论发生何种情况&#xff0c;DBS必须保证事务能正确、完整的执行。 性质&#xff1a;事务的四大ACID性质。 原子性(Atomicity)&#xff1a;一个事…

2.网络编程-HTTP和HTTPS

目录 HTTP介绍 HTTP协议主要组成部分 GET 和 POST有什么区别 常见的 HTTP 状态码有哪些 http状态码100 HTTP1.1 和 HTTP1.0 的区别有哪些 HTTPS 和 HTTP 的区别是什么 HTTP2 和 HTTP1.1 的区别是什么 HTTP3 和 HTTP2 的区别是什么 HTTPS的请求过程 对称加密和非对称…

甘特图在生产进度管理中的应用

生产进度管理在生产制造过程中起着至关重要的作用。 它主要关注对生产进程的掌控和安排&#xff0c;确保生产活动能够按照预定的计划和时间顺利进行&#xff0c;以达到按时交付产品的目标。 在生产进度管理中&#xff0c;首先需要制定一个详细且合理的生产计划&#xff0c;明…

Advanced RAG 02:揭开 PDF 文档解析的神秘面纱

编者按&#xff1a; 自 2023 年以来&#xff0c;RAG 已成为基于 LLM 的人工智能系统中应用最为广泛的架构之一。由于诸多产品的关键功能&#xff08;如&#xff1a;领域智能问答、知识库构建等&#xff09;严重依赖RAG&#xff0c;优化其性能、提高检索效率和准确性迫在眉睫&am…

STM32智能家居小助手

​ 设计的目的 大部分家用电器开关仍旧是传统的机械式按键开关&#xff0c;原因是传统式的电器开关开发周期短&#xff0c;制作成本低&#xff0c;方案成熟&#xff0c;但是传统的遥控家电开关已经不能满足人们对家电控制的要求&#xff0c;传统的遥控器具有单一性&#xff0c;…

类脑计算芯片:机器学习的新硬件革命

热爱编程的小落… &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️ 零基础学Java——小白入门必备&#x1f525; 重识C语言——复习回顾&#x1f525; 计算机网络体系———深度详讲 HCIP数通工程师-刷题与实战&#x1f525;&#x1f525;&#x1f525; 微信小程序开发——…

初识Java中的NIO

1.概述 Java NIO 全称java non-blocking IO &#xff0c;是指 JDK 提供的新 API。从 JDK1.4 开始&#xff0c;Java 提供了一系列改进的输入/输出新特性&#xff0c;被统称为 NIO(即 New IO)&#xff0c;是同步非阻塞的。NIO采用内存映射文件的方式来处理输入输出&#xff0c;NI…

Linux Shell:`awk` 命令

Linux Shell&#xff1a;awk 命令 awk 是一种强大的文本分析工具&#xff0c;广泛用于文本处理、数据提取和报告生成。它使用自己的编程语言来处理文件中的数据。在 Linux Shell 中&#xff0c;awk 命令能够执行复杂的模式匹配、编辑和分析任务。本文将介绍 awk 的基础用法、高…

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍 写在前面安装过程调试过程标定成功可视化展示 写在前面 激光雷达和相机联合标定工具 论文地址&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9564700 github地址: https://github.com…