欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解spring与jdbc整合操作

程序员文章站 2024-03-12 19:01:32
先上一段简单示例 public class mytemplate { private datasource datasource; publi...

先上一段简单示例

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类

public class persondao extends mytemplate{

  public void saveperson() throws exception{
    this.insert("insert into person(pid,pname) values(3,'aaa')");
  }
}

spring配置文件

 <!-- 
    引入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>

测试类

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类去掉)

public class persondao extends jdbcdaosupport {
  public void saveperson(string sql){
    this.getjdbctemplate().execute(sql);
  }
}

spring配置文件改为

<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实际完成了创建对象和装配的工作,它会自动的对应起来。

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