📅  最后修改于: 2023-12-03 15:05:16.112000             🧑  作者: Mango
Spring JDBC是Spring框架的一部分,它为JDBC操作提供了简单和高效的方式。JdbcTemplate类是Spring JDBC的核心类之一,它简化了JDBC的使用,减少了模板代码的量。
首先,需要在Spring配置文件中配置数据源和JdbcTemplate实例:
<bean id="dataSource"
class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
在代码中,可以通过使用JdbcTemplate实例来执行JDBC方法。例如,以下是一个查询方法的例子:
public List<Employee> findAllEmployees() {
return jdbcTemplate.query(
"SELECT id, name, age, salary FROM employees",
(rs, rowNum) -> {
Employee employee = new Employee();
employee.setId(rs.getLong("id"));
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
employee.setSalary(rs.getDouble("salary"));
return employee;
});
}
以上代码使用query方法执行SQL查询,获取结果集,将结果集通过Lambda表达式转换为Java对象列表。Lambda表达式包含一个ResultSetExtractor函数式接口的实现, 在该实现中,将ResultSet中的数据提取出来,组成Employee对象,并进行返回。JdbcTemplate自动处理ResultSet对象,使开发人员只需关注业务逻辑。
JdbcTemplate类提供多种JDBC操作方法,如:
public int insertEmployee(Employee employee) {
String sql = "INSERT INTO employees (name, age, salary) VALUES (?, ?, ?)";
return jdbcTemplate.update(sql, employee.getName(), employee.getAge(), employee.getSalary());
}
public int[] batchInsertEmployees(List<Employee> employees) {
String sql = "INSERT INTO employees (name, age, salary) VALUES (?, ?, ?)";
Object[][] employeesParams = new Object[employees.size()][];
for (int i = 0; i < employees.size(); i++) {
Employee employee = employees.get(i);
employeesParams[i] = new Object[] { employee.getName(), employee.getAge(), employee.getSalary() };
}
return jdbcTemplate.batchUpdate(sql, employeesParams);
}
public void callStoredProcedure(String spName, SqlParameter... sqlParameters) {
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName(spName);
simpleJdbcCall.execute(sqlParameters);
}
public List<Employee> findEmployeesByName(String name) {
String sql = "SELECT id, name, age, salary FROM employees WHERE name = ?";
return jdbcTemplate.query(sql, new Object[]{ name }, new BeanPropertyRowMapper<>(Employee.class));
}
public int countEmployees() {
String sql = "SELECT COUNT(*) FROM employees";
return jdbcTemplate.queryForObject(sql, Integer.class);
}
通过JdbcTemplate类,开发人员可以简化JDBC操作,减少代码量,提高开发效率。它提供了异常处理、自动资源管理、命名参数和模板、自动映射查询结果等特性,这使得开发人员专注于业务逻辑而不必担心JDBC细节。