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", 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;
    }
    
}

输出结果如下:

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

相关推荐
知兀6 小时前
【MybatisPlus】后端用枚举类,数据库用tinyint,存在枚举类型转换
java
StockTV6 小时前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
User_芊芊君子6 小时前
【OpenAI 把 AI 玩明白了】:自主推理 + 动态知识图谱,这 4 个技术突破要颠覆行业
java·人工智能·知识图谱
c++之路7 小时前
C++20概述
java·开发语言·c++20
Championship.23.247 小时前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮7 小时前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken7 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步8 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿8 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
one_love_zfl8 小时前
java面试-微服务组件篇
java·微服务·面试