SpringBoot整合Mybatis之进门篇

已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结。

       之前在网上找过不少关于springboot的教程,都是一些比较粗糙的文章,就连百度百科也是少的可怜,所以进度一直跟不上计划。下面根据我这几天的学习和摸索,谈谈我对spring和springboot的区别,以及很多业界人士说它的快速开发,到底是快在哪儿,方便在哪儿?首先我认为在项目的架构搭建方面变得极其利索,不再需要像之前一样整合ssh或ssm那样进行一大堆的配置文件,他只是通过一个application入口类来配置所有的配置项,包括spring的一些默认配置项;其次springboot它没有太多自己的特性,没有完全颠覆之前的开发模式,反而提供了更加便捷的方式来集成了原来的开发模式,只能说换了一种快速的方式来提高开发速度。

        废话我也不多说了,也说不了,后面我会把我这几天的整合过程详细给大家总结下来,初次接触如有地方有误的,望及时指正。

项目结构详解:

1、pom文件详解

pom文件中各项依赖的作用见代码注释。

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

 2、项目的入口类application.java详解

先介绍一下在入口类中需要用到的常用注解:

@SpringBootApplication:这是一个组合注解,聚合了多个注解的功能,包含:排除自启动项、排除自启动项的beanname、扫描包和扫描类。【建议瞜一眼源码更好】

@EnableAutoConfiguration:这个注解是用来启动springboot中的自动配置项目,必须的加上,否则无法正常使用springboot默认配置的配置项目。

@ComponentScan :扫描controller层和service层中所有类上的注解(这个注解可以不加,因为组合注解@SpringBootApplication已经可以扫描)。

@MapperScan("com.zxz.mapper") :管理mybatis中所有mapper接口的代理对象。

@EnableTransactionManagement(proxyTargetClass = true):开启事务管理的注解。

 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、dbcp2、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文件的映射配置:

因为是和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的日志加载等,与君共勉。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏owent

注册表常用键值意义

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel]

1662
来自专栏程序猿DD

Spring Boot中使用LDAP来统一管理用户信息

很多时候,我们在构建系统的时候都会自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个...

8276
来自专栏PhpZendo

什么是依赖注入

本文是依赖注入(Depeendency Injection)系列教程的第一篇文章,本系列教程主要讲解如何使用 PHP 实现一个轻量级服务容器,教程包括:

3401
来自专栏程序猿DD

Spring Cloud构建微服务架构:Hystrix监控面板【Dalston版】

前言 在上一篇《服务容错保护(hystrix断路器)》的介绍中,我们提到断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的。而这些请求情况的...

2217
来自专栏岑玉海

oozie 运行demo

昨晚装好了oozie,能启动了,并且配置了mysql作为数据库,好了,今天要执行oozie自带的demo了,好家伙,一执行就报错!报错很多,就不一一列举了,就...

4508
来自专栏技术博文

Linux下ps命令详解

linux上进程有5种状态:  1. 运行(正在运行或在运行队列中等待)  2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)  3. 不可中断(...

4064
来自专栏FreeBuf

新手指南:DVWA-1.9全级别教程(完结篇,附实例)之XSS

* 本文原创作者:lonehand,转载请注明来自FreeBuf.COM 目前,最新的DVWA已经更新到1.9版本(http://www.dvwa.co.uk...

1.4K5
来自专栏搜云库

Spring Boot 中使用 LogBack 配置

LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手。(log4j的原型是早前由Ceki Gülcü贡献给Apache基...

2.6K6
来自专栏张戈的专栏

零门槛!使用Docker快速部署ES集群

自从接触 Docker 之后,对 Docker 简直是爱不释手,做什么都是行云流水。遇到部署开源软件需求,第一时间想到的都是有没有现成的 Docker 镜像?能...

3K4
来自专栏JackeyGao的博客

Django小技巧14: messages 框架

让用户知道应用程序发生了什么, 是个极好的用户体验。让应用程序和用户之间能够有个很好的『交流』是个不错的选择。

2454

扫码关注云+社区

领取腾讯云代金券