• Spring 梳理-数据访问-DB


    1. 针对接口编程
      1. DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式。Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口的形式进行访问。

    2. 统一异常体系
      1. 为了实现数据访问层与应用程序的的其他部分的解耦,Spring采用的一个方式就是提供贯穿整个DAO框剪的统一异常体系。
      2. JDBC中的SQLException,它表示尝试访问数据库时出现异常,但是却无法做出相对应的处理,太模糊了
      3. Hibernate提供了20个左右的异常,分别对应特定的数据库访问问题。太多了,需要写20个左右的catch块。而且,Hibernate异常时其特有的,试想下,如果持久层抛出特定的Hibernate的异常,那么应用程序层必须解释并处理该异常,使得Hibernate持久层与程序应用层耦合,不符合我们的"针对接口编程"的思想原则
      4. 因此,我需要的是数据访问异常具有描述性有与特定的持久化框架无关(减少耦合)
      5. Spring的平台无关持久化异常且不用写catch代码块
      6. Spring的异常都继承自DataAccessException,它是一个非检查型异常。至于是否有必要捕获异常,决定权在开发人员手中
      7. 为了使用Spring的数据访问异常,就需要使用Spring所提供的数据访问模板
      8. Spring提供了多个可选的模板
      9. 使用DAO支持类
        1. 数据访问模板并不是Spring数据访问框架的全部。
        2. Spring提供了DAO支持类,而将业务自己的DAO类作为它的子类。
        3. 当编写应用程序自己的DAO实现时,可以继承DAO支持类并获取访问方法来直接访问底层的数据访问模板。

          例如,应用程序的DAO继承自JdbcDaoSupport,那么它只要盗用getConnection()方法就可以获得JdbaTemplate并使用它。如果你需要访问底层的持久化平台,则每个DAO支持类都能够访问其与数据库进行通信的类。例如,JdbaDaoSupport包含一个getConnection()方法,可以直接处理JDBC连接。

          总结一句话:Spring DAO支持类提供了方便的方式来使用数据访问模板

    3. 配置数据源
      1. 大多数持久化功能都依赖于数据源,因此,在创建模板和DAO之前,我们需要在Spring中配置一个数据源以便DAO可以访问数据库。
      2. Spring提供了在上下文中配置数据源Bean的多种方式:

        通过JDBC驱动程序定义数据源

        通过JNDI查找的数据源

        连接池数据源

        我们建议使用连接池获取连接,如果可以,也建议通过应用服务器的JNDI来获取池中的数据源

      3. 使用JNDI数据源.详细使用方法参考:
      4. 使用数据源连接池
        1. 相比于JNDI查找数据源,数据库连接池是直接配置在Spring中(也就是说系统管理员不能进行热切换)

          使用数据源连接池推荐集成DBCP项目:https://commons.apache.org/proper/commons-dbcp/

          DBCP包含了多个数据源类,其中最常用的是BasicDataSource,它类似于Spring直达udeDriverManagerDataSource

        2. 还可以使用c3p0数据连接池
        3. 在Spring中配置DBCP的数据源方式:
          1. <?xml version="1.0" encoding="UTF-8"?> 
            
            <beans xmlns="http://www.springframework.org/schema/beans" 
            
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            
                default-init-method="turnOnLights" 
            
                default-destroy-method="turnOffLights" 
            
                xmlns:p="http://www.springframework.org/schema/p" 
            
                xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
            
                 
            
                <!-- Bean declarations go here --> 
            
                <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
            
                    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
            
                    <property name="url" value="jdbc:mysql://localhost:3306/mysql" /> 
            
                    <property name="username" value="root" /> 
            
                    <property name="password" value="mysql" /> 
            
                    <property name="initialSize" value="5" /> 
            
                    <property name="maxActive" value="10" /> 
            
                </bean> 
            
            </beans> 
      5. 基于JDBC驱动的数据源。不建议使用
        1. 在Spring中,通过JDBC驱动配置数据源最简单。Spring提供了两种数据源对象供选择:

          DriverMavagerDataSource:在每个连接请求时会返回一个新的新建连接,并没有和DBCP一样采用池化管理。

          SimpleConnectionDataSource:在每个连接请求时都会返回同一个连接。尽管他不是严格的连接池,但是你可以看成是initialSizemaxActive都为1的连接池。

          上述的配置与BasciDataSource配置类似,略。

    4. 使用JDBC模板
      1. Spring的JDBC模板承担了资源管理和异常处理的工作,简化了JDBC的代码。Spring为JDBC提供了3个模板类:

        JdbcTemplate:最基本的Spring JDBC模板,它支持最简单的JDBC数据库访问功能意见简单的缩影参数查询。 首选

        NamedParameterJdbaTemplate:使用该模板类执行查询操作时,可以将查询值以命名参数的形式绑定到SQL中,而不是使用简单的索引参数。

        SimpleJdbcTemplate:该模块利用Java 5的一些特性(如:自动装箱、泛型和可变参数列表)来简化JDBC模板的使用

      2. 参考:https://www.cnblogs.com/jiangtao1218/p/9852874.html
    5. 使用Spring的JDBC DAO支持类
      1. 思考一个问题,我们在定义JdbcSpitterSDAO.java类时,DAO类需要添加一个SinpleJdbcTemplate的属性以及对于的get/set方法用来注入。如果一个应用程序只有一个DAO类,添加这个属性没什么问题,但是实际上我们会面对很多对象的DAO,这样就会产生大量重复的工作。

        解决方案是为所有的DAO类创建一个通用的父类,在其中有SinpleJdbcTemplate属性,子类通过父类进行数据库访问。如图:

      2. 实际上,Spring框架提供了3个支持类:JdbcDaoSupport、SimpleJdbcDaoSupport和NamedParameterJdbcDaoSupport。通过使用Spring的JDBC DAO 支持类来使用JDBC模板。
  • 相关阅读:
    and &&区别
    redis服务意外停止
    shell基础之bash
    vbox的桥接网络
    apache安装及相应配置
    https服务器配置部署
    nginx + php + mysql安装、配置、自启动+redis扩展
    VirtualBox安装linux
    本地检出远程分支
    linux下的crontab安装及简单使用
  • 原文地址:https://www.cnblogs.com/jiangtao1218/p/9853380.html
Copyright © 2020-2023  润新知