SSM 整合(Spring + MyBatis;Spring + Spring MVC)
创始人
2024-12-28 19:36:49
0

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

文章目录

  • 1. SSM 整合(Spring + MyBatis;Spring + Spring MVC)
  • 2. 引入相关依赖
  • 3. SSM 整合
    • 3.1 创建包结构
  • 4. Spring 整合 + MyBatis
    • 4.1 编写 jdbc.properties
    • 4.2 编写 DataSourceConfig 数据源配置
    • 4.3 编写 MyBatisConfig 的配置类(替换 mybatis的xml配置文件)
    • 4.4 编写 SpringConfig 的配置类(替换spring的xml配置文件)
  • 5. Spring 整合 Spring MVC
    • 5.1 编写WebAppInitializer(替换 web.xml 文件)
    • 5.2 编写 SpringMvcConfig 类(替换spring mvc 的xml 配置文件)
    • 5.3 添加事务控制
  • 6. 实现功能测试ssm整合
    • 6.1 准备数据表
    • 6.2 pojo类编写
    • 6.3 dao编写
    • 6.4 service编写
    • 6.5 handler编写
    • 6.6 前端发送ajax
      • 6.6.1 引入 js 文件
      • 6.6.2 开启静态资源处理
      • 6.6.3 视图控制器
      • 6.6.4 编写ajax
  • 7. 运行启动 Tomcat 测试
  • 8. 最后:


2. 引入相关依赖

在这里插入图片描述

      4.0.0     war      com.rainbowsea     ssm-annotation     1.0-SNAPSHOT               17         17                                          org.springframework             spring-webmvc             6.1.4                                        org.springframework             spring-jdbc             6.1.4                                        org.mybatis             mybatis             3.5.15                                        org.mybatis             mybatis-spring             3.0.3                                        com.mysql             mysql-connector-j             8.3.0                                        com.alibaba             druid             1.2.22                                        com.fasterxml.jackson.core             jackson-databind             2.17.0                                        jakarta.servlet             jakarta.servlet-api             6.0.0             provided                                        ch.qos.logback             logback-classic             1.5.3                                        org.thymeleaf             thymeleaf-spring6             3.1.2.RELEASE                 

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的       *      * @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 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

在这里插入图片描述

        ssm整合               

{{message}}

7. 运行启动 Tomcat 测试

在这里插入图片描述

8. 最后:

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

在这里插入图片描述

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...