首页 > 其他分享 >SSM 整合(Spring + MyBatis;Spring + Spring MVC)

SSM 整合(Spring + MyBatis;Spring + Spring MVC)

时间:2024-07-18 14:58:24浏览次数:18  
标签:Spring springframework annotation SSM MVC import org com public

1. SSM 整合(Spring + MyBatis;Spring + Spring MVC)

文章目录


2. 引入相关依赖

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>

    <groupId>com.rainbowsea</groupId>
    <artifactId>ssm-annotation</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <!--springmvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>6.1.4</version>
        </dependency>
        <!--spring jdbc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.1.4</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.15</version>
        </dependency>
        <!--mybatis spring-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.3</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>
        </dependency>
        <!--德鲁伊连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.22</version>
        </dependency>
        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.17.0</version>
        </dependency>
        <!--servlet api-->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
        <!--logback-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.3</version>
        </dependency>
        <!--thymeleaf和spring6的整合依赖-->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring6</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
    </dependencies>

</project>

3. SSM 整合

3.1 创建包结构

在这里插入图片描述


SSM:包括 Spring ,MyBatis,Spring MVC

SSM 的整合:可以大致分为两部分:

  • Spring + MyBatis 的整合
  • Spring + Spring MVC 的整合

4. Spring 整合 + MyBatis

4.1 编写 jdbc.properties

在类根路径下创建属性配置文件,配置连接数据库的信息:jdbc.properties

在这里插入图片描述

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springmvc
jdbc.username=root
jdbc.password=MySQL123

4.2 编写 DataSourceConfig 数据源配置

在这里插入图片描述

在这里插入图片描述

package com.rainbowsea.ssm.config;


import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;


/**
 * 数据源配置
 */
@Configuration
public class DataSourceConfig {

    @Value("${jdbc.driver}")
    private String driver;


    @Value("${jdbc.url}")
    private String url;


    @Value("${jdbc.username}")
    private String username;


    @Value("${jdbc.password}")
    private String password;

    public DataSourceConfig() {
    }

    public DataSourceConfig(String driver, String url, String username, String password) {
        this.driver = driver;
        this.url = url;
        this.username = username;
        this.password = password;
    }


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

4.3 编写 MyBatisConfig 的配置类(替换 mybatis的xml配置文件)

在这里插入图片描述

package com.rainbowsea.ssm.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class MyBatisConfig {


    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.rainbowsea.ssm.bean");
        return sqlSessionFactoryBean;
    }


    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.rainbowsea.ssm.dao");
        return mapperScannerConfigurer;
    }
}

4.4 编写 SpringConfig 的配置类(替换spring的xml配置文件)

在这里插入图片描述

package com.rainbowsea.ssm.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

// 标注该类式一个配置文件类
@Configuration
// 组件扫描
@ComponentScan("com.rainbowsea.ssm.service")
// 属性配置文件位置
@PropertySource("classpath:jdbc.properties")
// 导入其他配置到Spring 配置
@Import({MyBatisConfig.class,DataSourceConfig.class})
// 开启事务管理器
@EnableTransactionManagement
public class SpringConfig {


    // 在 DataSourceConfig中添加事务管理器对象
    @Bean
    public PlatformTransactionManager platformTransactionManager(DataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }
}

5. Spring 整合 Spring MVC

5.1 编写WebAppInitializer(替换 web.xml 文件)

在这里插入图片描述

package com.rainbowsea.ssm.config;

import jakarta.servlet.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

@Configuration
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * Spring的配置
     *
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    /**
     * SpringMVC的配置
     *
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    /**
     * 用来配置DispatcherServlet的 <url-pattern>
     *
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     * 配置过滤器
     *
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        // 配置字符编码过滤器
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceResponseEncoding(true);
        characterEncodingFilter.setForceRequestEncoding(true);
        // 配置HiddenHttpMethodFilter
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
    }
}

5.2 编写 SpringMvcConfig 类(替换spring mvc 的xml 配置文件)

在这里插入图片描述

package com.rainbowsea.ssm.config;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;

import java.util.List;

@Configuration  // 标志是配置文件类
@ComponentScan("com.rainbowsea.ssm.handler")
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
    // 以下三个方法合并起来就是开启视图解析器

    @Bean
    public ThymeleafViewResolver getViewResolver(SpringTemplateEngine springTemplateEngine) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(springTemplateEngine);
        resolver.setCharacterEncoding("UTF-8");
        resolver.setOrder(1);
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(iTemplateResolver);
        return templateEngine;
    }

    @Bean
    public ITemplateResolver templateResolver(ApplicationContext applicationContext) {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("/WEB-INF/thymeleaf/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("UTF-8");
        resolver.setCacheable(false);//开发时关闭缓存,改动即可生效.发布时,打开
        return resolver;
    }

    // 开启静态资源处理,开启默认的Servlet处理
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    // 视图控制器
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }

    // 配置异常处理器
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
    }

    // 配置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    }
}

5.3 添加事务控制

第一步:在SpringConfig中开启事务管理器

@EnableTransactionManagement
public class SpringConfig {
}

第二步:在DataSourceConfig中添加事务管理器对象

@Bean
public PlatformTransactionManager platformTransactionManager(DataSource dataSource){
    DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
    dataSourceTransactionManager.setDataSource(dataSource);
    return dataSourceTransactionManager;
}

第三步:在service类上添加如下注解:(如果有的话)

@Transactional
public class UserService {}

在这里插入图片描述


6. 实现功能测试ssm整合

6.1 准备数据表

在这里插入图片描述

在这里插入图片描述

6.2 pojo类编写

在这里插入图片描述

package com.rainbowsea.ssm.bean;


import org.springframework.stereotype.Controller;

@Controller
public class User {

    private Long id;

    private String name;

    private String password;

    private String email;


    public User() {
    }

    public User(Long id, String name, String password, String email) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.email = email;
    }


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

6.3 dao编写

在这里插入图片描述

package com.rainbowsea.ssm.dao;

import com.rainbowsea.ssm.bean.User;
import org.apache.ibatis.annotations.Select;




public interface UserDao {

    @Select("select * from tbl_user where id = #{id}")
    User selectById(Long id);

}

6.4 service编写

在这里插入图片描述

package com.rainbowsea.ssm.service;

import com.rainbowsea.ssm.bean.User;




public interface UserService {

    /**
     * 根据用户id获取用户信息
     */

    User getById(Long id);
}

在这里插入图片描述

package com.rainbowsea.ssm.service.impl;

import com.rainbowsea.ssm.bean.User;
import com.rainbowsea.ssm.dao.UserDao;
import com.rainbowsea.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
    @Override
    public User getById(Long id) {
        return userDao.selectById(id);
    }
}

6.5 handler编写

在这里插入图片描述

package com.rainbowsea.ssm.handler;

import com.rainbowsea.ssm.bean.User;
import com.rainbowsea.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/users")
public class UserHandler {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User detail(@PathVariable("id") Long id){
        User user = userService.getById(id);
        return user;
    }
}

6.6 前端发送ajax

6.6.1 引入 js 文件

在这里插入图片描述

6.6.2 开启静态资源处理

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

在这里插入图片描述

6.6.3 视图控制器

public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("index");
}

在这里插入图片描述

6.6.4 编写ajax

在这里插入图片描述

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>ssm整合</title>
  <!--引入vue-->
  <script th:src="@{/static/js/vue3.4.21.js}"></script>
  <!--引入axios-->
  <script th:src="@{/static/js/axios.min.js}"></script>
</head>
<body>
<div id="app">
  <button @click="getMessage">查看id=1的用户信息</button>
  <h1>{{message}}</h1>
</div>
<script th:inline="javascript">
  Vue.createApp({
    data(){
      return {
        message : ''
      }
    },
    methods : {
      async getMessage(){
        let response = await axios.get([[@{/}]] + 'users/1')
          this.message = response.data
      }
      }
    }).mount("#app")
</script>
</body>
</html>

7. 运行启动 Tomcat 测试

在这里插入图片描述

8. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

标签:Spring,springframework,annotation,SSM,MVC,import,org,com,public
From: https://blog.csdn.net/weixin_61635597/article/details/140522944

相关文章

  • 实现基于Spring Boot和WebSockets的实时通讯应用
    实现基于SpringBoot和WebSockets的实时通讯应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!实时通讯应用在现代互联网服务中越来越重要。使用WebSocket可以实现客户端和服务器之间的双向通讯,从而大大提高实时性。本文将介绍如何使用SpringBoot和Web......
  • springboot博客交流平台-计算机毕业设计源码56406
    摘要博客交流平台作为一种重要的网络平台,为用户提供了展示自我、分享经验和与他人互动的空间。在国内外,研究者们关注博客交流平台的各个方面,并取得了显著的进展。研究内容主要包括用户体验和界面设计、社交化和互动性、多媒体内容支持、移动设备适配和跨平台体验、数据分析......
  • springboot访问多个mysql数据库配置多数据源
    一、参考地址:https://github.com/baomidou/dynamic-datasource二、使用方法引入dynamic-datasource-spring-boot-starter或者dynamic-datasource-spring-boot3-starter。spring-boot1.5.x2.x.x点击查看代码<dependency><groupId>com.baomidou</groupId><art......
  • SpringBoot整合MyBatis+MySQL
    一、添加mysql驱动mysqlmysql-connector-java二、添加MyBatis依赖org.mybatis.spring.bootmybatis-spring-boot-starter3.0.1三、添加配置spring:datasource:name:xx-datasourcedriverClassName:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://127.0.0.1:3306/xx-......
  • SpringSecurity基础学习-功能完善
    注册在数据库中手动维护用户信息是不合理的,同时数据库中存储明文密码也很容易出问题,因此注册接口是一个必须的接口代码实现Loginpackagecom.learn.security.domain.entity;importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.annotat......
  • SpringCloud项目的搭建
    一、相关依赖导入1.注册中心<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>4.1.0</version>......
  • 深入解析微服务架构之Spring Cloud
    目录微服务架构简介什么是微服务微服务的优势微服务的挑战SpringCloud概述SpringCloud简介SpringCloud的主要特性SpringCloud的模块划分SpringCloud核心组件详解SpringCloudNetflixSpringCloudConfigSpringCloudGatewaySpringCloudSleuthSpringCloudBu......
  • SpringBoot 跨域请求处理全攻略:从原理到实践
    文章目录SpringBoot如何处理跨域请求?你能说出几种方法?跨域请求概述跨域解决方案1.使用@CrossOrigin注解2.使用WebMvcConfigurer配置类3.使用过滤器(Filter)4.使用SpringSecurity处理CORS5.使用SpringCloudGateway处理CORS补充1.预检请求(PreflightRequests)2.其......
  • Spring中Map类型依赖注入的使用
    为了详细解释这段代码的装配过程,并编写一份详细的开发文档,我们需要从几个方面进行阐述:Spring框架的依赖注入机制、@Resource注解的作用、Map<String,ProcessListener>类型作为依赖的特别性,以及这段代码在实际开发中的应用和注意事项。1.Spring框架的依赖注入机制Spring框架的......
  • Spring与设计模式实战之策略模式
    Spring与设计模式实战之策略模式引言在现代软件开发中,设计模式是解决常见设计问题的有效工具。它们提供了经过验证的解决方案,帮助开发人员构建灵活、可扩展和可维护的系统。本文将探讨策略模式在Spring框架中的应用,并通过实际例子展示如何通过Spring的特性来实现和管理策......