Spring中的JdbcTemplate使用
1.引出SpringJDBC的概念
在学习JDBC编程时我们会感觉到JDBC的操作是多么繁琐,那么当我们学习的Hibernate框架时,我们感觉到数据库的操作也变非常简单,提高了开发效率。但是当使用Hibernate不能满足性能或者灵活性要求必须使用Sql操作时,那么我们只能是纯JDBC来开发,为了解决这一问题,那么Spring也给出了相应的解决方案,我们可以使用Spring JDBC 框架方便简单的完成JDBC操作,只需要声明Sql语句,调用适合的Spring JDBC框架中的APL,来处理结果集。
2.Spring JDBC的组成
SpringJDBC框架的4个组成部分:

3.使用Spring jdbcTemplate实现数据库操作步骤
3.1引入jar包:

3.2搭建架构(dao,entity,service)
entity:
package cn.entity;
/**
* 学生实体类
*
* @author hyj
*
*/
public class Student {
// 学生id
private Integer id;
// 学生姓名
private String name;
// 学生年龄
private Integer age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Student(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
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;
}
}
dao:
package cn.dao;
import java.util.List;
import cn.entity.Student;
public interface StudentDao {
/**
* 查询全部
* @return
*/
public List<Student> findAll();
/**
* 添加
* @param student
*/
public void add(Student student);
/**
* 删除
* @param id
*/
public void delete(Integer id);
/**
* 更新
* @param student
*/
public void update(Student student);
/**
* 查询总记录数
* @return
*/
public Integer count();
/**
* 调用存储过程实现根据学生id查询学生姓名
* @param id
* @return
*/
public String byIdSelectName(Integer id);
/**
* 查询所有信息:利用query(String sql,RowMapper rowMapper)
* @return
*/
public List<Student> select();
/**
* 根据id查询Student对象
* @return
*/
public Student byIdStudent(Integer id);
}
daoImpl:
package cn.dao.impl;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.CallableStatementCreator;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import cn.dao.StudentDao;
import cn.entity.Student;
import cn.util.MyRowMapper;
public class StudentDaoImpl implements StudentDao {
private JdbcTemplate jdbcTemplate;
/**
* 查询所有的信息
*/
@Override
public List<Student> findAll() {
List<Student> studentsList = new ArrayList<Student>();
// 查询的sql语句
String sql = "select * from student";
// 调用方法获取集合数据
List stuList = jdbcTemplate.queryForList(sql);
// 遍历集合,每一个student代表一个Student实体
Iterator iterator = stuList.iterator();
while (iterator.hasNext()) {
Map map = (Map) iterator.next();
Student stu = new Student();
stu.setName((String) map.get("name"));
stu.setId(((BigDecimal) map.get("id")).intValue());
stu.setAge(((BigDecimal) map.get("age")).intValue());
studentsList.add(stu);
}
return studentsList;
}
/**
* 添加的方法
*/
@Override
public void add(Student student) {
// 1.提供一个可以添加的sql语句
String sql = "insert into student values(?,?,?)";
// 2.提供参数
Object[] args = new Object[] { student.getId(), student.getName(),
student.getAge() };
// 3.调用jdbcTemplate的update方法进行添加操作
jdbcTemplate.update(sql, args);
}
/**
* 删除
*/
@Override
public void delete(Integer id) {
String sql = "delete from student where id=?";
// 该方法返回的值是int类型代表受影响行数
jdbcTemplate.update(sql, id);
}
/**
* 更新的方法
*/
@Override
public void update(Student student) {
String sql = "update student set name=? where id=?";
Object[] args = new Object[] { student.getName(), student.getId() };
jdbcTemplate.update(sql, args);
}
/**
*
* 查询总记录数
*/
@Override
public Integer count() {
String sql = "select count(1) from student";
Object count = jdbcTemplate.queryForObject(sql, Object.class);
return ((BigDecimal) count).intValue();
}
/**
* 调用存储过程实现根据学生id查询学生姓名
*
* @param id
* @return
*/
@SuppressWarnings("unchecked")
@Override
public String byIdSelectName(Integer id) {
String sql = "select name from student where id=?";
Object[] args = new Object[] { id };
String name = jdbcTemplate.queryForObject(sql, args,
java.lang.String.class);
return name;
}
/**
* 查询所有信息:利用query(String sql,RowMapper rowMapper)
*
* @return
*/
@Override
public List<Student> select() {
String sql = "select * from student";
List<Student> list = jdbcTemplate.query(sql, new MyRowMapper());
return list;
}
/**
* 根据id查询单个对象
*/
@Override
public Student byIdStudent(Integer id) {
String sql = "select * from student where id=?";
Student student = jdbcTemplate.queryForObject(sql,
new BeanPropertyRowMapper<Student>(Student.class), id);
return student;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
service :
package cn.service;
import java.util.List;
import cn.entity.Student;
public interface StudentService {
/**
* 查询全部
* @return
*/
public List<Student> findAll();
/**
* 添加
* @param student
*/
public void add(Student student);
/**
* 删除
* @param id
*/
public void delete(Integer id);
/**
* 更新
* @param student
*/
public void update(Student student);
/**
* 查询总记录数
* @return
*/
public Integer count();
/**
* 调用存储过程实现根据学生id查询学生姓名
* @param id
* @return
*/
public String byIdSelectName( final Integer id);
/**
* 查询所有信息:利用query(String sql,RowMapper rowMapper)
* @return
*/
public List<Student> select();
/**
* 根据id查询Student对象
* @return
*/
public Student byIdStudent(Integer id);
}
service:
package cn.service;
import java.util.List;
import cn.entity.Student;
public interface StudentService {
/**
* 查询全部
* @return
*/
public List<Student> findAll();
/**
* 添加
* @param student
*/
public void add(Student student);
/**
* 删除
* @param id
*/
public void delete(Integer id);
/**
* 更新
* @param student
*/
public void update(Student student);
/**
* 查询总记录数
* @return
*/
public Integer count();
/**
*
* @param id
* @return
*/
public String byIdSelectName(Integer id);
/**
* 查询所有信息:利用query(String sql,RowMapper rowMapper)
* @return
*/
public List<Student> select();
/**
* 根据id查询Student对象
* @return
*/
public Student byIdStudent(Integer id);
}
serviceImpl
package cn.service.impl;
import java.util.List;
import cn.dao.StudentDao;
import cn.entity.Student;
import cn.service.StudentService;
public class StudentServiceImpl implements StudentService {
private StudentDao stuDao;
@Override
public List<Student> findAll() {
// TODO Auto-generated method stub
return stuDao.findAll();
}
@Override
public void add(Student student) {
stuDao.add(student);
}
@Override
public void delete(Integer id) {
stuDao.delete(id);
}
@Override
public void update(Student update) {
stuDao.update(update);
}
public StudentDao getStuDao() {
return stuDao;
}
public void setStuDao(StudentDao stuDao) {
this.stuDao = stuDao;
}
@Override
public Integer count() {
return stuDao.count();
}
@Override
public String byIdSelectName( Integer id) {
return stuDao.byIdSelectName(id);
}
@Override
public List<Student> select() {
return stuDao.select();
}
@Override
public Student byIdStudent(Integer id) {
// TODO Auto-generated method stub
return stuDao.byIdStudent(id);
}
}
util:
package cn.util;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import cn.entity.Student;
public class MyRowMapper implements RowMapper<Student>{
@Override
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student=new Student();
student.setAge(rs.getInt("age"));
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
return student;
}
}
3.3配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 1.配置普通数据源 -->
<!-- <bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
指定jdbc驱动
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
连接数据库的url地址
<property name="url" value="jdbc:mysql://localhost:3306/Success"></property>
连接数据的用户名和密码
<property name="username" value="root"></property>
<property name="password" value="123"></property>
</bean> -->
<!-- 2.c3p0 数据源-->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 指定jdbc驱动 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<!-- 连接数据库的url地址 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/Success"></property>
<!-- 连接数据的用户名和密码 -->
<property name="user" value="root"></property>
<property name="password" value="123"></property>
</bean>
<!-- 2配置jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 定义dao的实现 -->
<bean id="stuDaoimpl" class="cn.dao.impl.StudentDaoImpl">
<!-- 给jdbcTemplate植入引用 -->
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<!-- 定义Service实现 -->
<bean id="stuserviceimpl" class="cn.service.impl.StudentServiceImpl">
<!-- 给stuDao植入引用 -->
<property name="stuDao" ref="stuDaoimpl"></property>
</bean>
</beans>
3.4测试类
package cn.test;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.entity.Student;
import cn.service.StudentService;
public class TestHappy {
private StudentService stuService;
@Before
public void before(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
stuService =(StudentService)context.getBean("stuserviceimpl");
}
/**
* 测试添加
*/
@Test
public void add(){
stuService.add(new Student(4,"张三4",21));
System.out.println("add success.............");
}
/**
* 更新方法测试
*/
@Test
public void update(){
stuService.update(new Student(002,"张三2"));
System.out.println("update success.........");
}
/**
* 删除方法测试
*/
@Test
public void delete(){
stuService.delete(001);
System.out.println("delete success.........");
}
/**
*查询方法测试
*/
@Test
public void findAll(){
List<Student> stuList= stuService.findAll();
for (Student student : stuList) {
System.out.println("学生编号:"+student.getId()+"\t学生姓名:"+student.getName()+"\t学生年龄:"+student.getAge());
}
}
/**
* 查询学生总记录数
*/
@Test
public void count(){
Integer result= stuService.count();
System.out.println("学生总数:"+result);
}
/**
* 调用存储过程实现根据学生id查询学生姓名
* @param id
* @return
*/
@Test
public void byIdSelectName(){
String name=stuService.byIdSelectName(2);
System.out.println("学生姓名:"+name);
}
/**
* 查询所有信息:利用query(String sql,RowMapper rowMapper)
* @return
*/
@Test
public void select(){
List<Student> list=stuService.select();
for (Student item : list) {
System.out.println("学生姓名:"+item.getName());
}
}
/**
* 根据id查询查询单个对象
* @return
*/
@Test
public void byIdStudent(){
Student student=stuService.byIdStudent(2);
System.out.println(student.getName());
System.out.println(student.getAge());
}
}
Spring中的JdbcTemplate使用的更多相关文章
- Spring中的JDBCTemplate
src\dayday\JDBCTestTest package dayday;import com.sun.org.apache.xalan.internal.xsltc.compiler.Templ ...
- (六)Spring 中的 JdbcTemplate
目录 概念 配置数据库 创建 JdbcTemplate 对象 增删改查代码 概念 JdbcTemplate : 是 Spring 中对持久层(JDBC 技术)一个封装 : 使用起来和 Dbutuis ...
- Spring中的JdbcTemplate的使用
一.jdbcTemplate的作用 它就是用于和数据库交互的,实现对表的crud.与dbutils相似 二.JdbcTemplate的使用 <dependency> <groupId ...
- Spring 中的 JDBCTemplate
新建一个java工程 写好spring配置文件,直接上代码 <?xml version="1.0" encoding="UTF-8"?> <b ...
- Spring中的设计模式学习
Spring提供了一种Template的设计哲学,包含了很多优秀的软件工程思想. 1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. ...
- Spring中的设计模式
[Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用] [http://www.geek521.c ...
- spring 中的设计模式
https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=2247485205&idx=1&sn=63455d2313776d ...
- Spring中使用的设计模式
目录 Spring使用的设计模式 1.单例模式 2.原型模式 3.模板模式 4.观察者模式 5.工厂模式 简单工厂模式 工厂方法模式 6.适配器模式 7.装饰者模式 8.代理模式 9.策略模式 S ...
- 详解设计模式在Spring中的应用
设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设 ...
随机推荐
- POJ2425 A Chess Game[博弈论 SG函数]
A Chess Game Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 3917 Accepted: 1596 Desc ...
- call和apply求最大和最小值
,取最大值 var arr = [1,3,7,22,677,-1,2,70]; Math.max.apply(Math, arr);//677 Math.max.call(Math, 1,3,7,22 ...
- img图片自适应div盒子,前提是不要把盒子的高给写死了,就是不要写高,如下
div{width:100%;}//写高就自适应盒子不起来了 img{width: 100%; height: 100%;}
-  非法字符 原因 以及解决办法
模板文件生成html文件之后会在body开头处加入一个可见的控制符 // 如果是Windows系统,修改为:$WIN = 1; $WIN = 0; ?> <!DOCTYPE html P ...
- StackExchange.Redis 使用-配置
Configurationredis有很多不同的方法来配置连接字符串 , StackExchange.Redis 提供了一个丰富的配置模型,当调用Connect 或者 ConnectAsync 时需要 ...
- 物联网平台设计心得:管中窥豹之HeartBeat
前言 在写这篇文章之前,我曾对HeartBeat做过诸多的研究,也做过诸多的项目,在这些项目中,有客户端为了维持状态,而定时向服务端发送的HeartBeat:有服务端为了维持客户端连接状态而处理Hea ...
- Writing Clean Code 读后感
最近花了一些时间看了这本书,书名是 <Writing Clean Code ── Microsoft Techniques for Developing Bug-free C Programs& ...
- 通过sqlserver发送邮件
配置过程请参考:http://www.2cto.com/database/201403/289114.html 实际中应用的扩展: 1.编写一个触发器(相当于一个多线程的发邮件的服务). 2.在应用程 ...
- Jquery揭秘系列:实现 ready和bind事件
讲这一节之前,先回顾之前的一篇<小谈Jquery>里面的代码: (function (win) { var _$ = function (selector, context) { retu ...
- Java 理论与实践: 处理 InterruptedException
捕捉到它,然后怎么处理它? 很多 Java™ 语言方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出InterruptedException.您不能忽略这个异常,因为 ...