在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等。但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。
所以当从数据库中获取数据时,你所做的是定义连接参数,指定要执行的 SQL 语句,每次迭代完成所需的工作。
Spring JDBC 提供几种方法和数据库中相应的不同的类与接口。我将给出使用 JdbcTemplate 类框架的经典和最受欢迎的方法。这是管理所有数据库通信和异常处理的中央框架类。
JdbcTemplate 类执行 SQL 查询、更新语句和存储过程调用,执行迭代结果集和提取返回参数值。它也捕获 JDBC 异常并转换它们到 org.springframework.dao 包中定义的通用类、更多的信息、异常层次结构。
JdbcTemplate 类的实例是线程安全配置的。所以你可以配置 JdbcTemplate 的单个实例,然后将这个共享的引用安全地注入到多个 DAOs 中。
使用 JdbcTemplate 类时常见的做法是在你的 Spring 配置文件中配置数据源,然后共享数据源 bean 依赖注入到 DAO 类中,并在数据源的设值函数中创建了 JdbcTemplate。
环境:导入: mysql-connector-java.jar,org.springframework.jdbc.jar这两个包
1 package com.spring.jdbcTemplate; 2 3 import java.util.List; 4 5 import javax.sql.DataSource; 6 /** 7 * 接口StudentDao,是用来封装查询方法 8 * @author Administrator 9 * 10 */ 11 12 public interface StudentDao { 13 14 public void setDataSource(DataSource ds); 15 //添加记录 16 public void addStudent(String name,Integer age); 17 //通过Student ID查询学生记录,返回值为Student类型 18 public Student getStudentId(Integer id); 19 //删除数据通过Student ID 20 public void delectStudent(Integer id); 21 //更新数据 22 public void updata(Integer id,Integer age); 23 //查询所有数据 24 public List<Student> SelectAllStudent(); 25 }
1 package com.spring.jdbcTemplate; 2 3 public class Student { 4 /** 5 * 定义学生类 6 */ 7 private String name; 8 private Integer age; 9 private Integer id; 10 11 public Integer getId() { 12 return id; 13 } 14 15 public void setId(Integer id) { 16 this.id = id; 17 } 18 19 public String getName() { 20 return name; 21 } 22 23 public void setName(String name) { 24 this.name = name; 25 } 26 27 public Integer getAge() { 28 return age; 29 } 30 31 public void setAge(Integer age) { 32 this.age = age; 33 } 34 35 public void printAdvice() { 36 System.out.println("name:" + name + ",age:" + age); 37 38 } 39 40 }
1 package com.spring.jdbcTemplate; 2 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 6 import org.springframework.jdbc.core.RowMapper; 7 8 public class StudentMapper implements RowMapper<Student>{ 9 /** 10 * 接口RowMapper被JdbcTemplate 用来映射每一行结果集的数据 11 * JdbcTemplate 用来执行query方法或者调用存储过程 包含方法mapRow(ResultSet rs, int rowNum) 12 * 第一个参数表示获取到的结果集、第二个表示结果集中获取到的结果个数,通常用于查询语句~ 13 */ 14 @Override 15 public Student mapRow(ResultSet rs, int row) throws SQLException { 16 Student student=new Student(); 17 student.setId(rs.getInt("id")); 18 student.setName(rs.getString("name")); 19 student.setAge(rs.getInt("age")); 20 return student; 21 } 22 23 }
1 package com.spring.jdbcTemplate; 2 3 import java.util.List; 4 5 import javax.sql.DataSource; 6 7 import org.springframework.jdbc.core.JdbcTemplate; 8 /** 9 * 利用Spring 内置jdbc JdbcTemplate来实现StudentDao接口,连接数据库。 10 * @author Administrator 11 * 12 */ 13 public class StudentJdbcTemplate implements StudentDao { 14 private DataSource dataSource; 15 private JdbcTemplate jdbcTemplateObject; 16 17 // 设置数据源 18 @Override 19 public void setDataSource(DataSource dataSource) { 20 this.dataSource = dataSource; 21 this.jdbcTemplateObject = new JdbcTemplate(dataSource); 22 } 23 24 // 添加学生数据 25 @Override 26 public void addStudent(String name, Integer age) { 27 String sql = "insert into Student(name,age) value(?,?)"; 28 jdbcTemplateObject.update(sql, name, age); 29 System.out.println("Created Record Name = " + name + " Age = " + age); 30 return; 31 } 32 33 // 查询学生 34 @Override 35 public Student getStudentId(Integer id) { 36 String sql = "select * from Student where id=?"; 37 Student student = jdbcTemplateObject.queryForObject(sql, new Object[] { id }, new StudentMapper()); 38 return student; 39 } 40 41 // 删除学生记录 42 @Override 43 public void delectStudent(Integer id) { 44 String sql = "delete from Student where id=?"; 45 jdbcTemplateObject.update(sql, id); 46 System.out.println("Deleted Record with ID = " + id); 47 return; 48 } 49 //更新数据 50 @Override 51 public void updata(Integer id,Integer age) { 52 String SQL = "update Student set age = ? where id = ?"; 53 jdbcTemplateObject.update(SQL, age, id); 54 System.out.println("Updated Record with ID = " + id); 55 return; 56 } 57 //查询所有数据 58 @Override 59 public List<Student> SelectAllStudent() { 60 String SQL = "select * from Student"; 61 List<Student> students = jdbcTemplateObject.query(SQL, new StudentMapper()); 62 return students; 63 } 64 65 66 }
1 package com.spring.jdbcTemplate; 2 3 import java.util.List; 4 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 import org.springframework.jdbc.core.JdbcTemplate; 7 8 public class MainApp { 9 10 public static void main(String[] args) { 11 ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/bean.xml"); 12 //获取getBean("StudentJdbcTemplate")对象,调用其方法操作数据库 13 StudentJdbcTemplate jdbcTemplate = (StudentJdbcTemplate)applicationContext.getBean("StudentJdbcTemplate"); 14 15 //插入数据 16 /* jdbcTemplate.addStudent("张三", 23); 17 jdbcTemplate.addStudent("李四", 24); 18 jdbcTemplate.addStudent("王五", 25); 19 jdbcTemplate.addStudent("赵六", 26); 20 jdbcTemplate.addStudent("田七", 27);*/ 21 22 //查询所有数据 23 /* List<Student> list=jdbcTemplate.SelectAllStudent(); 24 for(Student student:list){ 25 System.out.println(student.getId()+student.getName()+student.getAge()); 26 }*/ 27 //查询单条记录 28 /* Student student=jdbcTemplate.getStudentId(1); 29 System.out.println(student.getId()+student.getName()+student.getAge());*/ 30 31 //删除单条记录 32 /*jdbcTemplate.delectStudent(2);*/ 33 34 //更新数据 35 jdbcTemplate.updata(3, 45); 36 } 37 38 }

Spring JDBC 框架使用JdbcTemplate 类的一个实例
原文:https://www.cnblogs.com/ysource/p/12869779.html