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 ...
随机推荐
- python超实用的30 个简短的代码片段(二)
Python是目前最流行的语言之一,它在数据科学.机器学习.web开发.脚本编写.自动化方面被许多人广泛使用. 它的简单和易用性造就了它如此流行的原因. 如果你正在阅读本文,那么你或多或少已经使用过P ...
- sqli-labs通关教程----21~30关
第二十一关 第二十一关我们正常登陆后看到,uname后面变成了一堆字母 这是经过base64编码之后的样子,所以就照葫芦画瓢,将我payload的uname后面的部分转码成base64,这里可以用正常 ...
- 定位new表达式与显式调用析构函数
C++的核心理念之一是RAII,Resource Acquisition Is Initialization,资源获取即初始化.资源有很多种,内存.互斥锁.文件.套接字等:RAII可以用来实现一种与作 ...
- NCTF2019 小部分题解
前言 礼拜五领航杯打的比较累,做不出WEB,D3CTF没用,做了NJCTF的一些题目(懒,睡觉到12点起) Misc 第一次比赛先去做misc,以前一直做WEB,以后要WEB+MISC做.礼拜六下午做 ...
- MySQL笔记总结-DQL语言
DQL语言 基础查询 一.语法 select 查询列表 from 表名; 二.特点 1.查询列表可以是字段.常量.表达式.函数,也可以是多个 2.查询结果是一个虚拟表 三.示例 1.查询单个字段 se ...
- python入门学习之Python爬取最新笔趣阁小说
Python爬取新笔趣阁小说,并保存到TXT文件中 我写的这篇文章,是利用Python爬取小说编写的程序,这是我学习Python爬虫当中自己独立写的第一个程序,中途也遇到了一些困难,但是最后 ...
- 3、flink架构,资源和资源组
一.flink架构 1.1.集群模型和角色 如上图所示:当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager.由 Client 提交任务给 JobMa ...
- 2019-2020-1 20199310《Linux内核原理与分析》第二周作业
1.问题描述 众所周知,计算机是20世纪最伟大的发明之一,计算机是如何工作的呢?本文主要通过计算机的组成结构和工作原理,以及汇编代码工作过程来进行详细叙述. 2.解决过程 2.1 冯·诺依曼体系结构 ...
- CG-CTF(2)
CG-CTF https://cgctf.nuptsast.com/challenges#Web 续上~ 第七题:单身二十年 查看源代码: 取得flag(干杯~): 本题也可通过burp抓包,查看返回 ...
- QT踩坑记录1-Q_OBJECT编译问题
QT踩坑记录1-Q_OBJECT编译问题 QTC++Bugs 错误输出 Q_OBJECT 宏错误的地方会编译出现这样的错误, 无法找到.... 由于自己不想再看到这个错误, 此处 复制自 参考连接1, ...