📜  Spring JdbcTemplate教程

📅  最后修改于: 2020-12-04 07:56:22             🧑  作者: Mango

Spring JdbcTemplate教程

Spring JdbcTemplate是一种强大的机制,可以连接到数据库并执行SQL查询。它在内部使用JDBC API,但消除了JDBC API的许多问题。

JDBC API的问题

JDBC API的问题如下:

  • 在执行查询之前和之后,我们需要编写大量代码,例如创建连接,语句,关闭结果集,连接等。
  • 我们需要在数据库逻辑上执行异常处理代码。
  • 我们需要处理交易。
  • 将所有这些代码从一个数据库逻辑重复到另一个数据库逻辑是一项耗时的任务。

Spring JdbcTemplate的优势

Spring JdbcTemplate消除了上述所有JDBC API问题。它提供了直接编写查询的方法,因此节省了大量工作和时间。

Spring Jdbc方法

Spring框架提供了以下用于JDBC数据库访问的方法:

  • Jdbc模板
  • NamedParameterJdbcTemplate
  • SimpleJdbcTemplate
  • SimpleJdbcInsert和SimpleJdbcCall

JdbcTemplate类

它是Spring JDBC支持类的中心类。它负责创建和释放资源,例如创建和关闭连接对象等。因此,如果您忘记关闭连接,则不会导致任何问题。

它通过org.springframework.dao包中定义的异常类来处理异常并提供有用的异常消息。

我们可以借助JdbcTemplate类来执行所有数据库操作,例如从数据库中插入,更新,删除和检索数据。

让我们看看spring JdbcTemplate类的方法。

No. Method Description
1) public int update(String query) is used to insert, update and delete records.
2) public int update(String query,Object… args) is used to insert, update and delete records using PreparedStatement using given arguments.
3) public void execute(String query) is used to execute DDL query.
4) public T execute(String sql, PreparedStatementCallback action) executes the query by using PreparedStatement callback.
5) public T query(String sql, ResultSetExtractor rse) is used to fetch records using ResultSetExtractor.
6) public List query(String sql, RowMapper rse) is used to fetch records using RowMapper.

Spring JdbcTemplate的示例

我们假设您已经在Oracle10g数据库中创建了下表。

create table employee(
id number(10),
name varchar2(100),
salary number(10)
);

此类包含3个带有构造函数,setter和getter的属性。

package com.javatpoint;

public class Employee {
private int id;
private String name;
private float salary;
//no-arg and parameterized constructors
//getters and setters
}

它包含一个属性jdbcTemplate和三个方法saveEmployee(),updateEmployee和deleteEmployee()。

package com.javatpoint;
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);
}

}

DriverManagerDataSource用于包含有关数据库的信息,例如驱动程序类名称,连接URL,用户名和密码。

DriverManagerDataSource类型的JdbcTemplate类中有一个名为datasource的属性。因此,我们需要在JdbcTemplate类中为datasource属性提供对DriverManagerDataSource对象的引用。

在这里,我们在EmployeeDao类中使用JdbcTemplate对象,因此我们通过setter方法传递它,但是您也可以使用构造函数。




















此类从applicationContext.xml文件获取Bean,然后调用saveEmployee()方法。您也可以通过取消注释代码来调用updateEmployee()和deleteEmployee()方法。

package com.javatpoint;

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);*/
    
}

}