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.jar,org.springframework.jdbc.jar这两个包
1.创建数据访问对象接口文件 StudentDAO.java 的内容:
package com.spring.jdbcTemplate; import java.util.List; import javax.sql.DataSource;
/**
* 接口StudentDao,是用来封装查询方法
* @author Administrator
*
*/ public interface StudentDao { public void setDataSource(DataSource ds);
//添加记录
public void addStudent(String name,Integer age);
//通过Student ID查询学生记录,返回值为Student类型
public Student getStudentId(Integer id);
//删除数据通过Student ID
public void delectStudent(Integer id);
//更新数据
public void updata(Integer id,Integer age);
//查询所有数据
public List<Student> SelectAllStudent();
}
2.创建一个实体类Student:
package com.spring.jdbcTemplate;
public class Student {
/**
* 定义学生类
*/
private String name;
private Integer age;
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void printAdvice() {
System.out.println("name:" + name + ",age:" + age);
}
}
3.创建一个StudentMapper.java 文件,用来映射结果集(通常用于查询语句~)内容如下:
package com.spring.jdbcTemplate; import java.sql.ResultSet;
import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class StudentMapper implements RowMapper<Student>{
/**
* 接口RowMapper被JdbcTemplate 用来映射每一行结果集的数据
* JdbcTemplate 用来执行query方法或者调用存储过程 包含方法mapRow(ResultSet rs, int rowNum)
* 第一个参数表示获取到的结果集、第二个表示结果集中获取到的结果个数,通常用于查询语句~
*/
@Override
public Student mapRow(ResultSet rs, int row) throws SQLException {
Student student=new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
} }
4.下面是为定义的 DAO 接口 StudentDAO 的实现类文件 StudentJDBCTemplate.java,具体实现到数据库的操作:
package com.spring.jdbcTemplate; import java.util.List; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate;
/**
* 利用Spring 内置jdbc JdbcTemplate来实现StudentDao接口,连接数据库。
* @author Administrator
*
*/
public class StudentJdbcTemplate implements StudentDao {
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject; // 设置数据源
@Override
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
} // 添加学生数据
@Override
public void addStudent(String name, Integer age) {
String sql = "insert into Student(name,age) value(?,?)";
jdbcTemplateObject.update(sql, name, age);
System.out.println("Created Record Name = " + name + " Age = " + age);
return;
} // 查询学生
@Override
public Student getStudentId(Integer id) {
String sql = "select * from Student where id=?";
Student student = jdbcTemplateObject.queryForObject(sql, new Object[] { id }, new StudentMapper());
return student;
} // 删除学生记录
@Override
public void delectStudent(Integer id) {
String sql = "delete from Student where id=?";
jdbcTemplateObject.update(sql, id);
System.out.println("Deleted Record with ID = " + id);
return;
}
//更新数据
@Override
public void updata(Integer id,Integer age) {
String SQL = "update Student set age = ? where id = ?";
jdbcTemplateObject.update(SQL, age, id);
System.out.println("Updated Record with ID = " + id);
return;
}
//查询所有数据
@Override
public List<Student> SelectAllStudent() {
String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
return students;
} }
5.建立一个 MainApp.java 文件,用于测试。内容如下:
package com.spring.jdbcTemplate; import java.util.List; import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate; public class MainApp { public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/bean.xml");
//获取getBean("StudentJdbcTemplate")对象,调用其方法操作数据库
StudentJdbcTemplate jdbcTemplate = (StudentJdbcTemplate)applicationContext.getBean("StudentJdbcTemplate"); //插入数据
/* jdbcTemplate.addStudent("张三", 23);
jdbcTemplate.addStudent("李四", 24);
jdbcTemplate.addStudent("王五", 25);
jdbcTemplate.addStudent("赵六", 26);
jdbcTemplate.addStudent("田七", 27);*/ //查询所有数据
/* List<Student> list=jdbcTemplate.SelectAllStudent();
for(Student student:list){
System.out.println(student.getId()+student.getName()+student.getAge());
}*/
//查询单条记录
/* Student student=jdbcTemplate.getStudentId(1);
System.out.println(student.getId()+student.getName()+student.getAge());*/ //删除单条记录
/*jdbcTemplate.delectStudent(2);*/ //更新数据
jdbcTemplate.updata(3, 45);
} }
测试结果:

Spring JDBC 框架使用JdbcTemplate 类的一个实例的更多相关文章
- Spring Jdbc 框架整合的第一天
Spring Jdbc的概述 它是Spring框架的持久层子框架.用于对数据库的操作 什么是数据库的操作? 答:对数据库的增删改查 在使用Spring Jdbc框架,要用到一个类---->J ...
- ref:Spring JDBC框架
ref:https://blog.csdn.net/u011054333/article/details/54772491 Spring JDBC简介 先来看看一个JDBC的例子.我们可以看到为了执行 ...
- 11.Spring——JDBC框架
1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...
- Spring JDBC 框架 简介
在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等. 但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常 ...
- 【sping揭秘】3、Spring容器中bean默认是保持一个实例
Spring容器中bean默认是保持一个实例 这里做一个测试,基础代码 package cn.cutter.start.provider; import org.springframework.con ...
- java中检测-在运行时指定对象是否是特定类的一个实例---关键字 instanceof
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. if(requ ...
- spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作
package cn.itcast.spring.jdbc; import java.util.List; import org.springframework.jdbc.core.support.J ...
- spring jdbc框架
spring+jdbc 1.jdbc编程的特点: 模板编程 固定代码+动态的参数 spring产生dataSource JdbcTemplate{//模板编程 private DataSource d ...
- C#调用C++导出类的一个实例
一直认为带导出类dll的只有VC自己可以调用,其它编程语言无法调用,今天看到一篇文章才知道自己错了.https://blog.csdn.net/huiyouyongdeyu2011/article/d ...
随机推荐
- I. Same String
有两个只由小写字母组成的长度为n的字符串s1,s2和m组字母对应关系,每一组关系由两个字母c1和c2组成,代表c1可以直接变成c2,你需要判断s1是否可以通过这m组关系转换为s2. 输入格式 第一行输 ...
- Unity ML-agents 一、初次尝试
前言 曾在高二寒假的时候,跟表哥在外面玩,当时他问我有没有想过以后要做什么,我愣了一下,回答不上来.是的,从没想过以后要做什么,只是一直在完成学校.老师安排的任务,于是那之后半年,我一直在思考,大学要 ...
- JS:document.documentElement对象的
document.documentElement.clientWidth 获取浏览器窗口文档显示区域的宽度,不包括滚动条. document.documentElement.clientHeight ...
- 数值计算方法实验之Lagrange 多项式插值 (Python 代码)
一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...
- fasttext 和pysparnn的安装
- php微信公众号开发curl返回false
最近刚接触温馨公众号开发,在自定义菜单用curl请求时,碰到了一个小坑.一时半会没有解决,便去问度娘,谷歌.发现都是说$url里面有空格导致的失败. 然而我的并没有空格,一直返回false,这个时候我 ...
- 记使用STL与unique_ptr造成的事故-段子类比
最近由于业务需要在写内存池子时遇到了一个doule-free的问题.折腾半个晚上以为自己的眼睛花了.开始以为是编译器有问题(我也是够自信的),但是在windows下使用qtcreator vs2017 ...
- 敏捷与OKR实践(如何让OKR与敏捷计划共存)
僵化的详细长期计划(根据消耗的预算跟踪进度)正在敏捷组织中迅速成为对过去的褪色怀旧记忆,这由预测和非静态路线图代替.定期在这些可视化文件前聚会,您将能够学习.共享并触发重要的对话,解决依赖性并邀请服务 ...
- 如何在 Windows Event Log 中查找系统重启的信息
事件ID:12 事件ID 13: 事件ID 41: 事件ID 6008: 事件ID 1074:事件ID 1074: ========================================== ...
- c++ 更新 performance counter 数据,错误码 87
ERROR_INVALID_PARAMETER 87 (0x57) The parameter is incorrect. 很可能是该送 ULONG 的送了 ULONGLONG,vise versa