• Spring : 征服数据库(一)


    严格的说。这里征服的是关系型数据库。之后笔者会以MongoDB为例,给出非关系型数据库的解决方式,敬请期待。

    获取连接,操作,关闭,不知所云的异常...是的,你受够了。在使用纯JDBC时你訪问数据库时写的80%的代码是反复的,对此,Spring给的方案是 模板 + 回调。模板就是訪问数据库时的固定操作。回调是变化的部分。

    针对不同的持久化平台。你可选的模板是不同的;假设使用的是JDBC,能够选择JdbcTemplate,假设使用特定的ORM框架,能够选择HibernateTemplate或SqlMapClientTemplate等。

    选择哪个JDBC模板是须要权衡的,由于随着Spring的更新。其API的变化导致选择的考虑不同。比方。在Spring2.5时,NamedParameterJdbcTemplate的功能并入到SimpleJdbcTemplate,我们一般选择SimpleJdbcTemplate。可是Spring 3.1之后。SimpleJdbcTemplate被废弃了,官方的解释是:since Spring 3.1 in favor of JdbcTemplate and NamedParameterJdbcTemplate. The JdbcTemplate and NamedParameterJdbcTemplate now provide all the functionality of the SimpleJdbcTemplate.  也就是官方推荐我们使用JdbcTemplate和NamedParameterJdbcTemplate了。由于它们有SimpleJdbcTemplate的全部功能了。

    关于各种模板的API太多,没什么可说,必要时查API就可以。


    在程序开发过程时就使用MySql等显得有点臃肿,你想着,“我就像看看这个数据訪问能否成功,还得配置个MySQL,太麻烦了”。确实是。Spring针对此问题给我们提供了嵌入式Java 数据库引擎,并原生支持 HSQL,H2和Derby三种。

    我们来看它假设配置数据源的。

      <jdbc:embedded-database id="dataSource">
            <jdbc:script location="classpath:schema.sql"/>
            <jdbc:script location="classpath:test-data.sql"/>
        </jdbc:embedded-database>

    默认是启用HSQL数据库。你也能够设置type属性来自己定义,如 

    <jdbc:embeded-database id="dataSouce" type="H2" >

    以下的两行各自是设置了创建模式的脚本和原始数据的脚本。文件放在类载入路径下。文件名称不重要。但要注意顺序。即先有模式后有数据。

    当然。要正常使用H2,你须要把H2的驱动Jar放在Build Path下,假设你使用的是Maven,仅仅需加入依赖:

    	<dependency>
    			<groupId>com.h2database</groupId>
    			<artifactId>h2</artifactId>
    			<version>1.4.181</version>
    		</dependency>

    使用Spring时,一个头痛的问题是XML配置文件非常繁琐,尽管如今能够做到“自己主动装配和自己主动检測”。但还是推荐把不同用途的bean分开放置。

    比方这里的数据源,是数据相关的,能够分开放。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    	xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/jdbc
              http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
    
    	<jdbc:embedded-database id="dataSource" type="H2">
    		<jdbc:script location="classpath:schema.sql" />
    		<jdbc:script location="classpath:data.sql" />
    	</jdbc:embedded-database>
    
    </beans>

    把上面的文件放在dataSourc-context.xml文件内(在类载入路径。文件名称不重要),最后仅仅需在主XML里import进来就能够了。

    <import resource="classpath:dataSource-context.xml"/>

    主XML就能够使用它来装配模板了。

      <bean id="jdbcTemplate"
         class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="dataSource" />
      </bean>

    在自己定义的Dao里面注入这个jdbcTemplate就能够訪问数据库了。


    另外。Spring基于模板和回调,提供了 Dao支持类,能够将自己的Dao继承它。所以整个訪问数据库的步骤例如以下:


    官方对JdbcDaoSupport的说法是:

    Convenient super class for JDBC-based data access objects. Requires a DataSource to be set, providings a JdbcTemplate based on it to subclasses through the getJdbcTemplate() method。

    是的,它有非常多子类,相应不同的模板。


    你能够在想,使用它的优点是什么呢?

    之前我们每一个Dao都得有个JdbcTemplate对象。并有相应的setter方法。假设有非常多Dao。反复同样的代码有点不必要。假设继承了JdbcDaoSupport的某一个子类。你能够直接使用 getJdbcTemplate()。

    怎样使用呢?

    1。 让你的Dao继承JdbcDaoSupport的某一个子类

    2, 參数注入datasource,(该属性是jdbcDaoSupport的。name是datasoruce)

    3, 代码里能够使用getJdbcTemplate()获取模板。


    可是。随着代码规模的增大,使用JDBC的方式还是有点难以维护。这时一般选用ORM框架应对这一挑战。




  • 相关阅读:
    [LeetCode]题解(python):089-Gray Code
    [LeetCode]题解(python):088-Merge Sorted Array
    [LeetCode]题解(python):086-Partition List
    [LeetCode]题解(python):083-Remove Duplicates from Sorted List
    [LeetCode]题解(python):082-Remove Duplicates from Sorted List II
    [LeetCode]题解(python):081-Search in Rotated Sorted Array II
    [LeetCode]题解(python):080-Remove Duplicates from Sorted Array II
    [LeetCode]题解(python):079-Word Search
    [LeetCode]题解(python):078-Subsets
    软件开发冲刺5
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7010653.html
Copyright © 2020-2023  润新知