JdbcTemplate是Spring用来简化JDBC操作的核心类,有助于与Spring集成,并且避免了过多冗长的JDBC代码。不过在实际使用中,我们通常使用NamedParameterJdbcTemplate代替JdbcTemplate,因为在传入的参数不确定的时候,使用它会是更好的选择。在本文中,我会介绍如何在SpringBoot中使用NamedParameterJdbcTemplate来完成一整个增删改查的流程。

环境介绍JDK1.8+

SpringBoot:2.1.5.RELEASE

MYSQL:8.0.15

项目搭建:maven 依赖:主要是Jdbc、mysql-connector、lombok三个,lombok用于省略实体类中的getter/setter方法,看起来更加清爽

org.springframework.boot

spring-boot-starter-jdbc

mysql

mysql-connector-java

8.0.15

org.projectlombok

lombok

1.18.8

provided

application.properties配置:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&serverTimezone=UTC

spring.datasource.username=root

spring.datasource.password=123456

spring.datasource.pool-size=30

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

server.port=8885

spring.application.name=user-service

有些版本url不添加serverTimezone=UTC的话会报错:

Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '

此问题为时区问题,在 JDBC 的连接 url 部分加上 serverTimezone=UTC 即可。 - User实体类:

package com.liuj.userjdbc.domain;

import lombok.Data;

/**

* @author hgvgh

* @version 1.0

* @description

* @date 2019/5/31

*/

@Data

public class User {

private String id;

private String name;

private Integer age;

}DAO操作类:UserDao:

@Repository

public class UserDao {

@Autowired

private NamedParameterJdbcTemplate jdbcTemplate;

//其余代码省略

}

插入数据:

public int insert(User user) {

String sql = "INSERT INTO USER (ID, NAME, AGE) VALUES (:id, :name, :age)";

MapSqlParameterSource ps = new MapSqlParameterSource();

ps.addValue("id", user.getId());

ps.addValue("name", user.getName());

ps.addValue("age", user.getAge());

return jdbcTemplate.update(sql, ps);

}

根据ID查询单条数据:

public User getById(String id) {

String sql = "SELECT ID, NAME, AGE FROM USER WHERE ID = :id";

MapSqlParameterSource ps = new MapSqlParameterSource();

ps.addValue("id", id);

RowMapper rm = BeanPropertyRowMapper.newInstance(User.class);

return jdbcTemplate.queryForObject(sql, ps, rm);

}

多条件查询数据集合

(带有模糊查询,需要注意的是LIKE '%' :name '%'中空格不能少):

public List queryList(User user) {

StringBuilder sb = new StringBuilder();

sb.append("SELECT ID, NAME, AGE FROM USER WHERE 1 =1 ");

MapSqlParameterSource ps = new MapSqlParameterSource();

if (!StringUtils.isEmpty(user.getId())) {

sb.append(" AND ID = :id ");

ps.addValue("id", user.getId());

}

if (!StringUtils.isEmpty(user.getName())) {

sb.append(" AND NAME LIKE '%' :name '%' ");

ps.addValue("name", user.getName());

}

if (!StringUtils.isEmpty(user.getAge())) {

sb.append(" AND AGE = :age ");

ps.addValue("age", user.getAge());

}

return jdbcTemplate.query(sb.toString(), ps, BeanPropertyRowMapper.newInstance(User.class));

}

根据条件查询数据条数:

public int count(User user) {

StringBuilder sb = new StringBuilder();

sb.append("SELECT COUNT(1) FROM USER WHERE 1 =1 ");

MapSqlParameterSource ps = new MapSqlParameterSource();

if (!StringUtils.isEmpty(user.getId())) {

sb.append(" AND ID = :id ");

ps.addValue("id", user.getId());

}

if (!StringUtils.isEmpty(user.getName())) {

sb.append(" AND NAME LIKE '%' :name '%' ");

ps.addValue("name", user.getName());

}

if (!StringUtils.isEmpty(user.getAge())) {

sb.append(" AND AGE = :age ");

ps.addValue("age", user.getAge());

}

return jdbcTemplate.queryForObject(sb.toString(), ps, Integer.class).intValue();

}

更新数据:

public int update(User user) {

String sql = "UPDATE USER SET NAME = :name,AGE = :age WHERE ID = :id;";

SqlParameterSource ps = new BeanPropertySqlParameterSource(user);

return jdbcTemplate.update(sql, ps);

}

根据ID删除单条数据:

public int deleteById(String id) {

MapSqlParameterSource ps = new MapSqlParameterSource();

String sql = "DELETE FROM USER WHERE ID = :id";

ps.addValue("id", id);

return jdbcTemplate.update(sql, ps);

}

批量插入数据:

public void batchInsert(List users) {

String sql = "INSERT INTO USER(ID, NAME, AGE) VALUES (:id, :name, :age)";

SqlParameterSource[] batchValues = SqlParameterSourceUtils.createBatch(users.toArray());

jdbcTemplate.batchUpdate(sql, batchValues);

}

批量更新(删除操作类似):

public void batchUpdate(List users) {

String sql = "UPDATE USER SET NAME = :name,AGE = :age WHERE id = :id;";

SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(users.toArray());

jdbcTemplate.batchUpdate(sql, batch);

}

附:数据库脚本:

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

`id` varchar(255) NOT NULL,

`name` varchar(255) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

springboot集合MySQL删除_SpringBoot集成Spring JdbcTemplate并完成增删改查操作相关推荐

  1. Spring整合JDBCTemplate实现数据库增删改查操作

    SpringJDBC: 正常jdbc连接数据库流程: 1.注册驱动 2. 获取连接 2. 获取Statement或者PreparedStatement对象 3. 执行sql操作 4. 处理结果集 查询 ...

  2. oracle 删除xml记录,Oracle之xml的增删改查操作

    工作之余,总结一下xml操作的一些方法和心得! tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本身为xmltype类型则不需要引用xmltype()函数 同名标签用数 ...

  3. 1.mysql sql语句介于两者时间之内的增删改查操作

    1.创建表a CREATE TABLE a ( m int(11) NOT NULL, n int(11) NOT NULL DEFAULT 0, x varchar(255) DEFAULT NUL ...

  4. mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率

    原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...

  5. Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例

    <p>这篇文章介绍如何使用 Jpa 和 Thymeleaf 做一个增删改查的示例.</p> 先和大家聊聊我为什么喜欢写这种脚手架的项目,在我学习一门新技术的时候,总是想快速的搭 ...

  6. c mysql 添加数据类型_MYSQL的常用命令和增删改查语句和数据类型

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

  7. JAVA-使用MyEclipse连接MySQL进行增删改查操作

    前言 在笔者学习搭建WEB项目的时候,遇到过不少问题,如连接驱动失败,连接数据库失败,通过SQL操作数据库失败等等.   今天就做个笔记,关于如何通过JDBC连接MySQL,以及如何在MyEclips ...

  8. python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...

    这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...

  9. java调用oracle删除,使用IDEA对Oracle数据库进行简单增删改查操作

    1.1 java中的数据存储技术 在java中,数据库存取技术可分为如下几类: 1.jdbc直接访问数据库 2.jdo(java data object)是java对象持久化的新的规范,也是一个用于存 ...

最新文章

  1. 第十五章 动态规划——最优二叉搜索树
  2. 分布式熔断降级平台aegis
  3. Python自学之乐-Python字典实现简单的三级菜单
  4. python写入数据的一种措施_Python 文件数据读写的具体实现
  5. 移植mysql到嵌入式ARM平台
  6. C# semaphore的使用
  7. (25)二分频verilog与VHDL编码(学无止境)
  8. JSK-353 求同存异【暴力+排序+二分】
  9. mysql.sock文件丢失的一个原因
  10. session与cookie的区别和用法
  11. 反射注解知识点复习(第一次)
  12. 计算机组成原理核心总结
  13. Python零基础福利来了!
  14. 在线画板_在线画画_在线画图工具-速写板
  15. excel数据分析 - 17个计算统计类函数
  16. 计算机试图启动宏,打开电子表格时,将提示禁用或启用宏的解决方案
  17. base64解码中文乱码
  18. Irvue for Mac(苹果壁纸软件)
  19. 2021年计算机类考研人数,2021年考研79所院校报考人数汇总
  20. 微信的营销策略你了解多少?

热门文章

  1. 【Ubuntu日常技巧】Ubuntu开机自动设置笔记本屏幕亮度
  2. Monte Carlo and bootstrap and Permutation Test
  3. /usr/bin/yum: /usr/bin/python3.6.8: bad interpreter: No such file or directo
  4. 如何提高ElasticSearch 索引速度
  5. [R]提高R语言速度
  6. vue前端项目启动报错,node-sass安装失败
  7. 用Python和Google AppEngine开发基于Google架构的应用软件
  8. python语言中不属于组合数据类型的是_下列不属于组合数据类型的是()。
  9. 小米平板4无信号服务器,小米平板4黑屏假死怎么办
  10. 股指期货套期保值、套利、投机