JdbcTemplate简介

  JdbcTemplate是Spring JDBC的核心类,借助该类提供的方法可以很方便的实现数据的增删改查。

  Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

  JdbcTemplate位于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个这个包包含了事务和异常控制

  

JdbcTemplate主要提供以下五类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

  • query方法及queryForXXX方法:用于执行查询相关语句;

  • call方法:用于执行存储过程、函数相关语句。

xml中的配置:

  1. <!-- 扫描 -->
  2. <context:component-scan base-package="com.zzj.*"></context:component-scan>
  3.  
  4. <!-- 不属于自己工程的对象用bean来配置 -->
  5. <!-- 配置数据库连接池 -->
  6. <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close" p:username="root" p:password="qw13579wq">
  7. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  8. <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test"></property>
  9. </bean>
  10.  
  11. <!-- 配置jdbcTemplate -->
  12. <bean class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"></bean>

常用方法:

数据库user_info表:

我们先创建一个实体对象,对应数据库表中的信息,方便之后的查询操作

  1. package com.zzj.vo;
  2.  
  3. public class UserInfo {
  4.  
  5. private int id;
  6. private String userName;
  7. private String password;
  8.  
  9. public int getId() {
  10. return id;
  11. }
  12.  
  13. public void setId(int id) {
  14. this.id = id;
  15. }
  16.  
  17. public String getUserName() {
  18. return userName;
  19. }
  20.  
  21. public void setUserName(String userName) {
  22. this.userName = userName;
  23. }
  24.  
  25. public String getPassword() {
  26. return password;
  27. }
  28.  
  29. public void setPassword(String password) {
  30. this.password = password;
  31. }
  32.  
  33. @Override
  34. public String toString() {
  35. return "UserInfo [id=" + id + ", userName=" + userName + ", password=" + password + "]";
  36. }
  37.  
  38. }

修改(包含增、删、改):update()方法,另有批量插入方法batchUpdate()

update()方法增删改:

UserInfoDao.java代码:

  1. @Repository
  2. public class UserInfoDao {
  3.  
  4. @Autowired
  5. //从容器中自动扫描获取jdbcTemplate
  6. private JdbcTemplate jdbcTemplate;
  7.  
  8. //update()实现增加数据
  9. public boolean insert(int id,String userName,String password){
  10. String sql = "insert into user_info values (?,?,?)";
  11. return jdbcTemplate.update(sql,id,userName,password)>0;
  12. }
  13.  
  14. //update()实现修改
  15. public boolean update(int id,String userName,String password){
  16. String sql = "update user_info set user_name=?,password=? where id=?";
  17. return jdbcTemplate.update(sql,userName,password,id)>0;
  18. }
  19.  
  20. //update()实现删除
  21. public boolean delete(int id){
  22. String sql = "delete from user_info where id=?";
  23. return jdbcTemplate.update(sql,id)>0;
  24. }
  25.  
  26. }

测试类代码:

  1. public class Test {
  2.  
  3. public static void main(String[] args) {
  4.  
  5. ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
  6. UserInfoDao userDao = applicationContext.getBean(UserInfoDao.class);
  7.  
  8. boolean insert = userDao.insert(1,"Jim", "123");
  9. boolean update = userDao.update(1,"Tom","123456");
  10. boolean delete = userDao.delete(1);
  11.      System.out.println("插入:"+insert+",修改:"+update+",删除:"+delete);
  12.  
  13. }
  14.  
  15. }

测试结果:

查询:查询单个值、查询一个对象、查询多个对象

查询单个值

  1. //查询单个值
  2. public boolean login(String userName,String password){
  3. try {
  4. String sql = "select id from user_info where user_name=? and password=?";
  5. jdbcTemplate.queryForObject(sql,String.class,userName,password);
  6. return true;
  7. } catch (DataAccessException e) {
  8. return false;
  9. }
  10. }

查询一个对象:RowMapper方法和ResultSetExtractor方法

  1. //查询单个对象
  2. public UserInfo getById(int id){
  3. String sql = "select id,user_name,password from user_info where id=?";
  4.  
  5. //RowMapper方法
  6. class UserInfoRowMapper implements RowMapper<UserInfo>{
  7.  
  8. @Override
  9. public UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  10. UserInfo userInfo = new UserInfo();
  11. userInfo.setId(rs.getInt("id"));
  12. userInfo.setUserName(rs.getString("user_name"));
  13. userInfo.setPassword(rs.getString("password"));
  14. return userInfo;
  15. }
  16.  
  17. }
  18.  
  19. return jdbcTemplate.queryForObject(sql,new UserInfoRowMapper(),id);
  20.  
  21. //RowMapper方法的Lambda表达式
  22. return jdbcTemplate.queryForObject(sql,(ResultSet rs,int rowNum)->{
  23. UserInfo userInfo = new UserInfo();
  24. userInfo.setId(rs.getInt("id"));
  25. userInfo.setUserName(rs.getString("user_name"));
  26. userInfo.setPassword(rs.getString("password"));
  27. return userInfo;
  28. },id);
  29.  
  30. //ResultSetExtractor方法
  31. class UserInfoResultSet implements ResultSetExtractor<UserInfo>{
  32.  
  33. @Override
  34. public UserInfo extractData(ResultSet rs) throws SQLException, DataAccessException {
  35. UserInfo userInfo = null;
  36. if(rs.next()){
  37. userInfo = new UserInfo();
  38. userInfo.setId(rs.getInt("id"));
  39. userInfo.setUserName(rs.getString("user_name"));
  40. userInfo.setPassword(rs.getString("password"));
  41. }
  42. return userInfo;
  43. }
  44. }
  45. return jdbcTemplate.query(sql,new UserInfoResultSet(),id);
  46.  
  47. //ResultSetExtractor方法的lambda表达式
  48. return jdbcTemplate.query(sql,(ResultSet rs)->{
  49. UserInfo userInfo = null;
  50. if(rs.next()){
  51. userInfo = new UserInfo();
  52. userInfo.setId(rs.getInt("id"));
  53. userInfo.setUserName(rs.getString("user_name"));
  54. userInfo.setPassword(rs.getString("password"));
  55. }
  56. return userInfo;
  57. },id);
  58.  
  59. }

查询多个对象:RowMapper方法和ResultSetExtractor方法

  1. //查询多个对象
  2. public List<UserInfo> selectAll(){
  3. String sql = "select id,user_name,password from user_info";
  4.  
  5. //RowMapper方法
  6. class UserInfoRowMapper implements RowMapper<UserInfo>{
  7.  
  8. @Override
  9. public UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  10. UserInfo userInfo = new UserInfo();
  11. userInfo.setId(rs.getInt("id"));
  12. userInfo.setUserName(rs.getString("user_name"));
  13. userInfo.setPassword(rs.getString("password"));
  14. return userInfo;
  15. }
  16.  
  17. }
  18. return jdbcTemplate.query(sql,new UserInfoRowMapper());
  19.  
  20. //RowMapper方法的Lambda表达式
  21. return jdbcTemplate.query(sql,(ResultSet rs,int rowNum)->{
  22. UserInfo userInfo = new UserInfo();
  23. userInfo.setId(rs.getInt("id"));
  24. userInfo.setUserName(rs.getString("user_name"));
  25. userInfo.setPassword(rs.getString("password"));
  26. return userInfo;
  27. });
  28.  
  29. //ResultSetExtractor方法
  30. class UserInfoResultSet implements ResultSetExtractor<List<UserInfo>>{
  31.  
  32. @Override
  33. public List<UserInfo> extractData(ResultSet rs) throws SQLException, DataAccessException {
  34. List<UserInfo> list = new ArrayList<>();
  35. while(rs.next()){
  36. UserInfo userInfo = new UserInfo();
  37. userInfo.setId(rs.getInt("id"));
  38. userInfo.setUserName(rs.getString("user_name"));
  39. userInfo.setPassword(rs.getString("password"));
  40. list.add(userInfo);
  41. }
  42. return list;
  43. }
  44.  
  45. }
  46. return jdbcTemplate.query(sql, new UserInfoResultSet());
  47.  
  48. //ResultSetExtractor方法的lambda表达式
  49. return jdbcTemplate.query(sql,(ResultSet rs)->{
  50. List<UserInfo> list = new ArrayList<>();
  51. while(rs.next()){
  52. UserInfo userInfo = new UserInfo();
  53. userInfo.setId(rs.getInt("id"));
  54. userInfo.setUserName(rs.getString("user_name"));
  55. userInfo.setPassword(rs.getString("password"));
  56. list.add(userInfo);
  57. }
  58. return list;
  59. });
  60.  
  61. }

JdbcTemplate常用方法的更多相关文章

  1. 8.spring:事务管理(上):Spring的数据库编程、编程式事务管理

    Spring的数据库编程 Spring框架提供了JDBC模板模式------>JdbcTemplate 简化了开发,在开发中并不经常是使用 实际开发更多使用的是Hibernate和MyBatis ...

  2. Spring - 数据库开发概述

      Spring 数据库开发 Spring 的 JDBC 模块负责数据库资源管理和镨误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入到编写业 ...

  3. 【Spring】Spring的数据库开发 - 2、Spring JdbcTemplate的常用方法(execute、update、query)

    Spring JdbcTemplate的常用方法 文章目录 Spring JdbcTemplate的常用方法 execute() update() query() 简单记录-Java EE企业级应用开 ...

  4. jdbcTemplate的一些常用方法

    前言 最近的项目中由于只进行查询,所以使用了jdbcTemplate来直接操作sql进行持久层的操作,初次接触jdbcTemplate,从最开始的什么都不知道到现在基本方法都大致知道什么意思,特此记录 ...

  5. Spring JDBC常用方法详细示例

    Spring JDBC使用简单,代码简洁明了,非常适合快速开发的小型项目.下面对开发中常用的增删改查等方法逐一示例说明使用方法 1 环境准备 启动MySQL, 创建一个名为test的数据库 创建Mav ...

  6. 编写DAO,通过JdbcTemplate操作数据库的实践

    目的:编写DAO,通过Spring中的JdbcTemplate,对数据库中的学生数据进行增删改查操作. 要操作的数据库表结构为: 一.大体框架 1.要利用JdbcTemplate,首先要添加Sprin ...

  7. spring的JdbcTemplate

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

  8. spring的jdbcTemplate的使用

    转载:http://1358440610-qq-com.iteye.com/blog/1826816 一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作. ...

  9. Spring中jdbcTemplate的用法实例

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

随机推荐

  1. 获取天气预报java代码

    import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; imp ...

  2. 实际中可能遇到的NAT问题(IPsec)

    一.背景介绍:一般我们在实际网络中不是IPSec VPN的时候,都是边界设备连接Internet,然后两个边界设备通过Internet去实现互通,建立VPN,但是,有的运营商在分配IP地址的时候,给我 ...

  3. ElasticSearch学习记录 - 命令示例

    GET /searchfilmcomments/searchfilmcomments/_search { "query": { "match_all": {} ...

  4. 【转】网关协议学习:CGI、FastCGI、WSGI、uWSGI

    一直对这四者的概念和区别很模糊,现在就特意梳理一下它们的关系与区别. CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的 ...

  5. hive内表和外表的创建、载入数据、区别

    创建表 创建内表 create table customer( customerId int, firstName string, lastName STRING, birstDay timestam ...

  6. Educational Codeforces Round 68 (Rated for Div. 2)D(SG函数打表,找规律)

    #include<bits/stdc++.h>using namespace std;int sg[1007];int main(){ int t; cin>>t; while ...

  7. GitHub vs. Bitbucket 不只是功能不同

    https://www.oschina.net/translate/bitbucket-vs-github-its-more-than-just-features 让我们回到2005年,Bitkeep ...

  8. jquery中 $(xxx).each() 和 $.each()的区别,以及enter键一键登录

    1.$().each 在dom处理上面用的较多.如果页面有多个input标签类型为text,对于这时用$().each来处理多个text,例如: $("input[type=’text’]& ...

  9. vue 和 jquery混合使用

    有时候只要想到要用的 vue.js 的时候就会惯性的想起用vue-cli手脚架搭建一个项目,但是有时候的业务场景并不适合用vue-cli手脚架,这个时候使用vue+jquery混合使用,把他们的优点结 ...

  10. Java入门笔记 03-面向对象(上)

    介绍:Java是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成是一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用变量.也就是说,所有类都是引用类型.Java也支持面向对象的 ...