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

news/2024/11/29 4:35:09/

文章目录

  • 前言
  • 一、使用步骤
    • 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.ppmy.cn/news/1418512.html

相关文章

顺序表实战——基于顺序表的通讯录

前言&#xff1a;本篇文章主要是利用顺序表作为底层&#xff0c; 实现一个通讯录。偏向于应用&#xff0c; 对于已经学习过c的友友们可能没有难度了已经。没有学习过c的友友&#xff0c; 如果顺序表不会写&#xff0c; 或者说没有自己实现过&#xff0c; 请移步学习顺序表相关内…

【论文阅读】Digging Into Self-Supervised Monocular Depth Estimation

论文&#xff1a;https://arxiv.org/pdf/1806.01260.pdf 代码&#xff1a;https://github.com/nianticlabs/monodepth2 Q: 这篇论文试图解决什么问题&#xff1f; A: 这篇论文试图解决的问题是如何提高仅使用单目图像进行深度估计的性能。具体来说&#xff0c;它关注的是如何…

linux查看硬盘空间使用情况

df &#xff08;1&#xff09;查看磁盘空间的占用情况 -h是给大小带上单位 df -h 总空间不一定等于已用未用&#xff0c;系统可能留出来一点空间另做他用 &#xff08;2&#xff09;查看INode的使用情况 df -idu du命令比df命令复杂一点&#xff0c;是查看文件和目录占用的…

【设计模式学习】单例模式和工厂模式

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

步骤大全:网站建设3个基本流程详解

一.领取一个免费域名和SSL证书&#xff0c;和CDN 1.打开网站链接&#xff1a;https://www.rainyun.com/z22_ 2.在网站主页上&#xff0c;您会看到一个"登陆/注册"的选项。 3.点击"登陆/注册"&#xff0c;然后选择"微信登录"选项。 4.使用您的…

探索量子计算:打开未来技术的大门

在科技领域&#xff0c;每一次技术革命都能开启新的可能性&#xff0c;推动人类社会进入一个新的时代。当前&#xff0c;量子计算作为一种前沿技术&#xff0c;正引领着下一轮科技革命的浪潮。本文将深入探索量子计算的奥秘&#xff0c;解析其工作原理&#xff0c;并通过一个简…

dalle2介绍

dalle2是一个基于强化学习的图像生成模型&#xff0c;是dalle模型的改进版本。它由OpenAI团队开发&#xff0c;旨在生成高质量的、多样化的图像。 dalle2的核心思想是利用强化学习将图像生成过程转化为一个马尔可夫决策过程。它采用了一个称为"敌对生成网络"&#x…

vue源码解析——diff算法/双端比对/patchFlag/最长递增子序列

虚拟dom——virtual dom&#xff0c;提供一种简单js对象去代替复杂的 dom 对象&#xff0c;从而优化 dom 操作。virtual dom 是“解决过多的操作 dom 影响性能”的一种解决方案。virtual dom 很多时候都不是最优的操作&#xff0c;但它具有普适性&#xff0c;在效率、可维护性之…