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 ...
随机推荐
- D - Harmonious Graph
题目大意: n个点,m条边,两个数l和r,如果l和r相连接,那么对于l和r之间值任意一个数都要和l相连.问达到这一目的需要添加的边的最小数量. 题解: 我们首先要找到当前连通块中最大的那个点,也就是说 ...
- niuke---勾股定理
勾股定理------: 当其中一个数a大于1并且为奇数时即a=2*n+1, 那么另外两个数分别为 b=2*n*n+2*n; c=b+1; 当a为大于等于4的偶数时,即a=2*n时,那么另外两个数分 ...
- debian7安装了mysql后,局域网去连接时出现10061错误
- [Abp vNext 入坑分享] - 前言
一·背景 Abp vnext是 ABP 框架作者所发起一个完全基于 ASP .NET Core框架,截至2020年4月份已经升级到2.5.0版本,根据经验2.0版本以后可以放心的使用在生产环境.类似a ...
- STM32 内存分配解析及变量的存储位置
内存映射 在一些桌面程序中,整个内存映射是通过虚拟内存来进行管理的,使用一种称为内存管理单元(MMU)的硬件结构来将程序的内存映射到物理RAM.在对于 RAM 紧缺的嵌入式系统中,是缺少 MMU 内存 ...
- ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.33.10' (111) 解决方法
谷歌了一下之后,原来是在mysql的my.cnf中有下面一段代码: # Instead of skip-networking the default is now to listen only on ...
- ThinkJS前端搭配vue时的Nginx配置
Thinkjs 作为奇舞团开源的nodejs mvc框架之一,引起了很多NodeJS程序员的亲赖.但是其关于静态文件处理部分支持不够完善,主要是体现在SPA单页应用,之前在ThinkJS 2.*版本时 ...
- Python3 字符串格式化(%操作符)
格式符 格式符为真实值预留位置,并控制显示的格式.格式符可以包含有一个类型码,用以控制显示的类型,如下: %s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) ...
- php private学习笔记
类的权限修饰符,放在属性/方法的前面.用来说明属性/方法的权限特点. 三种权限修饰符 private 私有的 public 公共 protected 保护的 privata 的属性.方法只能在 ...
- "net.sf.hibernate.PropertyValueException"
2019独角兽企业重金招聘Python工程师标准>>> 如果你遇到了下面的错误信息,例如: ERROR [Importing data task] [confluence.impor ...