SpringJDBC简介
在本教程中,我们将了解JDBC模块是什么,希望我们在阅读完之后能够找到用例。
现在,让我们创建一个表示员工的非常简单的表。
CREATE TABLE Employee ( ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, DEPARTMENT VARCHAR(20) NOT NULL, PRIMARY KEY(ID) );
springjdbc框架为我们节省了大量的时间和精力,因为它处理诸如初始化连接、执行SQL查询、关闭连接等低级细节。在这种情况下,我们可能会想知道还有什么事情需要我们去做。好吧,我们必须定义连接参数并指定要执行的SQL查询,最后,我们必须在从数据库中获取数据时为所有迭代编写逻辑。
有许多方法和已经编写的类可以帮助我们实现JDBC。在我们的例子中,我们将坚持使用经典的JDBC模板类。它将管理所有的数据库通信。
关于JDBC模板类,我们需要了解什么?简而言之,它捕捉JDBC异常,执行SQL查询和update语句。还需要注意的是,JDBC模板类的所有实例都是线程安全的,这意味着我们可以配置一个JDBC模板类的实例,并将其作为共享引用安全地注入到多个dao中。
如果我们不熟悉DAO是什么,可以查看我关于这个主题的文章。
现在是有趣的部分。让我们看看如何实现所有的理论。我们将使用教程开头所示的表。
EmployeeDAO.java
package com.tutorialnet;
import java.util.List;
import javax.sql.DataSource;
public interface EmployeeDAO {
public void setDataSource(DataSource ds);
public void create(String name, Integer age, String department);
public Employee getEmployee(Integer id);
public List<Employee> getEmployees();
public void delete(Integer id);
public void update(Integer id, Integer age, String department);
}
这是我们的DAO接口。它包含所有的方法声明,并且所有这些方法声明都与CRUD功能有关。
setDataSource():建立数据库连接。
create():将用于在数据库中新建职员条目。
getEmployee():根据提供的ID返回职员。
getEmployees():将返回数据库中所有员工的列表。
delete():根据提供的ID删除职员。
update():更新已有员工。
雇员.java
package com.theitroad;
public class Employee {
private Integer id;
private String name;
private Integer age;
private String department;
public void setId(Integer id) {
this.id = id;
}
public void setAge(Integer age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setDepartment(String department) {
this.department = department;
}
public Integer getId() {
return this.id;
}
public Integer getAge() {
return this.age;
}
public String getName() {
return this.name;
}
public String getDepartment() {
return this.department;
}
}
EmployeeMapper.java
package com.theitroad;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class EmployeeMapper implements RowMapper<Employee> {
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
employee.setDepartment(rs.getString("department"));
return employee;
}
}
EmployeeJDBCTemplate.java
package com.theitroad;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
public class EmployeeJDBCTemplate implements EmployeeDAO {
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
}
public void create(String name, Integer age, String department) {
String SQL = "insert into Employee (name, age, department) values (?, ?)";
jdbcTemplateObject.update( SQL, name, age, department);
}
public Employee getEmployee(Integer id) {
String SQL = "select * from Employee where id = ?";
Employee employee = jdbcTemplateObject.queryForObject(SQL,
new Object[]{id}, new EmployeeMapper());
return employee;
}
public List<Employee> getEmployees() {
String SQL = "select * from Employee";
List <Employee> employees = jdbcTemplateObject.query(SQL, new EmployeeMapper());
return employees;
}
public void delete(Integer id) {
String SQL = "delete from Employee where id = ?";
jdbcTemplateObject.update(SQL, id);
System.out.println("Deleted Record with ID = " + id );
}
public void update(Integer id, Integer age){
String SQL = "update Employee set age = ? where id = ?";
jdbcTemplateObject.update(SQL, age, id);
}
}
这个JDBC类定义了我们上面定义的接口中的所有方法声明。
主类
package com.theitroad;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.EmployeeJDBCTemplate;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
EmployeeJDBCTemplate employeeJDBCTemplate = (EmployeeJDBCTemplate)context.getBean("employeeJDBCTemplate");
System.out.println("Creating records..." );
employeeJDBCTemplate.create("Hyman", 11, "Software engineering");
employeeJDBCTemplate.create("Joanna", 2, "Finance");
employeeJDBCTemplate.create("Derek", 15, "Hardware engineering");
System.out.println("Listing employee entries from the database..");
List<Employee> employees = employeeJDBCTemplate.getEmployees();
for (Employee employee : employees) {
System.out.print("ID: " + employee.getId());
System.out.print("Name: " + employee.getName());
System.out.println("Age: " + employee.getAge());
System.out.println("Age: " + employee.getDepartment());
}
System.out.println("Updating a record with an id of 1");
employeeJDBCTemplate.update(1, 29, "Marketing");
System.out.println("Displaying information about record with an id of 1");
Employee employee = employeeJDBCTemplate.getEmployee(1);
System.out.print("ID: " + employee.getId());
System.out.print("Name : " + employee.getName() );
System.out.println("Age : " + employee.getAge());
ystem.out.println("Department : " + employee.getDepartment());
}
}
这里我们调用接口中定义的所有方法。
的配置文件 **豆.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-3.0.xsd ">
<bean id="dataSource"
class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name = "driverClassName" value = "com.mysql.jdbc.Driver"
<property name = "url" value = "jdbc:mysql://localhost:3306/DEMO"
<property name = "username" value = "root"
<property name = "password" value = "admin123"
</bean>
<bean id = "employeeJDBCTemplate"
class = "com.theitroad.EmployeeJDBCTemplate">
<property name = "dataSource" ref = "dataSource"
</bean>
</beans>

