spring jdbc整合详解

小鱼儿 2022-03-25 00:42 335阅读 0赞

转载于:https://www.cnblogs.com/dooor/p/5331206.html
先上一段简单示例

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

Dao类

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

spring配置文件

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

测试类

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

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

  1. <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. public class PersonDao extends JdbcDaoSupport {
  2. public void savePerson(String sql){
  3. this.getJdbcTemplate().execute(sql);
  4. }
  5. }

spring配置文件改为

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

JdbcTemplate类结构图
在这里插入图片描述
执行过程
在这里插入图片描述
说明:

  1. 1、执行数据的操作的是JdbcTemplate
  2. 2、最根本的步骤就是要把dataSource注入到JdbcTemplate
  3. 3、通过给JdbcTemplate注入dataSource
  4.    a、采用构造器的形式注入
  5.    b、采用setter方法进行注入
  6. 4、可以给JdbcDaoSupport注入dataSource
  7. 5、可以给JdbcDaoSupport注入JdbcTemplate

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

1、使用JdbcTemplate

  1.    在Dao类中,用JdbcTemplate作为属性,用springJdbcTemplate进行注入。再对JdbcTemplate进行DataSource注入。
  2.    注:为什么只要对JdbcTemplate注入DataSource就可以了?

2、继承jdbcDaoSupport

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

3、继承JdbcTemplate

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

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

发表评论

表情:
评论列表 (有 0 条评论,335人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring整合JDBC

    Spring整合JDBC 什么是JDBC JDBC代表Java Database Connectivity,他是提供一组JavaApi来访问关系数据库的Java程序。这些A

    相关 Spring4 JDBC详解

    Spring4 JDBC详解 在之前的[Spring4 IOC详解][Spring4 IOC] 的文章中,没有讲使用外部属性的知识点。现在利用配置c