当前位置: 移动技术网 > IT编程>开发语言>Java > 详解spring与jdbc整合操作

详解spring与jdbc整合操作

2019年07月22日  | 移动技术网IT编程  | 我要评论

先上一段简单示例

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类结构图

执行过程

说明:

    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+jdo

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网