前言

本文是对SpringBoot使用JdbcTemplate操作数据库的一个介绍,,提供一个小的Demo供大家参考。
操作数据库的方式有很多,本文介绍使用SpringBoot结合JdbcTemplate。
大家可以关注一下公众号“Java架构师秘籍” 纯干货绿色天然无污染

新建项目

新建一个项目。pom文件中加入Jdbc依赖,完整pom如下:

<?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>com.dalaoyang</groupId><artifactId>springboot_jdbc</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springboot_jdbc</name><description>springboot_jdbc</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

配置文件如下:

##端口号
server.port=8888##数据库配置
##数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false
##数据库用户名
spring.datasource.username=root
##数据库密码
spring.datasource.password=123456
##数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

新建一个实体类User,其中需要注意的是,User类实现了RowMapper类,重写了mapRow方法,完整代码如下:

package com.dalaoyang.entity;import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;/*** @author dalaoyang* @project springboot_learn* @package com.dalaoyang.entity* @email yangyang@dalaoyang.cn* @date 2018/7/25*/
public class User implements RowMapper<User> {private int id;private String user_name;private String pass_word;public User(int id, String user_name, String pass_word) {this.id = id;this.user_name = user_name;this.pass_word = pass_word;}public User() {}public User(String user_name, String pass_word) {this.user_name = user_name;this.pass_word = pass_word;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name = user_name;}public String getPass_word() {return pass_word;}public void setPass_word(String pass_word) {this.pass_word = pass_word;}@Overridepublic User mapRow(ResultSet resultSet, int i) throws SQLException {User user = new User();user.setId(resultSet.getInt("id"));user.setUser_name(resultSet.getString("user_name"));user.setPass_word(resultSet.getString("pass_word"));return user;}
}

常用CURD操作大致使用以下三个方法:
1.execute方法,用于直接执行SQL语句
2.update方法,用户新增修改删除操作
3.query方法,用于查询方法

本文和往常一样,用Controller进行测试,注入JdbcTemplate。完整代码如下,下面会对测试方法进行介绍:

package com.dalaoyang.controller;import com.dalaoyang.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;/*** @author dalaoyang* @project springboot_learn* @package com.dalaoyang.controller* @email yangyang@dalaoyang.cn* @date 2018/7/25*/
@RestController
public class UserController {@Autowiredprivate JdbcTemplate jdbcTemplate;//http://localhost:8888/createTable@GetMapping("createTable")public String createTable(){String sql = "CREATE TABLE `user` (\n" +"  `id` int(11) NOT NULL AUTO_INCREMENT,\n" +"  `user_name` varchar(255) DEFAULT NULL,\n" +"  `pass_word` varchar(255) DEFAULT NULL,\n" +"  PRIMARY KEY (`id`)\n" +") ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;\n" +"\n";jdbcTemplate.execute(sql);return "创建User表成功";}//http://localhost:8888/saveUserSql@GetMapping("saveUserSql")public String saveUserSql(){String sql = "INSERT INTO USER (USER_NAME,PASS_WORD) VALUES ('dalaoyang','123')";int rows= jdbcTemplate.update(sql);return "执行成功,影响"+rows+"行";}//http://localhost:8888/saveUser?userName=lisi&passWord=111@GetMapping("saveUser")public String saveUser(String userName,String passWord){int rows= jdbcTemplate.update("INSERT INTO USER (USER_NAME,PASS_WORD) VALUES (?,?)",userName,passWord);return "执行成功,影响"+rows+"行";}//http://localhost:8888/updateUserPassword?id=1&passWord=111@GetMapping("updateUserPassword")public String updateUserPassword(int id,String passWord){int rows= jdbcTemplate.update("UPDATE USER SET PASS_WORD = ? WHERE ID = ?",passWord,id);return "执行成功,影响"+rows+"行";}//http://localhost:8888/deleteUserById?id=1@GetMapping("deleteUserById")public String deleteUserById(int id){int rows= jdbcTemplate.update("DELETE FROM  USER  WHERE ID = ?",id);return "执行成功,影响"+rows+"行";}//http://localhost:8888/batchSaveUserSql@GetMapping("batchSaveUserSql")public String batchSaveUserSql(){String sql ="INSERT INTO USER (USER_NAME,PASS_WORD) VALUES (?,?)" ;List<Object[]> paramList = new ArrayList<>();for (int i = 0; i < 10; i++) {String[] arr = new String[2];arr[0] = "zhangsan"+i;arr[1] = "password"+i;paramList.add(arr);}jdbcTemplate.batchUpdate(sql,paramList);return "执行成功";}//http://localhost:8888/getUserByUserName?userName=zhangsan0@GetMapping("getUserByUserName")public List getUserByUserName(String userName){String sql = "SELECT * FROM USER WHERE USER_NAME = ?";//写法很多种//下面列举两种写法,都可以实现//List<User> list= jdbcTemplate.query(sql,new Object[]{userName}, new BeanPropertyRowMapper(User.class));List<User> list= jdbcTemplate.query(sql,new User(),new Object[]{userName});return list;}//http://localhost:8888/getMapById?id=1@GetMapping("getMapById")public Map getMapById(Integer id){String sql = "SELECT * FROM USER WHERE ID = ?";Map map= jdbcTemplate.queryForMap(sql,id);return map;}//http://localhost:8888/getUserById?id=1@GetMapping("getUserById")public User getUserById(Integer id){String sql = "SELECT * FROM USER WHERE ID = ?";User user= jdbcTemplate.queryForObject(sql,new User(),new Object[]{id});return user;}}

测试方法介绍
1.createTable方法
使用execute方法创建User表
2.saveUserSql方法
使用update方法,传入参数sql语句,直接执行插入操作
3.saveUser方法
使用update方法,传入sql语句和对应字段值,进行插入操作
4.updateUserPassword方法
使用update方法,传入sql语句和对应字段值,进行修改操作
5.deleteUserById方法
使用update方法,传入sql语句和对应字段值,进行删除操作
6.batchSaveUserSql方法
使用batchUpdate方法,传入sql和参数集合,进行批量更新
7.getUserByUserName方法
使用query方法,传入sql,实体对象,查询参数,这里就用到了实体类重写的mapRow方法
8.getMapById方法
使用queryForMap方法,传入sql和参数,返回Map
9.getUserById方法
使用queryForObject方法,传入sql,实体对象,查询参数,返回User实体类,这里也用到了实体类重写的mapRow方法
具体使用方法还有很多,请参考文档:
docs.spring.io/spring/docs…

总结注意

出现下图错误不要担心,如图
https://user-gold-cdn.xitu.io/2018/7/25/164d0e2ea962f31b?imageslim
出现这个错误是因为sql在参数问号的时候多写了引号造成的,这也是我在写demo的时候犯下的错误。
欢迎大家加Q群:230419550 学习交流讨论架构师进阶知识

转载于:https://blog.51cto.com/13792737/2150674

SpringBoot使用JdbcTemplate相关推荐

  1. SpringBoot整合JdbcTemplate

    SpringBoot整合JdbcTemplate 一.数据准备 CREATE TABLE `tb_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMEN ...

  2. springboot使用JdbcTemplate完成对数据库的增删改查

    上一篇对springboot有一个简单的介绍以及使用一个简单的例子熟悉了一下springboot写法的简单流程.这一篇介绍springboot使用JdbcTemplate完成对数据库的增删改查. 首先 ...

  3. SpringBoot使用JdbcTemplate案例(学习笔记)

    声明:本案例学习http://blog.csdn.net/je_ge,在此感谢je_ge提供的学习用的资料 1.项目结构 2.pom.xml的内容 <project xmlns="ht ...

  4. spring的jdbcTemplate的多数据源的配置,springboot的jdbcTemplate的多数据源的配置

    如果想要看springboot配置mybatis的多数据源,请参看本人博客: https://blog.csdn.net/u013294097/article/details/86274427 1.s ...

  5. 微服务 SpringBoot 通过jdbcTemplate配置Oracle数据源

    转自:http://www.cnblogs.com/yaohuiqin/p/9370153.html 1.引入jdbc支持,需要在pom.xml中添加依赖包: 1 2 3 4 5 6 7 8 9 10 ...

  6. SpringBoot与JdbcTemplate的完美结合

    延生: 当出入的表中包含外键的时候,必须保证该外键所关联的表的相应行存在,才能正确插入,否则不能插入,例如:当插入的外键字段为1时,该外键所关联的表主键值为1的这一行必须是存在的,否则不能插入.至于为 ...

  7. Spring Boot JdbcTemplate 入门

    原创出处 http://www.iocoder.cn/Spring-Boot/JdbcTemplate/ 「芋道源码」 1. 概述 虽然说,我们现在项目的 DAL 数据访问层,大多使用 MyBatis ...

  8. druid连接池_SpringBoot整合JDBCTemplate及Druid连接池

    SpringBoot整合JDBCTemplate 本篇文章将会介绍用SpringBoot整合JDBCTemplate来实现简单的增删改查的功能.及通过SpringBoot整合Druid数据库连接池实时 ...

  9. springboot使用spring-data-jpa完成数据持久化

    在之前我们一直使用JdbcTemplate来实现数据的增删改查,这里尝试使用spring-data-jpa,实现上更加简单,因为Spring Data JPA 框架,主要针对的就是 Spring 唯一 ...

最新文章

  1. AVERAGE函数参数说明
  2. scrapy接selenium关键步骤
  3. 《IT咨询指南》读书笔记一开卷 前言
  4. mxnet symbol图的 变量 shape
  5. php用Simple Excel导出xls
  6. ABAP门派现状报告
  7. Linux文本处理命令:cut grep awk sed printf
  8. mongodb添加多条数据_分析了一万多条拼车数据,看看北上广深的各位都回哪过年...
  9. 让不带www的域名跳转到带www的域名
  10. python井字棋游戏人机对战_用Python做一个井字棋小游戏
  11. 4怎么放大字体_win8.1系统如何放大所有字体?
  12. Code[VS]1997 守卫者的挑战
  13. Ios 12 linux,iOS12.3~12.4.2支持越狱?包括 A12 设备
  14. FTP、Telnet、SMTP、POP3等服务的名称及端口号和各种数据库的端口号
  15. js修改div标签中的内容
  16. 能测试快充真假的软件,苹果iOS 12可自行测试真假快充:山寨充电器无处遁形
  17. 【泛微E9】待办、已办页面显示内容调整
  18. 【DNN】PNN(Product-based Neural Networks )
  19. 双 JK 触发器 74LS112 逻辑功能。真值表_【第十章】触发器和事件
  20. java计算平面度,计算产品面的平面度和平行度(C#代码)

热门文章

  1. 数据量大mysql当月_mysql 1.5倍数据量导致20多倍的执行时间?
  2. 高速缓存的数据结构:拉链散列表
  3. iOS架构-静态库.a的打包及使用(2)
  4. (0006) iOS 开发之JavaScriptCore 实现UIWebView和HTML的交互
  5. 心态很容易受别人影响_心理学:为什么我越来越容易被别人和环境影响
  6. 使用mpvue开发小程序教程(二)
  7. Windows下安装Python扩展模块提示“Unable to find vcvarsall.bat”的问题(转载)
  8. NSLog不打印设置
  9. dorado学习笔记(二)
  10. Hybird混合开发APP初学体验