Spring JDBC 框架使用JdbcTemplate 类的一个实例

JDBC 框架概述

在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等。但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。

所以当从数据库中获取数据时,你所做的是定义连接参数,指定要执行的 SQL 语句,每次迭代完成所需的工作。

Spring JDBC 提供几种方法和数据库中相应的不同的类与接口。我将给出使用 JdbcTemplate 类框架的经典和最受欢迎的方法。这是管理所有数据库通信和异常处理的*框架类。

JdbcTemplate 类

JdbcTemplate 类执行 SQL 查询、更新语句和存储过程调用,执行迭代结果集和提取返回参数值。它也捕获 JDBC 异常并转换它们到 org.springframework.dao 包中定义的通用类、更多的信息、异常层次结构。

JdbcTemplate 类的实例是线程安全配置的。所以你可以配置 JdbcTemplate 的单个实例,然后将这个共享的引用安全地注入到多个 DAOs 中。

使用 JdbcTemplate 类时常见的做法是在你的 Spring 配置文件中配置数据源,然后共享数据源 bean 依赖注入到 DAO 类中,并在数据源的设值函数中创建了 JdbcTemplate。

环境:导入: mysql-connector-java.jarorg.springframework.jdbc.jar这两个包

 

1.创建数据访问对象接口文件 StudentDAO.java 的内容:

 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 }

 

2.创建一个实体类Student:

 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 }

 

3.创建一个StudentMapper.java 文件,用来映射结果集(通常用于查询语句~)内容如下:

 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 }

 

4.下面是为定义的 DAO 接口 StudentDAO 的实现类文件 StudentJDBCTemplate.java,具体实现到数据库的操作

 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 }

 

5.建立一个 MainApp.java 文件,用于测试。内容如下:

 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 类的一个实例

 

Spring JDBC 框架使用JdbcTemplate 类的一个实例

上一篇:Silverlight 雷达图和一种特殊泡泡画法


下一篇:mysql语句查询表结构信息