如何纯注解整合Spring SpringMVC Mybatis

文章目录

  • 前言
  • 项目创建
    • 依赖导入
    • tomcat 插件
      • tomcat 7 插件
      • 使用本地tomcat8
  • 创建配置类
    • SpringConfig
    • DuridConfig
    • mybatis配置
    • MVC配置
    • Servlet配置
  • 测试
  • 总结

前言

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

项目创建

咱们这里就直接创建一个最简单的webapp的maven项目。
如何纯注解整合Spring SpringMVC Mybatis_第1张图片
之后打开项目,创建一下模块
如何纯注解整合Spring SpringMVC Mybatis_第2张图片

依赖导入

咱们这边的话还是说玩纯注解开发,然后也是摒弃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>


这里没有导入spring-context 因为在spring-mvc是有的。
如何纯注解整合Spring SpringMVC Mybatis_第3张图片

那么咱们这个依赖里面主要第一个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>


但是这里有点问题,在我的实际环境里面,如果有问题的话还是使用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>

然后在这里配置一下:
如何纯注解整合Spring SpringMVC Mybatis_第4张图片
就可以跑了。

使用本地tomcat8

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

如何纯注解整合Spring SpringMVC Mybatis_第5张图片

在idea里面比较智能的是,这玩意你第一次打开会提示Fix,你点击一下就不要自己搞了。之后运行成功。
如何纯注解整合Spring SpringMVC Mybatis_第6张图片

创建配置类

我们不用XML的原因是spring对注解的支持嘛,我们用配置类来代替application.xml。
我们创建如下配置:
如何纯注解整合Spring SpringMVC Mybatis_第7张图片

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

SpringConfig

@Configuration
@ComponentScan({"com.huterox.service"})
@PropertySource("classpath:jdbc.properties")
@Import({DuridConfig.class,MybatisConfig.class})
public class SpringConfig {

}

DuridConfig

这个其实jdbc的一个配置。
如何纯注解整合Spring SpringMVC Mybatis_第8张图片
咱们这里面提出了一个配置文件,
如何纯注解整合Spring SpringMVC Mybatis_第9张图片


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

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

}

MVC配置

@Configuration
@ComponentScan("com.huterox.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

这里的话,单独把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[]{"/"};
    }
}

测试

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

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

如何纯注解整合Spring SpringMVC Mybatis_第10张图片

如何纯注解整合Spring SpringMVC Mybatis_第11张图片

总结

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

你可能感兴趣的:(JAVA后端,spring,mybatis,java)