本文概述
- JDBC API的问题
- Spring JdbcTemplate的优势
- Spring Jdbc方法
- JdbcTemplate类
- Spring JDBC模板
- 了解对Spring JDBC模板的需求
- Spring JDBC模板的优势
- JDBC模板类
- JdbcTemplate类的示例
JDBC API的问题JDBC API的问题如下:
- 在执行查询之前和之后, 我们需要编写大量代码, 例如创建连接, 语句, 关闭结果集, 连接等。
- 我们需要对数据库逻辑执行异常处理代码。
- 我们需要处理交易。
- 将所有这些代码从一个数据库逻辑重复到另一个数据库逻辑是一项耗时的任务。
Spring Jdbc方法Spring框架提供了以下用于JDBC数据库访问的方法:
- Jdbc模板
- NamedParameterJdbcTemplate
- SimpleJdbcTemplate
- SimpleJdbcInsert和SimpleJdbcCall
它通过org.springframework.dao包中定义的异常类来处理异常并提供有用的异常消息。
我们可以借助JdbcTemplate类来执行所有数据库操作, 例如从数据库中插入, 更新, 删除和检索数据。
让我们看看spring JdbcTemplate类的方法。
编号 | 方法 | 描述 |
---|---|---|
1) | public int update(String query) | 用于插入, 更新和删除记录。 |
2) | public int update(String query, Object … args) | 用于通过使用给定参数的PreparedStatement插入, 更新和删除记录。 |
3) | public void execute(String query) | 用于执行DDL查询。 |
4) | public T execute(String sql, PreparedStatementCallback action) | 通过使用PreparedStatement回调执行查询。 |
5) | public T query(String sql, ResultSetExtractor rse) | 用于使用ResultSetExtractor获取记录。 |
6) | public List query(String sql, RowMapper rse) | 用于使用RowMapper提取记录。 |
我们假设你已经在Oracle10g数据库中创建了下表。
create table employee(
id number(10), name varchar2(100), salary number(10)
);
Employee.java
此类包含3个带有构造函数, setter和getter的属性。
package com.srcmini;
public class Employee {
private int id;
private String name;
private float salary;
//no-arg and parameterized constructors
//getters and setters
}
EmployeeDao.java
它包含一个属性jdbcTemplate和三个方法saveEmployee(), updateEmployee和deleteEmployee()。
package com.srcmini;
import org.springframework.jdbc.core.JdbcTemplate;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}public int saveEmployee(Employee e){
String query="insert into employee values(
'"+e.getId()+"', '"+e.getName()+"', '"+e.getSalary()+"')";
return jdbcTemplate.update(query);
}
public int updateEmployee(Employee e){
String query="update employee set
name='"+e.getName()+"', salary='"+e.getSalary()+"' where id='"+e.getId()+"' ";
return jdbcTemplate.update(query);
}
public int deleteEmployee(Employee e){
String query="delete from employee where id='"+e.getId()+"' ";
return jdbcTemplate.update(query);
}}
applicationContext.xml
DriverManagerDataSource用于包含有关数据库的信息, 例如驱动程序类名称, 连接URL, 用户名和密码。
DriverManagerDataSource类型的JdbcTemplate类中有一个名为datasource的属性。因此, 我们需要在JdbcTemplate类中为datasource属性提供对DriverManagerDataSource对象的引用。
在这里, 我们在EmployeeDao类中使用JdbcTemplate对象, 因此我们通过setter方法传递它, 但是你也可以使用构造函数。
<
?xml version="1.0" encoding="UTF-8"?>
<
beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<
bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<
property name="driverClassName" value="http://www.srcmini.com/oracle.jdbc.driver.OracleDriver" />
<
property name="url" value="http://www.srcmini.com/jdbc:oracle:thin:@localhost:1521:xe" />
<
property name="username" value="http://www.srcmini.com/system" />
<
property name="password" value="http://www.srcmini.com/oracle" />
<
/bean>
<
bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<
property name="dataSource" ref="ds">
<
/property>
<
/bean>
<
bean id="edao" class="com.srcmini.EmployeeDao">
<
property name="jdbcTemplate" ref="jdbcTemplate">
<
/property>
<
/bean>
<
/beans>
Test.java
此类从applicationContext.xml文件获取Bean, 然后调用saveEmployee()方法。你也可以通过取消注释代码来调用updateEmployee()和deleteEmployee()方法。
package com.srcmini;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
EmployeeDao dao=(EmployeeDao)ctx.getBean("edao");
int status=dao.saveEmployee(new Employee(102, "Amit", 35000));
System.out.println(status);
/*int status=dao.updateEmployee(new Employee(102, "Sonoo", 15000));
System.out.println(status);
*/ /*Employee e=new Employee();
e.setId(102);
int status=dao.deleteEmployee(e);
System.out.println(status);
*/
}}
下载此示例(使用MyEclipse IDE开发)
【Spring JdbcTemplate教程入门介绍】下载此示例(使用Eclipse IDE开发)
推荐阅读
- Spring NamedParameterJdbcTemplate示例
- Spring JdbcTemplate中的PreparedStatement示例
- ResultSetExtractor示例 | 通过Spring JdbcTemplate获取记录
- RowMapper示例 | 通过Spring JdbcTemplate获取记录
- 史上最全面!Spring AOP介绍和用法详细示例
- Spring AOP AspectJ注解示例
- Spring AOP AspectJ Xml配置示例
- Spring自动装配介绍和用法详解
- 如何在Spring中使用工厂方法进行依赖注入()