1 什么是JdbcTemplate?

原始的JDBC在操作数据库方面是比较麻烦的,所以Spring为了提高开发的效率,把JDBC进行封装、改造了一番,而JdbcTemplate就是Spring对原始JDBC封装之后提供的一个操作数据库的工具类。

2 JdbcTemplate的CRUD方法

JdbcTemplate提供以下三种类型的方法来完成所有数据库的增删改查等操作。

  • executeXXX():执行任何SQL语句,对数据库、表进行新建、修改、删除操作。
  • update():执行新增、修改、删除等操作。
  • queryXXX():执行查询相关的操作。

3 JdbcTemplate的简单使用

基于JdbcTemplate的User表的增删改查操作。

3.1 依赖管理

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>HelloJdbcTemplate</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><maven.compiler.source>9</maven.compiler.source><maven.compiler.target>9</maven.compiler.target></properties><dependencies><!--Spring核心依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><!--Spring JdbcTemplate依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.2.RELEASE</version></dependency><!--MySQL数据库的依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version></dependency><!--JUnit单元测试依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies></project>

3.2 测试

package com.hc;import com.hc.domain.User;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;import java.util.Date;
import java.util.List;public class TestJdbcTemplate {JdbcTemplate jdbcTemplate = null;DriverManagerDataSource dataSource = null;@Beforepublic void init() {// 创建数据源dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/SSM?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT");dataSource.setUsername("root");dataSource.setPassword("1234");// 创建JdbcTemplate对象,并设置数据源(Spring自带数据源)jdbcTemplate = new JdbcTemplate(dataSource);}@Testpublic void testSave() {jdbcTemplate.update("insert into user(username,birthday,sex,address) values (?,?,?,?)", "HCC", new Date(), "男", "湖北宜昌");}@Testpublic void testDelete() {jdbcTemplate.update("delete from user where id = ?", 51);}@Testpublic void testUpdate() {jdbcTemplate.update("update user set username = ? where id = ?", "HCCC", 52);}@Testpublic void testFindAll() {List<User> users = jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<User>(User.class));for (User u : users) {System.out.println(u);}}@Testpublic void testFindOneBuId() {List<User> users = jdbcTemplate.query("select * from user where id = ?", new BeanPropertyRowMapper<User>(User.class), 50);System.out.println(users.size() == 0 ? "该用户不存在" : users.get(0));}
}

4 Spring和Spring JdbcTemplate

很明显,不管是数据源还是JdbcTemplate都可以进一步提交给Spring容器进行管理。

4.1 实体类和三层架构

  • User
package com.hc.domain;import java.util.Date;public class User {private Integer id;private String username;private Date birthday;private String sex;private String address;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", birthday=" + birthday +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';}
}
  • UserDaoImpl
package com.hc.dao.impl;import com.hc.dao.UserDao;
import com.hc.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import java.util.Date;
import java.util.List;@Repository(value = "userDao")
public class UserDaoImpl implements UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic void save(User user) {jdbcTemplate.update("insert into user(username, birthday, sex, address) values (?, ?, ?, ?)", user.getUsername(), user.getBirthday(), user.getSex(), user.getAddress());}@Overridepublic void delete(Integer id) {jdbcTemplate.update("delete from user where id = ?", id);}@Overridepublic void update(User user) {jdbcTemplate.update("update user set username=?,birthday=?,sex=?,address=? where id = ?", user.getUsername(), user.getBirthday(), user.getSex(), user.getAddress(), user.getId());}@Overridepublic User findOneById(Integer id) {List<User> users = jdbcTemplate.query("select * from user where id = ?", new BeanPropertyRowMapper<User>(User.class), id);return users.size() == 0 ? null : users.get(0);}@Overridepublic List<User> findAll() {return jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<User>(User.class));}
}
  • UserServiceImpl
package com.hc.service.impl;import com.hc.dao.UserDao;
import com.hc.domain.User;
import com.hc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service(value = "userService")
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic void save(User user) {userDao.save(user);}@Overridepublic void delete(Integer id) {userDao.delete(id);}@Overridepublic void update(User user) {userDao.update(user);}@Overridepublic User findOneById(Integer id) {return userDao.findOneById(id);}@Overridepublic List<User> findAll() {return userDao.findAll();}
}

4.2 bean.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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--开启注解支持--><context:component-scan base-package="com.hc"></context:component-scan><!--引入外部properties文件,文件中写着数据库连接信息--><context:property-placeholder location="jdbcConfig.properties"></context:property-placeholder><!--创建jdbcTemplate提交给Spring管理,并注入数据源--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!--创建数据源,采取Spring-jdbc自身提供的--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean></beans>

4.3 测试(Spring整合JUnit)

package com.hc;import com.hc.domain.User;
import com.hc.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.Date;
import java.util.List;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:bean.xml")
public class TestSpringJdbcTemplate {@Autowiredprivate UserService userService;@Testpublic void testSave() {User user = new User();user.setUsername("HFH");user.setBirthday(new Date());user.setSex("男");user.setAddress("广东佛山");userService.save(user);}@Testpublic void testDelete() {userService.delete(52);}@Testpublic void testUpdate() {User user = new User();user.setId(53);user.setUsername("HFH");user.setBirthday(new Date());user.setSex("男");user.setAddress("HK");userService.update(user);}@Testpublic void testFindOneById() {User user = userService.findOneById(53);System.out.println(user);}@Testpublic void testFindAll() {List<User> users = userService.findAll();for (User u : users) {System.out.println(u);}}
}

JdbcTemplate相关推荐

  1. 手撸一个JdbcTemplate,带你了解其原理

    前提要求 能够使用jdbc链接数据库 能够利用jdbc完成数据库的增删改查等操作 对泛型有一定的了解 基本原理 通过jdbc链接数据库,查询数据库中内容 利用反射对数据库中查询字段进行封装 步骤 1. ...

  2. SpringBoot (八) :Spring Boot多数据源(JdbcTemplate)配置与使用

    什么是JdbcTemplate 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架. 作为 SpringJDBC 框架的核心, JDB ...

  3. SpringBoot (四) :SpringBoot整合使用JdbcTemplate

    什么是JdbcTemplate 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架. 作为 SpringJDBC 框架的核心, JDB ...

  4. Spring从菜鸟到高手(四)(上)使用JdbcTemplate类实现用户登陆验证、批量更新

    标签:Spring java JdbcTemplate Spring从菜鸟到高手 绝缘材料 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...

  5. JDBC,JdbcTemplate,JPA傻傻分不清楚

    2019独角兽企业重金招聘Python工程师标准>>> JDBC.JDBCTemplate.MyBatis.Hiberante.Jpa关系概述 JDBC的使用 使用JDBC访问数据库 ...

  6. Spring JdbcTemplate方法详解

    2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...

  7. Spring JdbcTemplate的queryForList(String sql , ClassT elementType)易错使用--转载

    原文地址: http://blog.csdn.net/will_awoke/article/details/12617383 一直用ORM,今天用JdbcTemplate再次抑郁了一次. 首先看下这个 ...

  8. Spring中jdbcTemplate的用法实例

    一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象.        第一种方式:我们可以在自己 ...

  9. jdbc mysql 返回游标_使用JdbcTemplate流式(游标)读取数据库

    前言 生产环境中经常使用数据库分页的方式来控制一次获取的数据量,而数据处理中经常会有另外一种场景: 从一个数据库表中读取所有数据进行处理并将结果保存在其他数据库或文件或NoSql数据库中. 这时候也可 ...

  10. jdbcTemplate 的update 和batchUpdate 方法的使用

    update 方法 首先来看update 方法     1.  sql的生成: 这个方法有三个实现,每一个方法都包含一个sql 和另外的一个参数 我们就拿第一个方法为例子: 第一个sql 应该怎么写 ...

最新文章

  1. 服务器安全性文档,Microsoft Web服务器的安全性
  2. 全新 Sitecore Experience Cloud™ 助推数字体验转型
  3. 大数据笔记2019.5.8
  4. python在中小学教学中的应用-中小学Python教学的几点建议
  5. Android之万能适配器Adapter的使用
  6. Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载...
  7. jsp springmvc 视图解析器_Java面试题整理——SpringMVC
  8. P2386 放苹果 方法一
  9. [转载] Python字符串isdecimal() isdigit()isnumeric()等判断方法的区分。
  10. GitHub C 和 C++ 开源库的清单(含示例代码)
  11. 2020王万生计算机组成原理,计算机组成原理课后习题-王万生(53页)-原创力文档...
  12. 2月26 ubuntu系统备份还原到相同电脑、另一台电脑
  13. 不同浏览器对URL最大长度的限制(转)
  14. GB BIG5 转码原理全解析
  15. 安徽大学本科毕业论文中英文题目修改指南
  16. Total Uninstall 6安装使用
  17. 样式和主题(Style and Theme)详解
  18. HDMI协议介绍(六)--EDID
  19. android diy固件,官方固件不给力?咱自己DIY!手把手教你修改固件!
  20. C#使用request.GetRequestStream() 提示“底层连接已关闭:发送时发生意外错误”的问题

热门文章

  1. freemarker简单使用
  2. 超神!GitHub 标星 5.5w,如何用 Python 实现所有算法?
  3. 神州数码c语言笔试题,2016年计算机笔试考试题及答案
  4. croeElec 蓝牙连接ps3手柄的正确方式 Armbian 搞机篇
  5. 凸度(bulge)是AutoCAD 中独有的概念
  6. 点歌服务器怎么查看系统报错,网乐活动大师常见问题大全2017
  7. 在Emacs中使用TODO
  8. 清华学霸告诉你:暑假不是用来休息的,是用来反超的!
  9. 饿了么UI 开关跟多文本编辑,下拉
  10. 师傅带徒弟学:Python Web之Django框架-关东升-专题视频课程