SSM框架整合,内嵌Tomcat。基于注解的方式集成

2024-06-06 11:44

本文主要是介绍SSM框架整合,内嵌Tomcat。基于注解的方式集成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍:

SSM相信大家都不陌生,在spring boot出现之前,SSM一直是Java在web开发中的老大哥。现在虽说有了spring boot能自动整合第三方框架了,但是现在市面上任然有很多老项目是基于SSM技术的。因此,能熟练掌握SSM进行开发也是非常重要的。对于新的项目,我当然是推荐直接用spring boot,但是对于像SSM技术的项目,我们必须也能够熟练上手。(虽说现在电动车很方便,但我们也要会骑自行车)

SSM(Spring+SpringMVC+MyBatis)是一种经典的Java Web开发框架组合。现在的spring boot框架可以看作是SSM的进一步整合。

整合SSM:


本次使用到的版本为Java8、spring5.3.7

创建一个maven项目,并将项目添加为WEB项目。(可以在创建项目时直接选定模板,也可以先创建一个普通的maven项目,再将maven项目设置为web项目)

项目的目录结果如下:

引入一些基础的maven依赖:

<dependencies><!-- tomcat相关依赖 --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>9.0.73</version></dependency><!-- 如果需要JSP支持,还需要添加以下依赖 --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><version>9.0.73</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.7</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.7</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.1.0</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.20</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency></dependencies>

先创建一个spring配置类,用来扫描整合项目路径:

@Configuration
@ComponentScan("com.zq.ssmdemo")public class SpringConfig {}

接下来就是重点了,我们要在项目中创建一个tomcat容器

(当然,你也可以使用本地的tomcat部署,效果都是一样的。spring boot的内部也是内嵌了一个tomcat)。我们在maven坐标中已经引入了tomcat的依赖了(注意版本的差异。tomcat版本过高的话就要升级jdk的版本。我目前时jdk8,使用tomcat9)

public class TomcatConfig {public static void main(String[] args) {AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();applicationContext.register(SpringConfig.class);applicationContext.refresh();startTomcat(applicationContext);}static void   startTomcat(WebApplicationContext applicationContext){// 创建一个Tomcat实例Tomcat tomcat = new Tomcat();Server server = tomcat.getServer();Service service = server.findService("Tomcat");Connector connector = new Connector();connector.setPort(8080);Engine engine = new StandardEngine();engine.setDefaultHost("localhost");Host host = new StandardHost();host.setName("localhost");String contextPath = "";Context context = new StandardContext();context.setPath(contextPath);context.addLifecycleListener(new Tomcat.FixContextListener());host.addChild(context);engine.addChild(host);service.setContainer(engine);service.addConnector(connector);tomcat.addServlet(contextPath, "dispatcher", newDispatcherServlet(applicationContext));
//     设置默认的Servletcontext.addServletMappingDecoded("/*", "dispatcher");try {tomcat.start();} catch (LifecycleException e) {e.printStackTrace();}}}

现在,这个项目就是一个springMVC项目了。我们可以创建一个controller,写一个映射路径来检验一下我们的代码是否正确。

@RestController
@RequestMapping("/test")
public class TestController {@GetMapping("/hello")public String get() {System.out.println("hello,test!");return "hello,test!";}}

启动项目,(运行TomcatConfig中的main方法)

访问我们定义的映射路径:

可以看到能正确的访问到控制类。

整合mybatis:

在resources资源目录下新建整合mybatis的资源:

新建一个数据库连接文件:

jdbc.driver= com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost:3306/bank
jdbc.username=root
jdbc.password=123456

新建一个mybatis的配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 设置驼峰标识 --><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 打印SQL语句 --><setting name="logImpl" value="STDOUT_LOGGING"/></settings><plugins><!-- 分页插件 --><plugin interceptor="com.github.pagehelper.PageInterceptor"/></plugins><mappers><package name="com.zq.ssmdemo.mapper"/></mappers></configuration>

注意这两个文件的位置:

配置mybatis的连接信息:

@PropertySource("classpath:jdbc.properties")
public class MybatisConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(){SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource());//指定mybatis配置文件ClassPathResource classPathResource = new ClassPathResource("mybatis-config.xml");sqlSessionFactoryBean.setConfigLocation(classPathResource);return sqlSessionFactoryBean;}@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();mapperScannerConfigurer.setBasePackage("com.zq.ssmdemo.mapper");return mapperScannerConfigurer;}}

在spring的配置类中引入mybatis的配置类:

@Configuration
@ComponentScan("com.zq.ssmdemo")
@Import({MybatisConfig.class})
public class SpringConfig {}

现在,启动一下这个项目:

可以看到打印除了pageHelp插件的logo,而我们pageHelp插件是在mybatis的配置文件中配置的,所以,我们的mybatis配置文件是肯定被spring项目扫描到的。

现在,我们进行一下简单的测试,看能否使用mybatis进行数据库的操作:

创建一个mapper接口,进行测试:

public interface UsersMapper {// 查询所有用户
@Select("select * from users")List<Users> selectAll();
}

创建一个controller进行测试:

@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate UsersMapper usersMapper;@GetMapping("/list")public Object add(){PageHelper.startPage(1, 2);List<Users> users = usersMapper.selectAll();PageInfo<Users> page = new PageInfo<>(users);System.out.println(page);return page;}}

输出结果如下:

可以看到正确输出了数据库中的信息,表明我们能成功连接到数据库。

这篇关于SSM框架整合,内嵌Tomcat。基于注解的方式集成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036015

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2