Spring + Spring MVC + Mybatis + Swagger + javaConfig 整合项目 全注解方式

工程目录结构
工程目录结构
配置pom文件

<!-- 版本 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>4.12</junit.version>
    <spring.version>4.3.0.RELEASE</spring.version>
    <jackson.version>2.5.0</jackson.version>
    <mysql-connector-java.version>5.1.37</mysql-connector-java.version>
    <fastjson.version>1.2.3</fastjson.version>
    <slf4j.version>1.7.12</slf4j.version>
    <commons-io.version>2.4</commons-io.version>
    <commons-fileupload.version>1.3.2</commons-fileupload.version>
    <commons-collections.version>3.2.2</commons-collections.version>
    <commons-lang3.version>3.3.2</commons-lang3.version>
    <commons-codec.version>1.10</commons-codec.version>
    <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
    <druid.version>1.0.16</druid.version>
    <mybatis.version>3.4.0</mybatis.version>
    <mybatis-spring.version>1.3.0</mybatis-spring.version>
    <swagger.version>2.7.0</swagger.version>
    <mybatis.generator>1.3.6</mybatis.generator>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <logback.version>1.2.3</logback.version>
  </properties>
  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>${logback.version}</version>
    </dependency>

    <!-- spring -->
    <!--spring 核心包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring beans 包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring事务包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>


    <!-- jdbc驱动包  -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql-connector-java.version}</version>
    </dependency>

    <!--common 组件 -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>${commons-io.version}</version>
    </dependency>


    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>${commons-fileupload.version}</version>
    </dependency>

    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>${commons-collections.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>${commons-lang3.version}</version>
    </dependency>


    <!-- javax.servlet相关 -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${javax.servlet-api.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>${druid.version}</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>${mybatis-spring.version}</version>
    </dependency>

    <!--swagger-->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>${swagger.version}</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>${swagger.version}</version>
    </dependency>

    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.4.Final</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>1.8.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>
  </dependencies>
  build>
    <finalName>ssm</finalName>
    <plugins>
      <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>${mybatis.generator}</version>
        <configuration>
          <verbose>true</verbose>
          <overwrite>true</overwrite>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>com.qiukeke</groupId>
            <artifactId>mybatis-generator-limit-plugin</artifactId>
            <version>1.0.4</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>

Spring集成Mybatis

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

/**
 * 非Web组件的配置
 * @author hollins
 *
 */
//注解表明这个类是一个Bean的配置类。
@Configuration
//注解激活Aspect自动代理  等同于<aop:aspectj-autoproxy/>
@EnableAspectJAutoProxy
//扫描配置文件
@PropertySource(value = "classpath:config/jdbc.properties")
@MapperScan(value = "com.ssm.dal",annotationClass = Mapper.class)
//@ComponentScan注解表示启用组件扫描,等同于xml文件中的
@ComponentScan(basePackages ="com.ssm.adapter.impl")
//开启对异步任务的支持,并通过在实际执行的Bean的方法中使用@Async注解来声明其是一个异步任务。
@EnableAsync
//@EnableTransactionManagement注解开启注解式事务的支持。
@EnableTransactionManagement
//@EnableScheduling注解开启计划任务的支持。一般都需要@Scheduled注解的配合。
//@EnableScheduling
public class DataSourceConfig {
    Logger logger = LoggerFactory.getLogger(getClass());
    @Value("${spring.datasource.driverClassName}")
    String driverClassName;
    @Value("${spring.datasource.username}")
    String dataSourceUserName;
    @Value("${spring.datasource.password}")
    String dataSourceUserPassword;
    @Value("${spring.datasource.url}")
    String dataSourceUrl;
    @Value("${spring.datasource.initialSize}")
    String dataSourceInitialSize;
    @Value("${spring.datasource.minIdle}")
    String dataSourceMinIdle;
    @Value("${spring.datasource.maxActive}")
    String dataSourceMaxActive;
    @Value("${spring.datasource.maxWait}")
    String dataSourceMaxWatit;
    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
    String dataSourceTimeBetweenEvictionRunsMillis;
    @Value("${spring.datasource.minEvictableIdleTimeMillis}")
    String dataSourceMinEvictableIdleTimeMillis;
    @Value("${spring.datasource.validationQuery}")
    String dataSourceValidationQuery;
    @Value("${spring.datasource.testWhileIdle}")
    String dataSourceTestWhileIdle;
    @Value("${spring.datasource.testOnBorrow}")
    String dataSourceTestOnBorrow;
    @Value("$spring.datasource.testOnReturn")
    String dataSourceTestOnReturn;
    @Value("${spring.datasource.poolPreparedStatements}")
    String dadaSourcePoolPreparedStatements;
    @Value("${spring.datasource.maxOpenPreparedStatements}")
    String dataSourceMaxOpenPreparedStatements;
    @Value("${spring.datasource.filters}")
    String dataSourceFilters;
    @Value("${spring.datasource.connectionProperties}")
    String dataSourceConnectionProperties;

    @Bean
    public DataSource getDataSource() throws Exception{
        logger.info("数据库配置初始化开始××××××××××××××××××××××××××××××××××××××××");
        Map<String,Object> properties = new HashMap<>();
        properties.put(DruidDataSourceFactory.PROP_DRIVERCLASSNAME,driverClassName);
        properties.put(DruidDataSourceFactory.PROP_USERNAME,dataSourceUserName);
        properties.put(DruidDataSourceFactory.PROP_PASSWORD,dataSourceUserPassword);
        properties.put(DruidDataSourceFactory.PROP_URL,dataSourceUrl);
        properties.put(DruidDataSourceFactory.PROP_INITIALSIZE,dataSourceInitialSize);
        properties.put(DruidDataSourceFactory.PROP_MINIDLE,dataSourceMinIdle);
        properties.put(DruidDataSourceFactory.PROP_MAXACTIVE,dataSourceMaxActive);
        properties.put(DruidDataSourceFactory.PROP_MAXACTIVE,dataSourceMaxWatit);
        properties.put(DruidDataSourceFactory.PROP_TIMEBETWEENEVICTIONRUNSMILLIS,dataSourceTimeBetweenEvictionRunsMillis);
        properties.put(DruidDataSourceFactory.PROP_MINEVICTABLEIDLETIMEMILLIS,dataSourceMinEvictableIdleTimeMillis);
        properties.put(DruidDataSourceFactory.PROP_VALIDATIONQUERY,dataSourceValidationQuery);
        properties.put(DruidDataSourceFactory.PROP_TESTWHILEIDLE,dataSourceTestWhileIdle);
        properties.put(DruidDataSourceFactory.PROP_TESTONBORROW,dataSourceTestOnBorrow);
        properties.put(DruidDataSourceFactory.PROP_TESTONRETURN,dataSourceTestOnReturn);
        properties.put(DruidDataSourceFactory.PROP_POOLPREPAREDSTATEMENTS,dadaSourcePoolPreparedStatements);
        properties.put(DruidDataSourceFactory.PROP_MAXOPENPREPAREDSTATEMENTS,dataSourceMaxOpenPreparedStatements);
        properties.put(DruidDataSourceFactory.PROP_FILTERS,dataSourceFilters);
        properties.put(DruidDataSourceFactory.PROP_CONNECTIONPROPERTIES,dataSourceConnectionProperties);
        logger.info("数据库配置初始化结束××××××××××××××××××××××××××××××××××××××××");
        return DruidDataSourceFactory.createDataSource(properties);

    }
    /**
    * 事务配置
    **/
    @Bean
    public DataSourceTransactionManager transactionManager()throws Exception{
        return new DataSourceTransactionManager(this.getDataSource());
    }
    @Bean
    public SqlSessionFactoryBean getSqlSessionFactoryBean()throws Exception{
        logger.info("初始化SqlSessionFactoryBean开始××××××××××××××××××××××××××××××××××××××××");
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(this.getDataSource());//数据源
        sqlSessionFactoryBean.setTypeAliasesPackage("com.ssm.dal.model");
        PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
        String packageSearchPath = ResourcePatternResolver.CLASSPATH_URL_PREFIX+"/mybatis/*.xml";//数据库层xml文件地址
        sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
        logger.info("初始化SqlSessionFactoryBean结束××××××××××××××××××××××××××××××××××××××××");
        return sqlSessionFactoryBean;
    }

}

Spring Mvc

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
//注解表明这个类是一个Bean的配置类。
@Configuration
//@EnableWebMVC注解用来开启Web MVC的配置支持。
//@EnableWebMvc
//@ComponentScan注解表示启用组件扫描,等同于xml文件中的
@ComponentScan(value = {"com.ssm.web", "com.ssm.swagger"})
public class WebConfig extends WebMvcConfigurerAdapter{

    /**
     * 允许跨域访问
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*");
    }
    /**
     * 允许直接访问的资源
     *
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //addResourceLocations指的是文件放置的目录,addResoureHandler指的是对外暴露的访问路径
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    /**
     * spring 方法参数验证
     * @return
     */
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor(){
        return  new MethodValidationPostProcessor();
    }
}

web.xml

import com.ssm.assembly.redis.RedisConfig;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;

/**
 * 初始化容器
 */
public class WeblabWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{DataSourceConfig.class,RedisConfig.class};// RedisConfig.class
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        FilterRegistration.Dynamic encodingFilter=servletContext.addFilter("characterEncodingFilter",new CharacterEncodingFilter());
        encodingFilter.setInitParameter("encoding","UTF-8");
        encodingFilter.setInitParameter("forceEncoding", "true");
        encodingFilter.addMappingForUrlPatterns(null, true, "/*");
    }
}

数据连接配置
jdbc.properties

## Development jdbc settings. ####
## MySQL. ##
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/user_manager?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=100
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=false
spring.datasource.maxOpenPreparedStatements=-1
spring.datasource.filters=stat,wall,slf4j
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值