• springboot+mybatis+springMVC基础框架搭建


    项目结构概览

     

     

     

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <!-- springboot依赖的父类 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.2.RELEASE</version>
        </parent>
    
        <!-- 项目骨架 -->
        <groupId>com.pupeiyuan</groupId>
        <artifactId>ssm-springboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!-- 指定一下jdk的版本 ,这里我们使用jdk 1.8 ,默认是1.6 -->
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <!-- 单元测试 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- 支持springWEB web支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- jdbc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <!-- Mybatis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.1</version>
            </dependency>
            <!-- 通用Mapper -->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>RELEASE</version>
            </dependency>
            <!-- 分页助手 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.1.0</version>
            </dependency>
            <dependency>
                <groupId>com.github.jsqlparser</groupId>
                <artifactId>jsqlparser</artifactId>
                <version>0.9.1</version>
            </dependency>
    
            <!-- mysql 数据库驱动. -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!-- 连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.9</version>
            </dependency>
            <!-- jstl -->
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>
            <!-- JSP相关 -->
            <dependency>
                <groupId>com.github.jsqlparser</groupId>
                <artifactId>jsqlparser</artifactId>
                <version>0.9.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <scope>provided</scope>
            </dependency>
            <!-- httpclient -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <!-- java编译插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>

    application.properties

    spring.profiles.active=test

    application-test.properties

    #datasource -- mysql
    jdbc.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    jdbc.username=root
    jdbc.password=pypua
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.InitialSize=10
    jdbc.MinIdle=10
    jdbc.MaxActive=100
    
    #Tomcat
    server.port=8082
    server.servlet-path=/
    
    #log4j
    #logging.level.org.springframework=DEBUG
    
    #SpringMVC
    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp
    
    #mybatis && Mapper
    mybatis.configuration.mapUnderscoreToCamelCase=true
    mapper.mappers=com.karle.tk.TkMapper
    mapper.identity=MYSQL
    
    #banner
    banner.charset= UTF-8
    
    #jsp
    server.jsp-servlet.init-parameters.development=true
    
    # pagehelper properties
    pagehelper.offsetAsPageNum=true
    pagehelper.rowBoundsWithCount=true
    pagehelper.pageSizeZero=true
    pagehelper.reasonable=false
    pagehelper.params=pageNum=pageHelperStart;pageSize=pageHelperRows;
    pagehelper.supportMethodsArguments=false

    main.java

    package com.pupeiyuan;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import com.pupeiyuan.config.MainApplication;
    
    /**
     * Springboot启动类
     * @author Administrator
     *
     */
    
    public class main {
        
        public static void main(String[] args) {
            SpringApplication.run(MainApplication.class, args);
        }
    }

    MainApplication.java

    package com.pupeiyuan.config;
    
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.support.SpringBootServletInitializer;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import com.alibaba.druid.pool.DruidDataSource;
    
    @Configuration
    //扫描bean
    @ComponentScan(basePackages = "com.pupeiyuan.*")
    //不用自动配置数据源
    @SpringBootApplication(exclude=DataSourceAutoConfiguration.class)
    public class MainApplication extends SpringBootServletInitializer {
    
        @Value("${jdbc.url}")
        private String jdbcUrl;
    
        @Value("${jdbc.driverClassName}")
        private String jdbcDriverClassName;
    
        @Value("${jdbc.username}")
        private String jdbcUsername;
    
        @Value("${jdbc.password}")
        private String jdbcPassword;
        
        @Value("${jdbc.InitialSize}")
        private int InitialSize;
        
        @Value("${jdbc.MinIdle}")
        private int MinIdle;
        
        @Value("${jdbc.MaxActive}")
        private int MaxActive;
    
        @Bean(destroyMethod = "close")
        public DataSource dataSource() {
            // BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
            DruidDataSource druidDataSource = new DruidDataSource();
            // 数据库驱动
            druidDataSource.setDriverClassName(jdbcDriverClassName);
            // 相应驱动的jdbcUrl
            druidDataSource.setUrl(jdbcUrl);
            // 数据库的用户名
            druidDataSource.setUsername(jdbcUsername);
            // 数据库的密码
            druidDataSource.setPassword(jdbcPassword);
            // 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
            // 初始化时建立物理连接的个数
            druidDataSource.setInitialSize(InitialSize);
            // 最小连接池数量
            druidDataSource.setMinIdle(MinIdle);
            // 最大连接池数量
            druidDataSource.setMaxActive(MaxActive);
    
            //配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
            try {
                druidDataSource.setFilters("stat,wall,log4j");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        
            // 通过connectProperties属性来打开mergeSql功能;慢SQL记录
            druidDataSource.setConnectionProperties("druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000");
            //合并多个DruidDataSource的监控数据
            druidDataSource.setUseGlobalDataSourceStat(true);
            return druidDataSource;
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(MainApplication.class);
        }
    }

    MybatisConfig.java

    package com.pupeiyuan.config;
    
    import java.util.Properties;
    
    import javax.sql.DataSource;
    
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.annotation.Order;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    
    import com.github.pagehelper.PageHelper;
    
    import tk.mybatis.spring.annotation.MapperScan;
    import tk.mybatis.spring.mapper.MapperScannerConfigurer;
    
    @Configuration
    @MapperScan("com.pupeiyuan.mapper")
    public class MyBatisConfig {
    
        @Autowired
        private DataSource dataSource;
    
        @Bean
        @ConditionalOnMissingBean // 当容器里没有指定的Bean的情况下创建该对象
        public SqlSessionFactoryBean sqlSessionFactoryBean() {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            // 设置数据源
            sqlSessionFactoryBean.setDataSource(dataSource);
            // 设置别名包
            sqlSessionFactoryBean.setTypeAliasesPackage("com.pupeiyuan.bean");
    
            return sqlSessionFactoryBean;
        }
        
    }

    SpringMVCConfig.java

    package com.pupeiyuan.config;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    import com.pupeiyuan.interceptors.IsLoginHandlerInterceptor;
    
    @Configuration
    public class SpringMVCConfig extends WebMvcConfigurerAdapter{
    
        @Autowired
        private IsLoginHandlerInterceptor isLoginHandlerInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 判断用户是否登录的拦截器
            registry.addInterceptor(isLoginHandlerInterceptor).addPathPatterns("/burket/**");
        }
    }

    DruidConfiguration.java

    package com.pupeiyuan.config;
    
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    
    @Configuration
    public class DruidConfiguration {
    
        /**
         * 注册一个StatViewServlet
         * 
         * @return
         */
        @Bean
        public ServletRegistrationBean DruidStatViewServle2() {
            // org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
                    "/druid/*");
            // 添加初始化参数:initParams
            // 白名单:
            servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
            // IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not
            // permitted to view this page.
            servletRegistrationBean.addInitParameter("deny", "192.168.1.73");
            // 登录查看信息的账号密码.
            servletRegistrationBean.addInitParameter("loginUsername", "admin");
            servletRegistrationBean.addInitParameter("loginPassword", "123456");
            // 是否能够重置数据.
            servletRegistrationBean.addInitParameter("resetEnable", "false");
            return servletRegistrationBean;
        }
    
        /**
         * 注册一个:filterRegistrationBean
         * 
         * @return
         */
        @Bean
        public FilterRegistrationBean druidStatFilter2() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
            // 添加过滤规则.
            filterRegistrationBean.addUrlPatterns("/*");
            // 添加不需要忽略的格式信息.
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean;
        }
    
    }
  • 相关阅读:
    我为能准时下班而做的准备,以及由此的收获,同时总结下不足
    用象棋的思维趣说IT人的职业发展和钱途
    简历上如果出现过于高大上的项目,反而过犹不及:再论如何通过项目引出技术
    用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)
    如果当前没有拿得出手的简历,也别慌,努力的话最多两年情况就能改变
    分析若干没面试机会和没体现实力的简历
    IT人为了自己父母和家庭,更得注意自己的身体和心理健康
    Spring Cloud系列文,Feign整合Ribbon和Hysrix
    以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?
    博客园是个大金矿,管理员不挖掘有些可惜:给博客园提一些双赢的建议
  • 原文地址:https://www.cnblogs.com/pypua/p/10076952.html
Copyright © 2020-2023  润新知