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

news2024/11/16 5:43:47

介绍:

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", new
             DispatcherServlet(applicationContext));
//     设置默认的Servlet
     context.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;
    
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }



    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        //指定mybatis配置文件
        ClassPathResource classPathResource = new ClassPathResource("mybatis-config.xml");
        sqlSessionFactoryBean.setConfigLocation(classPathResource);
        return sqlSessionFactoryBean;
    }

    @Bean
    public 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 {


@Resource
    private 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;
    }
    
}

输出结果如下:

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python接入淘宝API接口采集商品详情页到手价优惠券信息数据:智能化营销的加速器

在电子商务领域&#xff0c;智能化营销正在成为提高效率和竞争力的关键。淘宝API提供了一套完整的解决方案&#xff0c;帮助商家实现智能化营销&#xff0c;从而提升销售业绩和顾客满意度。 库存管理&#xff1a; 淘宝API使商家能够实时监控库存水平&#xff0c;自动补货&#…

【康耐视国产案例】智能AI相机:深度解析DataMan 380大视野高速AI读码硬实力

随着读码器技术的不断更新迭代&#xff0c;大视野高速应用成为当前工业读码领域的关键发展方向。客户对大视野高速读码器的需求源于其能显著减少生产成本并提升工作效率。然而&#xff0c;大视野应用场景往往伴随着对多个条码的读取需求&#xff0c;这无疑增加了算法的处理负担…

VCAST创建单元测试工程

1. 设置工作路径 选择工作目录,后面创建的 UT工程 将会生成到这个目录。 2. 新建工程 然后填写 工程名称,选择 编译器,以及设置 基础路径。注意 Base Directory 必须要为代码工程的根目录,否则后面配置环境会失败。 这样工程就创建好了。 把基础路径设置为相对路径。 …

LabVIEW储油罐监控系统

LabVIEW储油罐监控系统 介绍了基于LabVIEW的储油罐监控系统的设计与实施。系统通过集成传感器技术和虚拟仪器技术&#xff0c;实现对储油罐内液位和温度的实时监控&#xff0c;提高了油罐监管的数字化和智能化水平&#xff0c;有效增强了油库安全管理的能力。 项目背景 随着…

算法与数据结构高手养成:朴素的贪心法(下)二分答案

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Plotly的魔力:如何用Python创建令人惊叹的图表?

大家好&#xff0c;在数据分析和可视化领域&#xff0c;图表是不可或缺的工具。它们可以帮助我们更直观地理解数据趋势和模式。今天&#xff0c;我们要介绍的是一个强大的Python库——Plotly&#xff0c;它可以让你轻松创建交互式、漂亮的图表。无论你是数据科学家、分析师&…

计算机网络到底是指什么?

计算机网络是信息技术领域中最为核心和复杂的一部分&#xff0c;它涵盖了众多的技术原理和应用。下面&#xff0c;我们将从技术层面深入探讨计算机网络的相关内容。 一、计算机网络的分层模型 计算机网络的分层模型是网络通信的基石&#xff0c;它将网络通信过程划分为不同的层…

【ARM Cache 系列文章 2.1 -- Cache PoP 及 PoDP 介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 PoP 及 PoDPCache PoDPCache PoP应用和影响PoP 及 PoDP Cache PoDP 点对深度持久性(Point of Deep Persistence, PoDP)是内存系统中的一个点,在该点达到的任何写操作即使在系统供电…

【深度解析GPT-4o】:全面解析新一代AI技术的突破与优势

目录 ​编辑 1.版本对比&#xff1a;从GPT-3到GPT-4&#xff0c;再到GPT-4o的飞跃 1.1 模型规模的扩展 1.2 训练数据的更新 1.3 算法优化与效率提升 1.4 案例分析 2.技术能力&#xff1a;GPT-4o的核心优势 2.1 卓越的自然语言理解 2.1.1 上下文理解能力 2.1.2 语义分…

教师个人出书需要具备什么条件?

邮箱&#xff1a;2621542409qq.com&#xff08;qkfb88688-来稿备注独著&#xff09; 教师个人出书通常需要具备以下一些条件&#xff1a; 1. 内容价值&#xff1a;书稿内容要有一定的学术价值、教学经验分享价值或对教育领域有独特的见解和贡献。 2. 原创性&#xff1a;书稿必…

软件测试——Java自动化测试Selenium

目录 1.运行环境 2.环境配置 3.第一个浏览器程序 4.浏览器操作 5.元素定位 6.元素操作常用API 7.特殊元素定位与操作 8.元素三大等待 9.iframe操作 10.window操作 11.select选择框 12.js语句执行 13.鼠标操作 14.截图操作 1.运行环境 编译工具&#xff1a;IDEA …

智能工单系统(IT运维工单系统),为企业IT运维跨部门协作量身定制!

当企业规模扩大、业务日益复杂时&#xff0c;普通的it运维工单管理方法已无法满足企业的需求&#xff0c;可能变得难以胜任。正因如此&#xff0c;智能工单系统&#xff08;IT运维工单系统&#xff09;进入人们的视野中。因其可以大幅提高企业跨部门协作的效率和满意度&#xf…

java版MES系统全套源码,支持 SaaS 多租户,管理后台的 Vue3 版本采用 :vue-element-plus-admin

MES生产制造执行系统源码&#xff0c;有演示&#xff0c;自主研发&#xff0c;多个项目应用案例&#xff0c;成熟稳定。支持二次开发&#xff0c;商业授权后可商用。 MES系统是面向制造企业车间执行层的生产信息化管理系统&#xff0c;能实时监控生产过程、管理制造数据、优化生…

深度学习入门-第3章-神经网络

前面的待补充 3.6 手写数字识别 3.6.1 MNIST 数据集 本书提供了便利的 Python 脚本 mnist.py &#xff0c;该脚本支持从下载 MNIST 数据集到将这些数据转换成 NumPy 数组等处理&#xff08;mnist.py 在 dataset 目录下&#xff09;。 使用 mnist.py 时&#xff0c;当前目录必须…

2米量级高速风洞测量系统,智能装备与通信技术产业展览会(2024中国军民两用)

"2米量级高速风洞测量系统&#xff1a;规范化改进与未来展望" 在航空航天领域&#xff0c;风洞试验是评估飞行器设计性能的关键手段。为了满足日益增长的科研需求&#xff0c;对2米量级高速风洞测量系统的规范化改进变得尤为重要。本文将探讨该系统的改进措施及其在…

打开C# 大门:Hallo, World!

C# 介绍 C#&#xff08;C Sharp&#xff09;是一种面向对象的编程语言&#xff0c;由微软公司开发。它是 .NET Framework 的一部分&#xff0c;用于构建 Windows 应用程序、Web 应用程序、移动应用程序等。C# 语言的设计目标是简单、现代化、易于学习和使用。在本文中&#xf…

【数据结构】排序(直接插入、折半插入、希尔排序、快排、冒泡、选择、堆排序、归并排序、基数排序)

目录 排序一、插入排序1.直接插入排序2.折半插入排序3.希尔排序 二、交换排序1.快速排序2.冒泡排序 三、选择排序1. 简单选择排序2. 堆排序3. 树排序 四、归并排序(2-路归并排序)五、基数排序1. 桶排序&#xff08;适合元素关键字值集合并不大&#xff09;2. 基数排序基数排序的…

JAVA-学习

一、垃圾回收机制 1、为什么要进行垃圾回收机制 如果不进行垃圾回收&#xff0c;内存迟早都会被消耗空&#xff0c;因为我们在不断的分配内存空间而不进行回收。除非内存无限大&#xff0c;我们可以任性的分配而不回收&#xff0c;但是事实并非如此。所以&#xff0c;垃圾回收…

DS:数与二叉树的相关概念

欢迎来到Harper.Lee的学习世界&#xff01;博主主页传送门&#xff1a;Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦&#xff01; 一、树的概念及其结构 1.1 树的概念亲缘关系 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点…

阿里云镜像加速配置(工作中经常用到,写在此方便)

原因 由于运营商网络原因&#xff0c;会导致您拉取Docker Hub镜像变慢&#xff0c;甚至下载失败。为此&#xff0c;阿里云容器镜像服务ACR提供了官方的镜像加速器&#xff0c;从而加速官方镜像的下载。 获取镜像加速器地址 ACR会为每一个账号&#xff08;阿里云账号或RAM用户…