详解spring与jdbc整合操作
先上一段简单示例
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实际完成了创建对象和装配的工作,它会自动的对应起来。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。