服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - JAVA教程 - 详解spring与jdbc整合操作

详解spring与jdbc整合操作

2020-06-27 13:11woonu JAVA教程

这篇文章主要为大家详细介绍了spring与jdbc整合操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

先上一段简单示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MyTemplate {
 
  private DataSource dataSource;
 
  public DataSource getDataSource() {
    return dataSource;
  }
 
  public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
  }
  
  public void insert(String sql) throws SQLException{
    Connection conn = this.dataSource.getConnection();
    Statement stmt = conn.createStatement();
    stmt.executeUpdate(sql);
    stmt.close();
    conn.close();
  }
}

Dao类

?
1
2
3
4
5
6
public class PersonDao extends MyTemplate{
 
  public void savePerson() throws Exception{
    this.insert("insert into person(pid,pname) values(3,'aaa')");
  }
}

spring配置文件

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!--
    引入properties配置文件
   -->
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <value>classpath:jdbc.properties</value>
    </property>
  </bean>
  
  <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
  </bean>
  
  <bean id="myTemplate" class="cn.qjc.jdbc.dao.MyTemplate">
    <!-- setter注入 -->
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
  </bean>
  
  <bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao">
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
  </bean>
 
</beans>

测试类

?
1
2
3
4
5
6
7
8
9
public class PersonDaoTest {
 
  @Test
  public void testPersonDao() throws Exception{
    ApplicationContext context = new ClassPathXmlApplicationContext("cn/qjc/jdbc/applicationContext.xml");
    PersonDao personDao = (PersonDao)context.getBean("personDao");
    personDao.savePerson();
  }
}

以上代码将DataSource注入给MyTemplate,再把DataSource注入给PersonDao,因为personDao继承MyTemplate,所以拥有Datasource属性。既然PersonDao继承MyTemplate,所以PersonDao类注入可以改为

<bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao" parent="myTemplate"></bean>

以上例子中MyTemplate类似于设计模式中的模板模式也叫模板方法模式,模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。

  模板模式 = 静态代码+动态变量

在spring中动态变量可以用注入的形式给予。这样的编程方式适合包装成模板。静态代码构成了模板,而动态变量则是需要传入的参数。

spring与jdbc结合核心类JdbcTemplate

  1、基于模板的设置(为什么可以设置成基于模板的形式)

  2、完成了资源的创建和释放的工作

  3、简化为我们对JDBC的操作

  4、完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行

  5、仅需要传递DataSource就可以把它实例化

  6、JdbcTemplate只需要创建一次

  7、JdbcTemplate是线程安全类

使用spring+jdbc修改上面例子(myTemplate类去掉)

?
1
2
3
4
5
public class PersonDao extends JdbcDaoSupport {
  public void savePerson(String sql){
    this.getJdbcTemplate().execute(sql);
  }
}

spring配置文件改为

?
1
2
3
4
5
<bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao">
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
</bean>

JdbcTemplate类结构图

详解spring与jdbc整合操作

执行过程

详解spring与jdbc整合操作

说明:

    1、执行数据的操作的是JdbcTemplate

    2、最根本的步骤就是要把dataSource注入到JdbcTemplate

    3、通过给JdbcTemplate注入dataSource

           a、采用构造器的形式注入

           b、采用setter方法进行注入

    4、可以给JdbcDaoSupport注入dataSource

    5、可以给JdbcDaoSupport注入JdbcTemplate

所以spring与jdbc整合有三种方法,但实际上核心类为JdbcTemplate

 1、使用JdbcTemplate

       在Dao类中,用JdbcTemplate作为属性,用spring对JdbcTemplate进行注入。再对JdbcTemplate进行DataSource注入。

       注:为什么只要对JdbcTemplate注入DataSource就可以了?

 2、继承jdbcDaoSupport

      在Dao类中,继承JdbcDaoSupport。因为JdbcDaoSupport已经有了JdbcTemplate的引用,所以只要继承JdbcDaoSupport就相当于有了JdbcTemplate属性。

 3、继承JdbcTemplate

spring还提供了其他ORM框架整合模式都差不多,完全可直接套用。

spring+hibernate

详解spring与jdbc整合操作

spring+Jdo

详解spring与jdbc整合操作

由此可看出spring IOC 和 DI 的强大,IOC和DI 完成了从接口到类的对应。利用spring容器程序员很容易的在客户端实现面向接口编程,而且很容易给接口装配,结构也可以设置的很灵活。因为接口是自己写的,类也是自己写的,配置文件也是自己写的。spring实际完成了创建对象和装配的工作,它会自动的对应起来。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

延伸 · 阅读

精彩推荐
  • JAVA教程java的arrays数组排序示例分享

    java的arrays数组排序示例分享

    排序算法,基本的高级语言都有一些提供。C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(不是Array)。用这些排序时,都可以写自己的排序规则 ...

    java教程网4492019-11-11
  • JAVA教程java线程并发semaphore类示例

    java线程并发semaphore类示例

    Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工...

    java教程网4872019-10-31
  • JAVA教程简介Java的Spring框架的体系结构以及安装配置

    简介Java的Spring框架的体系结构以及安装配置

    这篇文章主要介绍了Java的Spring框架的体系结构以及安装配置,Spring框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下 ...

    goldensun3592020-03-08
  • JAVA教程Java中Map的用法详解

    Java中Map的用法详解

    将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口 ...

    java教程网1572020-04-25
  • JAVA教程java开发微信分享到朋友圈功能

    java开发微信分享到朋友圈功能

    这篇文章主要为大家详细介绍了java开发微信发送给朋友和分享到朋友圈功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    u0132921602672020-05-28
  • JAVA教程java获取各种路径的基本方法

    java获取各种路径的基本方法

    这篇文章主要为大家详细介绍了java获取各种路径的基本方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    浪漫逆风1892020-06-22
  • JAVA教程Java中常用的6种排序算法详细分解

    Java中常用的6种排序算法详细分解

    这篇文章主要介绍了Java中常用的6种排序算法详细分解,着重说明每个算法的计算过程分解,是探究实现原理级的文章,对于深入理解这些算法有很大帮助,需要...

    junjie1342019-11-25
  • JAVA教程Java中使用BigDecimal进行浮点数运算

    Java中使用BigDecimal进行浮点数运算

    这篇文章主要介绍了Java中使用BigDecimal进行浮点数运算,需要的朋友可以参考下 ...

    Java教程网2422019-11-24