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为例进行讲解,只有领略了其设 ...
随机推荐
- ubuntu14.04为安装fcitx卸载ibus后出现system setting (系统设置)中图标消失的问题
最近在系统为ubuntu14.04原版中,安装fictx.按照以往的经验应先把ibus卸载干净,否则可能会有冲突.因此惯性思维驱使,先卸载ibus,然后安装fcitx,但是问题出现了,system s ...
- jenkins 入门教程(上)
jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:java, ...
- discuz论坛插件设计学习培训视频全套教程
discuz模板跟插件开发的教程比较少,特搜集给大家学习插件做的好,在dsicuz应用中心出 售也是可以卖不少的呢 教程目录:第1章 本章的标题第1节Discuz! X 产品安装与配置第2节模板风格 ...
- 2016-2017-2 《Java程序设计》课程学生博客和代码托管链接
2016-2017-2 <Java程序设计>课程学生博客和代码托管链接 博客 1552 20155201 李卓雯 20155202 张 旭 20155203 杜可欣 20155204 王 ...
- 读深入了解c++内核对象模型小结(1/3/4)
之前早就听说这本书不错,如果想对c++进一步的了解可以看看,此书是进阶阶段参考,笔者自己看了书的第一.三.四章节,后面会继续. 第一章讲了c++的对象模型的引入,各种模型的对比和现在c++采 ...
- APIPA(Automatic Private IP Addressing,自动专用IP寻址)
APIPA APIPA(Automatic Private IP Addressing,自动专用IP寻址),是一个DHCP故障转移机制.当DHCP服务器出故障时, APIPA在169.254.0.1到 ...
- mtr命令详解
原文地址:http://blog.hexu.org/archives/1050.shtml 一般在windows 来判断网络连通性用ping 和tracert,ping的话可以来判断丢包率,trace ...
- Java构造和解析Json数据
BaseResult wyComany = propertyService.getWyCompanyById(CommunityInfos.getWyCompany());//这里返回的是json字符 ...
- 重写navigationController的push方法后,出现卡顿现象
在使用navigation的pushViewController进行push的时候,两个页面间的动画会出现卡顿一下再推出的效果,是因为iOS7 viewController背景颜色的问题,看到大神的博 ...
- mysql设置远程访问权限
查一下你的MYSQL用户表里, 是否允许远程连接 1.授权 mysql>grant all privileges on *.* to 'root'@'%' identified by ...