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 Transfer

 Source Server         : RpWn
 Source Server Type    : MySQL
 Source Server Version : 50735 (5.7.35)
 Source Host           : localhost:3306
 Source Schema         : demo

 Target Server Type    : MySQL
 Target Server Version : 50735 (5.7.35)
 File Encoding         : 65001

 Date: 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;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driver);
        return dataSource;
    }

    /**
     * 事务管理器
     *
     * @param dataSource
     * @return
     */
    @Bean
    public DataSourceTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }


    @Bean
    public 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 {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{DbConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[0];
    }

    @Override
    protected 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
其余的配置与单独使用时基本一致。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React状态管理比较原理

一、React状态管理库 按照23年下载使用顺序依次是&#xff1a; ReduxZustandMobXRecoilJotaiValtio 二、各状态管理库简要概述 Redux&#xff1a;Redux 是一个行业标准的状态管理库&#xff0c;它利用 flux 架构来创建不可变的数据存储。 优点 提供可预测的、一致的状态…

第三、四章 if语句 + 循环

第三章 if语句 bool类型 两种&#xff1a;True和False bool_1 True bool_2 False print(f"bool_1变量的内容是&#xff1a;{bool_1}," f"类型是&#xff1a;{type(bool_1)}") print(f"bool_2变量的内容是&#xff1a;{bool_2}," f"类…

内容创作策略:打造影响力强大的技术博客

CSDN的朋友你们好&#xff0c;我是未来&#xff0c;今天给大家带来专栏【程序员博主教程&#xff08;完全指南&#xff09;】的第6篇文章——“博客内容创作策略”。本文为技术博主提供了一个精简的内容创作策略指南&#xff0c;涵盖了设定目标、分析竞争、关键词研究、内容规划…

包拯断案 | 集群备份续集:三招解决定时备份延迟@还故障一个真相

今天&#xff0c;小编给大家讲述自己亲身遇到的一个数据库集群备份问题&#xff0c;希望帮助DBA运维的你绕开这个烦恼&#xff0c;轻松找到答案&#xff01; 1、数据库集群在进行定时备份时&#xff08;从节点备份&#xff09;&#xff0c;出现了主从延迟较大的告警&#xff0c…

Jmeter 性能-稳定性测试TPS计算

1、普通计算公式 TPS 总请求数 / 总时间按照需求得到基础数据&#xff0c;比如在去年第xxx周&#xff0c;某平台有5万的浏览量那么总请求数我们可以估算为5万&#xff08;1次浏览都至少对应1个请求&#xff09; 总请求数 50000请求数 总时间&#xff1a;由于不知道每个请求…

Java研学-RBAC权限控制(二)

三 PageHelper 1 分页所需 // 原分页所需 1. 定义QueryObject类&#xff0c;传递分页参数&#xff0c;currentPage&#xff0c;pageSize&#xff0c;get start();方法 2. selectForCount()方法&#xff0c;总条数小于等于0说明不需要分页&#xff0c;大于0说明可以分页 3. se…

“揭秘性能测试工具:优化软件性能的关键秘籍“

性能测试工具的设计宗旨是为了模拟用户对软件应用程序或系统的各种操作&#xff0c;旨在评估关键的性能指标&#xff0c;包括响应时间、吞吐量、并发能力和资源利用率。 通过这些工具模拟的多用户环境&#xff0c;我们能够产生与实际工作负载相似的条件&#xff0c;并监测系统…

OpenCV4.9更多形态转换

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9处理平滑图像 下一篇:OpenCV4.9更多形态转换 基于这两者&#xff0c;我们可以对图像进行更复杂的转换。在这里&#xff0c;我们简要讨论 OpenCV 提供的 5 个操作&#xff1a; …

使用Docker部署Node.js

第一步&#xff1a;在Node.js项目的根目录中新建Dockerfile文件 # 使用官方 Node.js 镜像作为基础镜像 FROM node:latest# 设置工作目录 WORKDIR /usr/src/app# 将项目文件复制到容器中 COPY . .# 将npm源设置为淘宝镜像 RUN npm config set registry https://registry.npmmir…

Cuda编程-NPP库

Cuda编程先前有过研究&#xff0c;现在记录下Cuda相关的库使用 目录 0.参考文档1.NPP简介1.1 头文件1.2 库文件1.3 编译时链接关系1.4 NPP函数的命名方式1.5 General Conventions 一般约定1.6 Image Processing Conventions 图像处理约定 2.举例&#xff1a;NPP实现YUV转BGR2.1…

Day 20 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉…

苍穹外卖开发笔记(1.项目介绍和开发环境)

目录 一、项目介绍二、环境搭建1、web管理端前端部署2、后端环境搭建3、数据库搭建4、前后端联调5、导入接口文档 三、完善登录功能四、学习知识1、前端发送的请求&#xff0c;是如何请求到后端服务的&#xff1f; 一、项目介绍 二、环境搭建 由于本项目主要点在于学习后端开发…

头歌-机器学习 第13次实验 特征工程——共享单车之租赁需求预估

第1关&#xff1a;数据探索与可视化 任务描述 本关任务&#xff1a;编写python代码&#xff0c;完成一天中不同时间段的平均租赁数量的可视化功能。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 读取数据数据探索与可视化 读取数据 数据保存在./step1/…

如何使用Android手机通过JuiceSSH远程访问本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

SSL中的CA证书

目录 一、CA概述 二、数据加密 三、身份认证 一、CA概述 SSL如何保证网络通信的安全和数据的完整性呢&#xff1f;就是采用了两种手段&#xff1a;身份认证和数据加密。身份认证就需要用到CA证书。 CA是证书的签发机构&#xff0c;它是公钥基础设施&#xff08;Public Key In…

Python --- Python + Vs code的安装与使用(windows平台)

Python Vs code的安装与使用 今天是我第一次开始尝试用Python&#xff0c;然后我想借此机会记录一下整个安装过程和上手过程。之前一直都是用的matlab&#xff0c;这个东西不仅大而且收费&#xff0c;但不可否认的是。matlab的很多东西都做的比较好&#xff0c;但我一直用的都…

经典文章:卷积神经网络的运作原理

https://brohrer.mcknote.com/zh-Hans/how_machine_learning_works/how_convolutional_neural_networks_work.html 参考资料 https://aitechtogether.com/article/38900.html https://www.ruanyifeng.com/blog/2017/07/neural-network.html http://neuralnetworksanddeeplea…

企业工商信息查询API接口有哪些

当今社会我们几乎每天都在和一些企业打交道&#xff0c;有时候需要确认下这家企业经营范围&#xff0c;注册地址等信息&#xff0c;那怎么办呢&#xff0c;这个时候就需要一些企业工商信息查询的API接口了。 有的时候你可以只知道这家公司的大概企业名称&#xff0c;比如数脉&…

springboot-开源项目-追踪法-简单有效,从F12到SQL数据库表

使用的技术栈&#xff1a;springbootmybatis&#xff0c;edge浏览器 插件&#xff1a;MybatisX 第一步&#xff1a; 按F12,选择网络 第二步&#xff1a; 进入IDEA编辑器&#xff0c;键盘按两次shift键&#xff0c;点击第一个&#xff0c;快速定位到该操作 3&#xff1a; 我…

锐化空间滤波器(提高清晰度的另一种方式)

书上一阶微分的定义可以理解&#xff0c;毕竟这里不死数学上的曲线的概念&#xff0c;而是像素点上的曲线。所以&#xff0c;不同于数学的严格单调递增曲线的导数是大于等于零&#xff0c;这里的严格单调递增曲线&#xff0c;只能是大于零。 至于二阶微分的定义&#xff0c;就…