zoukankan      html  css  js  c++  java
  • 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模板。
  • 相关阅读:
    NetSuite Batch Process Status
    NetSuite generated bank files and the Bank Reconciliation process
    Global Search file content in Gitlab repositories, search across repositories, search across all files
    FedEx Package Rate Integration with NetSuite direct integrate by WebServices
    git Merge branches
    git tag and NetSuite deployment tracking
    API 读写cookie的方法
    C# 生成缩略图
    解决jquery操作checkbox全选全不选无法勾选问题
    JS读取写入删除Cookie方法
  • 原文地址:https://www.cnblogs.com/jiangtao1218/p/9853380.html
Copyright © 2011-2022 走看看