• 如何纯注解整合Spring SpringMVC Mybatis


    前言

    心血来潮想要玩玩最原始的SSM,结果发现还有好多人的都是基于配置文件的一个创建方式,那么今天的话就带来基于配置类,基于注解来配置的一个方案吧,这样的SSM开发也可以变得和SpringBoot一样短平快。顺便冒个泡泡,后面有空咱们还得聊聊SpringBoot这个崽做了什么,如何做一个start。那么废话不多说发车了,let’s go!

    项目创建

    咱们这里就直接创建一个最简单的webapp的maven项目。
    在这里插入图片描述
    之后打开项目,创建一下模块
    在这里插入图片描述

    依赖导入

    咱们这边的话还是说玩纯注解开发,然后也是摒弃jsp,我们这边选择这个vue来代替jsp,众所周之,vue 是有两个创建方式的。那么我们这边是倾向于vue+restful风格的,那么接下来的话也是打算记录一些SSM到SpringCloud到k8s的随笔系列。
    我们导入如下依赖,同时删除使用webapp模板创建的一些插件啥的,保持maven pom文件的清爽。

      <dependencies>
    
        <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-webmvcartifactId>
          <version>5.3.22version>
        dependency>
    
        <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-jdbcartifactId>
          <version>5.3.22version>
        dependency>
    
        <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-testartifactId>
          <version>5.3.22version>
        dependency>
    
        <dependency>
          <groupId>org.mybatisgroupId>
          <artifactId>mybatisartifactId>
          <version>3.5.10version>
        dependency>
    
        <dependency>
          <groupId>mysqlgroupId>
          <artifactId>mysql-connector-javaartifactId>
          <version>8.0.30version>
        dependency>
    
        <dependency>
          <groupId>com.alibabagroupId>
          <artifactId>druidartifactId>
          <version>1.2.11version>
        dependency>
    
        <dependency>
          <groupId>junitgroupId>
          <artifactId>junitartifactId>
          <version>4.13.2version>
          <scope>testscope>
        dependency>
    
        <dependency>
          <groupId>javax.servletgroupId>
          <artifactId>javax.servlet-apiartifactId>
          <version>4.0.1version>
        dependency>
    
        <dependency>
          <groupId>com.fasterxml.jackson.coregroupId>
          <artifactId>jackson-databindartifactId>
          <version>2.13.4version>
        dependency>
        <dependency>
          <groupId>org.mybatisgroupId>
          <artifactId>mybatis-springartifactId>
          <version>2.0.7version>
        dependency>
    
      dependencies>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    这里没有导入spring-context 因为在spring-mvc是有的。
    在这里插入图片描述

    那么咱们这个依赖里面主要第一个mybatis和spring整合的一些依赖以及咱们的Jackson,后面咱们用json玩,所以需要这个。

    tomcat 插件

    这里主要说一下的是tomcat8是没有的,但是如果我们要导入的话需要这样做:

    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.tomcat.mavengroupId>
            <artifactId>tomcat8-maven-pluginartifactId>
            <version>3.0-r1655215version>
            <configuration>
              <port>8080port>
              <path>/path>
              <uriEncoding>UTF-8uriEncoding>
            configuration>
          plugin>
        plugins>
      build>
    
      
      <pluginRepositories>
        <pluginRepository>
          <id>alfresco-publicid>
          <url>https://artifacts.alfresco.com/nexus/content/groups/publicurl>
        pluginRepository>
        <pluginRepository>
          <id>alfresco-public-snapshotsid>
          <url>https://artifacts.alfresco.com/nexus/content/groups/public-snapshotsurl>
          <snapshots>
            <enabled>trueenabled>
            <updatePolicy>dailyupdatePolicy>
          snapshots>
        pluginRepository>
        
        
      pluginRepositories>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    但是这里有点问题,在我的实际环境里面,如果有问题的话还是使用7的吧,高版本的可能都会有点问题。

    tomcat 7 插件

    那么如果有问题的话,那么咱们就直接用7的。

    <build>
    	<plugins>
    
    		<plugin>
    			<groupId>org.apache.tomcat.mavengroupId>
    			<artifactId>tomcat7-maven-pluginartifactId>
    			<version>2.2version>
    
    			<configuration>				
    				<path>/path> 
    				<port>9090port>
    				<uriEncoding>UTF-8uriEncoding>
    			configuration>
    		plugin>
    
    	plugins>
    build>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    然后在这里配置一下:
    在这里插入图片描述
    就可以跑了。

    使用本地tomcat8

    我这里的话还是喜欢tomcat8的,然后用本地的。

    在这里插入图片描述

    在idea里面比较智能的是,这玩意你第一次打开会提示Fix,你点击一下就不要自己搞了。之后运行成功。
    在这里插入图片描述

    创建配置类

    我们不用XML的原因是spring对注解的支持嘛,我们用配置类来代替application.xml。
    我们创建如下配置:
    在这里插入图片描述

    这里咱们没有数据层,因为数据库里面没东西,那个mapper的话可以不要了,反正咱们是纯注解开发。

    SpringConfig

    @Configuration
    @ComponentScan({"com.huterox.service"})
    @PropertySource("classpath:jdbc.properties")
    @Import({DuridConfig.class,MybatisConfig.class})
    public class SpringConfig {
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    DuridConfig

    这个其实jdbc的一个配置。
    在这里插入图片描述
    咱们这里面提出了一个配置文件,
    在这里插入图片描述

    
    import javax.sql.DataSource;
    
    public class DuridConfig {
        @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;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    mybatis配置

    这个主要是sqlsessionfactory 和 mapper地址,其实就是你的dao层。

    
    public class MybatisConfig {
    
        @Bean
        public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dataSource);
            factoryBean.setTypeAliasesPackage("com.huterox.dao");
            return factoryBean;
        }
    
        public MapperScannerConfigurer mapperScannerConfigurer(){
            MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
            scannerConfigurer.setBasePackage("com.huterox.dao");
            return scannerConfigurer;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    MVC配置

    @Configuration
    @ComponentScan("com.huterox.controller")
    @EnableWebMvc
    public class SpringMvcConfig {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这里的话,单独把mvc的配置搞出来了,其实没有必要一起放在Spring里面也是可以的。但是咱们这边规范一点。

    Servlet配置

    MVC其实还是用这个Servlet的是吧,用tomcat是吧,做了一个dispatch,一般呢,咱们是在web.xml里面去配置,例如路径啊,启动类啊,一般是启动到咱们的mvc的一个容器。那么咱们这边也是做整合,要这个Spring去整合到mybatis,mvc的实现也是用到了springIOC的,所以在里面也mvc里面有spring-context.

    那么为了能够让咱们的这个正常启动,我们使用配置,然后tomcat启动的时候会发现这个配置,因为我们接下来要继承一个类,然后重写方法,所以启动的时候呢,会把咱们的SpringMVC,和 Spring容器都启动,然后完成工作。

    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    
    public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        protected Class<?>[] getRootConfigClasses() {
    //        子容器
            return new Class[]{SpringConfig.class};
        }
    
        protected Class<?>[] getServletConfigClasses() {
    //        父容器,MVC可以访问Spring容器,可以不单独提取出来SpringConfig
    //        统一配置,然后填这里就完了。
            return new Class[]{SpringMvcConfig.class};
        }
    
        protected String[] getServletMappings() {
            return new String[]{"/"};
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    测试

    由于咱们这里面没有dao,所以这方面没法演示,也没有办法演示事务。

    所以这里就测试web吧,之后咱们用这套直接纯注解开发,已经2202年了是吧。

    在这里插入图片描述

    在这里插入图片描述

    总结

    这个没啥好说的,又水了一篇博客~

  • 相关阅读:
    开发 Diffusers 库的道德行为指南
    Web架构安全分析/http/URL/Cookie攻击
    标本传送设备物联网应用案例|蓝蜂物联网一体化方案
    今年跳槽成功测试工程师原来是掌握了这3个“潜规则”
    基于多策略的改进花授粉算法
    python:自动获取当前系统的路径(windows+linux)、xlsx文件转换为csv文件
    vue3使用windicss
    【leetcode】【剑指offer Ⅱ】023. 两个链表的第一个重合节点
    只需三步,教你搭建一个进销存管理系统!
    客服测试12345678
  • 原文地址:https://blog.csdn.net/FUTEROX/article/details/126746954