已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,如今也算是完成了第一阶段的学习,今天给各位总结总结。css
以前在网上找过很多关于springboot的教程,都是一些比较粗糙的文章,就连百度百科也是少的可怜,因此进度一直跟不上计划。下面根据我这几天的学习和摸索,谈谈我对spring和springboot的区别,以及不少业界人士说它的快速开发,究竟是快在哪儿,方便在哪儿?首先我认为在项目的架构搭建方面变得极其利索,再也不须要像以前同样整合ssh或ssm那样进行一大堆的配置文件,他只是经过一个application入口类来配置全部的配置项,包括spring的一些默认配置项;其次springboot它没有太多本身的特性,没有彻底颠覆以前的开发模式,反而提供了更加便捷的方式来集成了原来的开发模式,只能说换了一种快速的方式来提升开发速度。java
废话我也很少说了,也说不了,后面我会把我这几天的整合过程详细给你们总结下来,初次接触若有地方有误的,望及时指正。mysql
pom文件中各项依赖的做用见代码注释。git
<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> <groupId>com.zxz.boot</groupId> <artifactId>springboot_mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.4.RELEASE</version> </parent> <dependencies> <!--Spring Boot--> <!--支持 Web 应用开发,包含 Tomcat 和 spring-mvc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--模板引擎--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--支持使用 JDBC 访问数据库--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--添加适用于生产环境的功能,如性能指标和监测等功能。 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- springboot的热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <!--Mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <!--Mysql / DataSource--> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.26</version> </dependency> <!--Json Support--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.43</version> </dependency> <!--Swagger support--> <dependency> <groupId>com.mangofactory</groupId> <artifactId>swagger-springmvc</artifactId> <version>0.9.5</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <!-- 使用插件来运行springboot(运行springboot的方式有2种:main方法运行或使用下面的插件运行) --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestone</id> <url>https://repo.spring.io/libs-release</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestone</id> <url>https://repo.spring.io/libs-release</url> </pluginRepository> </pluginRepositories> </project>
先介绍一下在入口类中须要用到的经常使用注解:github
@SpringBootApplication:这是一个组合注解,聚合了多个注解的功能,包含:排除自启动项、排除自启动项的beanname、扫描包和扫描类。【建议瞜一眼源码更好】web
@EnableAutoConfiguration:这个注解是用来启动springboot中的自动配置项目,必须的加上,不然没法正常使用springboot默认配置的配置项目。spring
@ComponentScan :扫描controller层和service层中全部类上的注解(这个注解能够不加,由于组合注解@SpringBootApplication已经能够扫描)。sql
@MapperScan("com.zxz.mapper") :管理mybatis中全部mapper接口的代理对象。数据库
@EnableTransactionManagement(proxyTargetClass = true):开启事务管理的注解。apache
1 /** 2 * 整个项目的入口 3 */ 4 @SpringBootApplication 5 @EnableAutoConfiguration 6 @ComponentScan 7 @MapperScan("com.zxz.mapper") 8 @EnableTransactionManagement(proxyTargetClass = true) 9 public class Application { 10 11 private static Logger logger = Logger.getLogger(Application.class); 12 //启动类 13 public static void main(String[] args) { 14 SpringApplication.run(Application.class, args); 15 logger.info("======spring boot start success ==========="); 16 } 17 }
由于个人项目最后是须要和mybatis整合的,因此在该入口类中一定有一些数据源、每层包扫描和注解扫描、管理mybatis中mapper接口的代理对象和事务管理器等一些必要的配置项。还有经过我上面的项目结构发现,mybatis的sql文件是放置在了resources文件下,因此还得经过配置映射到相应的xml文件中去等等,这些事情都须要借助该入口类来完成。
首先得配置好链接数据库的一些参数,以前咱们是一般配置在某资源文件中,而后经过spring的配置文件进行加载到的,这里咱们也须要将链接参数配置到SpringBoot规定的文件application.properties中,最后在入口类中经过注解加载便可。
application.properties配置内容:
1 server.port=8080 2 spring.datasource.url=jdbc:mysql://localhost:3306/zxz 3 spring.datasource.username=root 4 spring.datasource.password=123 5 spring.datasource.driver-class-name=com.mysql.jdbc.Driver 6 logging.level.com.zxz.mapper=debug
在入口类中经过注解加载:
1 @Bean 2 @ConfigurationProperties(prefix = "spring.datasource") //做用:加载application.properties文件中的数据库链接参数 3 public DataSource dataSource(){ 4 return new DataSource(); 5 }
可是到这儿,可能不少哥们儿就有点说法了,如今大多数都是使用阿里的Druid数据源,由于性能好,可是在这里配置并无指定数据源的具体类型,难道默认使用的是Druid,不是的,springboot还不至于这么完美,目前它仅仅支持dbcp、dbcp二、hikari三种数据库链接池。要是你就想要使用druid做为项目中的数据源,那么你就要费点儿力点开下面的代码,只需将它们复制到你的入口类中便可:
1 /** 2 * 注册DruidServlet 3 * @return 4 */ 5 @Bean 6 public ServletRegistrationBean druidServletRegistrationBean() { 7 ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); 8 servletRegistrationBean.setServlet(new StatViewServlet()); 9 servletRegistrationBean.addUrlMappings("/druid/*"); 10 return servletRegistrationBean; 11 } 12 /** 13 * 注册DruidFilter拦截 14 * @return 15 */ 16 @Bean 17 public FilterRegistrationBean duridFilterRegistrationBean() { 18 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); 19 filterRegistrationBean.setFilter(new WebStatFilter()); 20 Map<String, String> initParams = new HashMap<String, String>(); 21 //设置忽略请求 22 initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"); 23 filterRegistrationBean.setInitParameters(initParams); 24 filterRegistrationBean.addUrlPatterns("/*"); 25 return filterRegistrationBean; 26 } 27 /** 28 * 配置DruidDataSource 29 * @return 30 * @throws SQLException 31 */ 32 @Bean 33 public DruidDataSource druidDataSource() throws SQLException { 34 DruidDataSource druidDataSource = new DruidDataSource(); 35 druidDataSource.setUsername("root"); 36 druidDataSource.setPassword("123"); 37 druidDataSource.setUrl("jdbc:mysql://localhost:3306/zxz"); 38 druidDataSource.setMaxActive(100); 39 druidDataSource.setFilters("stat,wall"); 40 druidDataSource.setInitialSize(10); 41 return druidDataSource; 42 }
1 //配置transactionManager 2 @Bean 3 public PlatformTransactionManager transactionManager() throws SQLException{ 4 return new DataSourceTransactionManager(druidDataSource()); 5 }
由于是和mybatis的整合,免不了mapper.xml的加载和映射,springboot提供了专门的方式来加载它们。
1 //提供sqlSession 2 @Bean 3 public SqlSessionFactory sqlSessionFactory(PageHelper pageHelper)throws Exception{ 4 SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); 5 sqlSessionFactoryBean.setDataSource(druidDataSource()); 6 sqlSessionFactoryBean.setPlugins(new Interceptor[] {pageHelper}); 7 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); 8 sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml")); 9 return sqlSessionFactoryBean.getObject(); 10 }
若是上面最基本的各项配置都差很少了,你就能够运行入口类中的伟大的main方法,看到以下界面没有报错信息则表示整合成功,各位尽可能写个能访问数据库的业务逻辑来验证整合结果,这里由于时间问题我就不粘贴了:
好了,到这儿我也快收工了,今天就总结到这儿吧,下次继续给各位总结springboot整合mybatis的分页插件pageHelper、springboot的热部署和springboot的日志加载等,与君共勉。