SpringBoot 基础1

1 Spring Boot 整合连接池

1.1 概述

实际开发中应用程序与数据库交互时,“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术来重用连接Connection对象,如图-1所示:

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。然后我们的应用程序中耦合与这个接口,便可以方便的切换不同厂商的连接池,常见的连接池有DBCP、C3P0,DRUID,HikariCP等。

通过连接池获取连接的一个基本过程,如图-2所示:

 在图-2中,用户通过DataSource对象的getConnection()方法,获取一个连接。假如池中有连接,则直接将连接返回给用户。假如池中没有连接,则会调用Dirver(驱动,由数据库厂商进行实现)对象的connect方法从数据库获取,拿到连接以后,可以将连接在池中放一份,然后将连接返回给调用方。

1.2 数据初始化

打开mysql控制台,然后按如下步骤执行goods.sql文件:

第一步:登录mysql

mysql –uroot –proot

第二步:设置控制台编码(MySql客户端)方式

set names utf8;

第三步:执行goods.sql文件

source d:/goods.sql

备注:当mysql连接数据库失败时,检测服务是否启动,可尝试先启动服务(windows中需要以管理员打开控制台,然后在控制台执行net start mysql启动服务即可)

1.3 整合HikariCP连接池

HiKariCP号称是目前世界上最快的连接池,有江湖一哥的称号,目前在

springboot工程默认推荐使用HiKariCP连接池,现在我们创建一个新的项目,项目名为CGB-SBOOT-02,在此工程中整合HiKariCP,其步骤如下:

 

第一步:添加依赖。

编辑项目中pom.xml,右键项目的pom.xml文件,选择spring,如图-3所示:

查找mysql 驱动依赖,JDBC API依赖,如图-4所示:

依赖添加以后,在pom.xml文件中会自动添加如下两个依赖配置:

        

 

我们在软件设计时,通常要遵循一定的设计原则。MVC架构模式的设计中,首先基于单一职责原则(SRP-Single responsibility principle)让每个对象各司其职,各尽所能。然后再基于“高内聚,低耦合”的设计思想实现相关层对象之间的交互。这样可以更好提高程序的可维护性和可扩展性。

JavaEE技术体系中,MVC设计思想的实现,如图-14所示:

 

 

  1. mysql数据库驱动依赖。
  2. <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <scope>runtime</scope>

    </dependency>

  3. spring对象jdbc支持(此时会默认帮我们下载HiKariCP连接池)。
  4. <dependency>

                    <groupId>org.springframework.boot</groupId>

                    <artifactId>spring-boot-starter-jdbc</artifactId>

    </dependency>

  5. 第二步:配置连接池

    打开application.properties配置文件,添加如下内容。

  6. spring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8

    spring.datasource.username=root

    spring.datasource.password=root

  7. 第三步:单元测试(测试包中编写)

  8. @SpringBootTest

    public class DataSourceTests {

        @Autowired

            private DataSource dataSource;

            @Test

            public void testConnection() throws Exception{

                    System.out.println(dataSource.getConnection());

            }

    }

  9.    第四步:原理分析,如图-5所示:

  10. 在图-5中,演示了我们在测试类DataSourceTests中基于DataSource获取连接的一个基本过程。对于图-5中的连接建立过程,可以在Driver接口的实现中的connect方法上添加断点,然后进行断点测试,如图-6显示了API方法的调用执行过程(按箭头方向开代码),这个了解了解即可。

  11. 当我们需要了解,基于HikariCP连接池获取数据库连接,并将获取到的连接放入到连

    接池中的过程进行了解,可以参考图-7中的断点设计进行查看即可(不做具体要求)。

  12. 在基于图-7中设置的断点序号位置进行单元测试时,可以每次按F8进行断点跟踪,了解HiKariCP连接池获取连接存储连接的过程,其中API不理解的可以在搜索引擎中进行查阅分析。

  13. 2 Spring Boot 整合MyBatis框架

    2.1 概述

    Mybatis是一个优秀的持久层框架,底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展。Mybatis框架的简单应用架构,如图-8所示:

  14. 在当今的互联网应用中项目,mybatis框架通常会由spring框架进行资源整合,作为数据层技术实现数据交互操作。

  15. 2.2 初始配置

    2.2.1 添加mybatis启动依赖

    参考官网mybatis.org/spring,找到springboot菜单选项.基于菜单项找到MyBatis启动依赖。

  16. 注意:在添加此依赖时,一定指定其版本(version),因为在springboot默认配置中没有设置mybatis框架版本。

    我们添加了mybatis依赖以后,spring框架启动时会对mybatis进行自动配置。例如SqlSessionFactory工厂对象的创建。

    2.2.2 Mybatis简易配置

    假如需要对mybatis框架进行简易配置,可以打开application.properties文件,在此文件中进行基本配置(可选,暂时可以不配置),例如:

  17. mybatis.configuration.default-statement-timeout=30

    mybatis.configuration.map-underscore-to-camel-case=true

  18. 配置mybatis中的sql日志的输出:(com.cy为我们写的项目的根包)

  19. logging.level.com.cy=DEBUG

  20. 2.3 业务分析及实现

    2.3.1 基本业务实现及单元测试

    基于Spring对MyBatis框架的整合,实现对商品库中数据的删除操作。

    第一步:业务API架构设计,如图-9所示:

  21. 第二步:基于id执行商品信息删除,其业务时序,如图-10所示:

  22. 第三步:定义商品业务数据层接口及业务方法。

  23. package com.cy.pj.goods.dao;

    import org.apache.ibatis.annotations.Delete;

    import org.apache.ibatis.annotations.Mapper;

    @Mapper

    public interface GoodsDao {

             @Delete("delete from tb_goods where id=#{id}")

             int deleteById(Integer id);

    }

  24. 其中:@Mapper是由MyBatis框架中定义的一个描述数据层接口的的注解(所有的注解只起到一个描述性的作用),用于告诉Spring框架此接口的实现由mybatis创建,并将其实现类对象存储到spring容器.

    第四步:定义测试类,对GoodsDao对象进行应用测试

  25. @SpringBootTest

    public class GoodsDaoTests {    

       @Autowired

       private GoodsDao goodsDao;

     

            @Test

            public void testDeleteById() {

                    int rows=goodsDao.deleteById(10);

                    System.out.println("rows="+rows);

            }

     

    }

  26. 第五步:删除业务时序图增强分析,如图-11所示(了解SqlSession应用):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值