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; } }
划船不用桨、杨帆不等风、一生全靠浪