使用Spring的JdbcTemplate访问数据库 转

使用Spring的JdbcTemplate访问数据库


JdbcTemplate 模板可以简化JDBC操作,但是创建一个JdbcTemplate需要一个DataSource接口,在Spring中,当然就是向
JdbcTemplate中注入一个DataSource,然后通过JdbcTemplate来获取一个连接(Connection)。

假设SQL Server 2000数据库(新建的数据库名称为hibernate)中有一张person表,简单地记录了人员的详细信息。

使用Spring的IOC机制实现注入,配置XML代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="springDataSource"
  
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  
<property name="driverClassName"
   
value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
  
</property>
   <property name="url"

value="jdbc:microsoft:sqlserver://localhost:1433;databasename=hibernate">
  
</property>
   <property name="username"
value="sa"></property>
   <property name="password"
value="111111"></property>
</bean>

<bean id="jdbcTemplate"
  
class="org.springframework.jdbc.core.JdbcTemplate"
abstract="false"
   lazy-init="false" autowire="default"
dependency-check="default">
   <property
name="dataSource">
    <ref bean="springDataSource"
/>
   </property>
</bean>

</beans>

首先编写一个PersonDao,代码如下所示:

package org.shirdrn.jdbcTemplate.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import
java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import org.shirdrn.interf.IPersonDao;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import
org.springframework.jdbc.core.JdbcTemplate;

public class PersonDao implements IPersonDao {
private JdbcTemplate
jdbcTemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate)
{    // 注入JdbcTemplate
   this.jdbcTemplate =
jdbcTemplate;
}

public Connection getConnection(){   
// 获取Connection
   ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
  
DataSource springDataSource =
(DataSource)ctx.getBean("springDataSource");
   JdbcTemplate
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
  
/*jdbcTemplate.setDataSource(springDataSource);   
  
setJdbcTemplate(jdbcTemplate);     */
  
DataSource dataSource = jdbcTemplate.getDataSource();
  
Connection conn = null;
   try {
    conn =
dataSource.getConnection();
   } catch (SQLException e)
{
    e.printStackTrace();
   }
  
return conn;
}

public ResultSet queryPersons(String
sql){
   ResultSet rs = null;
   try
{
    Connection connection =
getConnection();
    Statement st =
connection.createStatement();
    rs =
st.executeQuery(sql);
   } catch (SQLException e)
{
    e.printStackTrace();
   }
  
return rs;
}
}

上面注释掉的两行代码:

jdbcTemplate.setDataSource(springDataSource);
  
setJdbcTemplate(jdbcTemplate);

其实是多余的,实际上Spring的IOC容器会自动检测并自动注入的。

建立测试主函数:

package org.shirdrn.main;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.shirdrn.jdbcTemplate.dao;

public class Main {

public static void main(String[] args){
   PersonDao pd = new
PersonDao();
   ResultSet rs = pd.queryPersons("select * from
person");
   int n = 0;
   try
{
    while(rs.next()){
    
n++;
     System.out.println("id    
= "+rs.getString("id"));
    
System.out.println("name   =
"+rs.getString("name"));
     System.out.println("gender
= "+rs.getString("gender"));
    
System.out.println("age    =
"+rs.getString("age"));
    
System.out.println("addr   =
"+rs.getString("addr"));
    
System.out.println("*******************************");
   
}
    System.out.println("数据库中共有记录 "+n+" 条");
  
} catch (SQLException e) {
   
e.printStackTrace();
   }
}
}

保证数据库表中有测试数据,(我的)运行程序结果输出如下所示:

id     = 222403199901011111
name   =
刘备
gender = 男       

age    = 21
addr   =
北京
*******************************
id     =
222403199901011112
name   = 张飞
gender =
男       
age    =
23
addr   =
天津
*******************************
id     =
222403199901011113
name   = 吕布
gender =
男       
age    =
22
addr   =
上海
*******************************
id     =
222403199901011114
name   = 貂蝉
gender =
女       
age    =
22
addr   =
大连
*******************************
id     =
222403199901011115
name   = 董卓
gender =
男       
age    =
20
addr   =
长春
*******************************
id     =
222403199901011116
name   = 关羽
gender =
男       
age    =
18
addr   =
北京
*******************************
id     =
222403199901011117
name   = 李逵
gender =
女       
age    =
19
addr   =
成都
*******************************
id     =
222403199901011118
name   = 宋江
gender =
女       
age    =
21
addr   =
青岛
*******************************
id     =
222403199901011119
name   = 林冲
gender =
男       
age    =
23
addr   =
杭州
*******************************
id     =
222403199901011120
name   = 高俅
gender =
男       
age    =
21
addr   =
敦化
*******************************
id     =
222403199901011121
name   = 晁盖
gender =
男       
age    =
20
addr   =
广州
*******************************
id     =
222403199901011122
name   = 王五
gender =
女       
age    =
18
addr   =
深圳
*******************************
id     =
222403199901011123
name   = 张三
gender =
男       
age    =
17
addr   =
兰州
*******************************
id     =
222403199901011124
name   = 李四
gender =
女       
age    =
25
addr   =
北京
*******************************
id     =
222403199901011125
name   = 赵启
gender =
男       
age    =
28
addr   = 香港
*******************************
数据库中共有记录 15

注 入的DataSource是org.springframework.jdbc.datasource.DriverManagerDataSource
的实例,然后在一个JdbcTemplate中注入已经获取到的DataSource,接着就可以建立与数据库的连接了。

时间: 2024-10-05 11:33:49

使用Spring的JdbcTemplate访问数据库 转的相关文章

企业分布式微服务云SpringCloud SpringBoot mybatis (七)Spring Boot中使用JdbcTemplate访问数据库

本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdb

Spring Boot整合JdbcTemplate访问数据库

这篇文章是介绍 Spring Boot整合JdbcTemplate,配置数据源来访问数据库. 在pom文件里添加 spring-boot-starter-jdbc 和mysql依赖. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency> <dep

Spring 定时器 定时访问数据库并发送邮件

我这里有两个案例的方法: 第一种:使用Spring quartz: 我这里使用的jar:spring-context-support.jar.quartz-1.6.5.jar ==============applicationContext.xml配置================= <!--定时器service-->    <bean id="timerTaskServices" class="com.gzbugu.service.TimerTaskSe

Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库

在第2章节中,我们介绍了如何通过Spring Boot来实现HTTP接口,以及围绕HTTP接口相关的单元测试.文档生成等实用技能.但是,这些内容还不足以帮助我们构建一个动态应用的服务端程序.不论我们是要做App.小程序.还是传统的Web站点,对于用户的信息.相关业务的内容,通常都需要对其进行存储,而不是像第2章节中那样,把用户信息存储在内存中(重启就丢了!). 对于信息的存储,现在已经有非常非常多的产品可以选择,其中不乏许多非常优秀的开源免费产品,比如:MySQL,Redis等.接下来,在第3章

使用JdbcTemplate操作数据库(二十九)

使用JdbcTemplate操作数据库 Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用. 举例:我们在创建User表,包含属性name.age,下面来编写数据访问对象和单元测试用例. 定义包含有插入.删除.查询的抽象接口UserService 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 public interface UserSe

Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL

在数据访问这章的第一篇文章<Spring中使用JdbcTemplate访问数据库> 中,我们已经介绍了如何使用Spring Boot中最基本的jdbc模块来实现关系型数据库的数据读写操作.那么结合Web开发一章的内容,我们就可以利用JDBC模块与Web模块的功能,综合着使用来完成一个适用于很多简单应用场景的后端应用了. 然而当我们有一定的开发经验之后,不难发现,在实际开发过程中,对数据库的操作大多可以归结为:"增删改查".就最为普遍的单表操作而言,除了表和字段不同外,语句几

Spring入门到精通&lt;三&gt;Spring访问数据库

Spring在数据访问方面提供了模板化和Dao支持类的提供,方便操作数据库. 一.Spring JDBC 1.配置数据源 DataSource 不管选择哪一种Spring Dao的支持方式,你都需要配置一个数据源的引用.配置方式有三种: ①.使用JNDI查找数据源: ②.使用数据源连接池:(dbcp c3p0 druid)  <!-- 配置数据源 -->      <bean id="dataSource" class="org.apache.commons

Spring+MyBatis实践—MyBatis数据库访问

关于spring整合mybatis的工程配置,已经在Spring+MyBatis实践—工程配置中全部详细列出.在此,记录一下几种通过MyBatis访问数据库的方式. 通过sqlSessionTemplate来进行数据库访问. 通过Dao接口来进行数据库访问. 使用@Select注解形式访问数据库 1.在spring框架中使用mybatis来进行数据操作配置,参考Spring+MyBatis实践—工程配置的spring-datasources.xml文件. 2.Demo1—通过sqlSession

Spring访问数据库(oracle)配置

陈科肇:http://blog.csdn.net/u013474104/article/details/44279309 ================ 1.spring 对数据库访问的支持 当我们开发持久层的时候,我们面临着多种选择,比如使用JDBC.Hibernate.java持久化API或其它持久化框架.幸好的是spring能够支持所有这些持久化机制. DAO(data access boject)数据访问对象,这个名字就很形象描述了DAO在应用程序中所扮演的角色.DAO提供了数据的读取