Spring – JDBC 模板
Java数据库连接 (JDBC) 是一种应用程序编程接口(API) ,它定义了客户端如何访问数据库。它是一种用于Java数据库连接的数据访问技术。它提供了查询和更新数据库中数据的方法,面向关系数据库。 JDBC 为使用SQL提供了一个自然的Java接口。需要 JDBC 来为应用程序开发提供“纯Java”解决方案。 JDBC API 使用 JDBC 驱动程序与数据库连接。
有 4 种类型的 JDBC 驱动程序:
- JDBC-ODBC 桥驱动程序
- 本机 API 驱动程序(部分是Java驱动程序)
- 网络协议驱动程序(完全Java驱动程序)
- 瘦驱动程序(完全Java驱动程序)
JDBC API 的优点如下:
- 自动从数据库中创建XML格式的数据。
- 它支持查询和存储过程。
- 几乎任何安装了ODBC驱动程序的数据库都可以访问。
JDBC API 的缺点如下:
- 在执行查询之前和之后编写了很多代码,例如创建连接、创建语句、关闭结果集、关闭连接等。
- 在数据库逻辑上编写异常处理代码。
- 将这些代码从一个数据库逻辑重复到另一个数据库逻辑非常耗时。
Spring JDBC-Template消除了JDBC API的这些问题。它提供了直接编写查询的方法,可以节省大量时间和精力。
使用 JDBC 模板进行数据访问
有许多选项可用于选择一种方法来构成JDBC数据库访问的基础。 Spring 框架为JDBC数据库访问提供了以下方法:
- Jdbc模板
- 命名参数JdbcTemplate
- SimpleJdbc模板
- SimpleJdbcInsert 和 SimpleJdbcCall
JDBC 模板
JdbcTemplate是一个 JDBC核心包中的中心类,可简化JDBC的使用并有助于避免常见错误。它在内部使用JDBC API并消除了JDBC API 的许多问题。它执行 SQL 查询或更新,在 ResultSets 上启动迭代并捕获JDBC异常并将它们转换为泛型。它执行核心JDBC工作流,让应用程序代码提供 SQL 并提取结果。它在org.springframework.dao包中定义的异常类的帮助下处理异常并提供信息性异常消息。
spring JdbcTemplate 类的常用方法。Methods Description public int update(String query) Used to insert, update and delete records. public int update(String query, Object… args) Used to insert, update and delete records using PreparedStatement using given arguments. public T execute(String sql, PreparedStatementCallback action) Executes the query by using PreparedStatementCallback. public void execute(String query) Used to execute DDL query. public T query(String sql, ResultSetExtractor result) Used to fetch records using ResultSetExtractor.
JDBC 模板查询
使用JdbcTemplate计算存储在数据库中的学生的基本查询。
int result = jdbcTemplate.queryForObject(
"SELECT COUNT(*) FROM STUDENT", Integer.class);
这是一个简单的INSERT :
public int addStudent(int id)
{
return jdbcTemplate.update("INSERT INTO STUDENT VALUES (?, ?, ?)", id, "megan", "India");
}
提供参数的标准语法是使用“?”字符。
实现: Spring JdbcTemplate
We start with some simple configurations of the data source. We’ll use a MySQL database
例子:
Java
/*package whatever //do not write package name here */
@Configuration
@ComponentScan("com.exploit.jdbc")
public class SpringJdbcConfig {
@Bean public DataSource mysqlDataSource()
{
DriverManagerDataSource dataSource
= new DriverManagerDataSource();
dataSource.setDriverClassName(
"com.mysql.jdbc.Driver");
dataSource.setUrl(
"jdbc:mysql://localhost:8800/springjdbc");
dataSource.setUsername("user");
dataSource.setPassword("password");
return dataSource;
}
}
Java
// Java Program to Illustrate Student Class
package com.exploit.org;
// Class
public class Student {
// Class data members
private Integer age;
private String name;
private Integer id;
// Constructor
public Student() {}
// Setters and Getters
public void setAge(Integer age) { this.age = age; }
public Integer getAge() { return age; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setId(Integer id) { this.id = id; }
public Integer getId() { return id; }
}
Java
// Java Program to Illustrate StudentDAO Class
package com.exploit.org;
// importing required classes
import java.util.List;
import javax.sql.DataSource;
// Class
public interface StudentDAO {
// Used to initialize database resources
// ie. connection
public void setDataSource(DataSource ds);
// Used to list down all the records
// from the Student table
public List listStudents();
}
XML
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
runtime
Java
// Java Program Illustrating Implementation
// of StudentDAO Class
package com.exploit.org;
// Importing required classes
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
// Class
// Implementing StudentDAO Class
public class StudentJDBCTemp implements StudentDAO {
// Class data members
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
// Method 1
public void setDataSource(DataSource dataSource)
{
// This keyword refers to current instance itself
this.dataSource = dataSource;
this.jdbcTemplateObject
= new JdbcTemplate(dataSource);
}
// Method 2
public List listStudents()
{
// Custom SQL query
String SQL = "select * from Student";
List students = jdbcTemplateObject.query(
SQL, new StudentMapper());
return students;
}
}
A.档案:学生。Java
Java
// Java Program to Illustrate Student Class
package com.exploit.org;
// Class
public class Student {
// Class data members
private Integer age;
private String name;
private Integer id;
// Constructor
public Student() {}
// Setters and Getters
public void setAge(Integer age) { this.age = age; }
public Integer getAge() { return age; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setId(Integer id) { this.id = id; }
public Integer getId() { return id; }
}
B.文件:StudentDAO。Java
下面是数据访问对象接口文件 StudentDAO 的实现。Java
例子:
Java
// Java Program to Illustrate StudentDAO Class
package com.exploit.org;
// importing required classes
import java.util.List;
import javax.sql.DataSource;
// Class
public interface StudentDAO {
// Used to initialize database resources
// ie. connection
public void setDataSource(DataSource ds);
// Used to list down all the records
// from the Student table
public List listStudents();
}
C.文件:Maven 依赖
pom.xml文件中使用了依赖关系。
例子:
XML
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
runtime
D.文件:StudentJDBCTemplate。Java
下面是实现类文件StudentJDBCTemplate。 Java为定义的DAO接口StudentDAO。
例子:
Java
// Java Program Illustrating Implementation
// of StudentDAO Class
package com.exploit.org;
// Importing required classes
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
// Class
// Implementing StudentDAO Class
public class StudentJDBCTemp implements StudentDAO {
// Class data members
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
// Method 1
public void setDataSource(DataSource dataSource)
{
// This keyword refers to current instance itself
this.dataSource = dataSource;
this.jdbcTemplateObject
= new JdbcTemplate(dataSource);
}
// Method 2
public List listStudents()
{
// Custom SQL query
String SQL = "select * from Student";
List students = jdbcTemplateObject.query(
SQL, new StudentMapper());
return students;
}
}