JdbcTemplate 是Spring提供的一套JDBC模板框架,利用AOP 技术来解决直接使用JDBC时大量重复代码的问题。JdbcTemplate虽然没有MyBatis 那么灵活,但是直接使用JDBC要方便很多。Spring Boot中对Jdbc Template的使用提供了自动化配置类JdbcTemplateAutoConfiguration,部分源码如下:


  从上面这段源码中可以看出,当classpath下存在DataSource和JdbcTemplate 并且DataSource只有一个实例时,自动配置才会生效,若开发者没有提供JdbcOperations,则Spring Boot会自动向容器中注入一个JdbcTemplate(Jdbc Template是JdbcOperations的子类)。由此可以看到,开发者想要使用Jdbc Template,只需要提供JdbcTemplate的依赖和DataSource依赖即可。具体操作步骤

1,创建数据库表并插入数据  

2,添加依赖

3.数据库配置(注意数据库的配置)
在application.properties中配置数据库基本连接信息:

4.创建实体类,

创建Book实体类,代码如下:

5.创建数据库访问层

代码解释:

创建BookDao,注入Jdbc Template。由于已经添加了spring-jdbc相关的依赖,JdbcTemplate会被自动注册到Spring容器中,因此这里可以直接注入Jdbc Template使用。在JdbcTemplate中,增删改三种类型的操作主要使用update和batchUpdate方法来完成。query和queryForObject方法主要用来完成查询功能。另外,还有execute方法可以用来执行任意的SQL、cal方法用来调用存储过程等。·在执行查询操作时,需要有一个/RowMapper f查询出来的列和实体类中的属性一一对应起)来。如果列名和属性名都是相同的,那么可以直接使用BeanPropertyRowMapper;如果列名和属性名不同就需要开发者自己实见RowMapper 接口,将列和实体类属性一一对应起来。

6.创建Service和Controller
创建BookService和BookController,代码如下:

BookService

BookController

最后,在浏览器中访问http://localhost:8080/bookOps地址,控制台打印日志如图5-1所示
addBook>〉>1
updateBoolk>〉>1
getBookById>>>Book{id=1,name='朝花夕拾’,author='鲁迅’}
deleteBoolkById>>>1
getA11Books>>>[Book{id=1,name='朝花夕拾’,author='鲁迅’},Book{id=4,name='西厢记’,author='王实甫’}]

  这里只是介绍SpringBoot集成JDBCTemplate的Demo,重点在于上面说的这句话“·在执行查询操作时,需要有一个/RowMapper f查询出来的列和实体类中的属性一一对应起)来。如果列名和属性名都是相同的,那么可以直接使用BeanPropertyRowMapper;如果列名和属性名不同就需要开发者自己实见RowMapper 接口,将列和实体类属性一一对应起来。”

  那么在上面我们看到,JdbcTemplate已经封装了对应增删改的方法,我们只需直接调用即可,关键在于query查询时候RowMapper的这点上,正如上面所说,如果列名和属性名都是相同的,我们可以直接使用BeanPropertyRowMapper,如果列名和属性名不同就需要开发者自己实见RowMapper 接口,将列和实体类属性一一对应起来。”

  那么到底这个RowMapper是什么 ,官方的源码如下

package org.springframework.jdbc.core;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.lang.Nullable; @FunctionalInterface
public interface RowMapper<T> {
@Nullable
T mapRow(ResultSet var1, int var2) throws SQLException;
}

  不难看出这是一个方法接口 ,里面的抽象法中的ResultSet又是什么呢 ,表示数据库结果集的数据表,通常由执行查询数据库的语句生成,这里我只贴出官方的版本,想看的直接点击ctrl+鼠标左键点进去看,我用的是IDEA

  如何实现自己的RowMapper?参照如下代码

public class BeanRowMapper implements RowMapper<Article> {
  //这里的类名只是为了掩饰 根据自己的情况修改
@Override
public Article mapRow(ResultSet resultSet, int i) throws SQLException {
Bean bean= new Bean();
      //设置不一致的列名与实体字段对应
bean.setId(resultSet.getInt("id"));
bean.setTitle(resultSet.getString("title"));
bean.setDescription(resultSet.getString("description"));
return Bean;
} }

  然后修改对应的Dao代码

/**
* 查询所有数据
*/
public List<Bean> findAll() {
String sql = "SELECT id, title, description FROM Bean";
return jdbcTemplate.query(sql, new BeanRowMapper());
} /**
* 查询单条数据
*/
public BeanfindById(Integer id) {
String sql = "SELECT id, title, description FROM BeanWHERE id = ?";
return jdbcTemplate.queryForObject(sql, new BeanRowMapper());
}

  然后在测试对应的接口

才疏学浅,有错误请指出

    

关于SpringBoot集成JDBCTemplate的RowMapper问题的更多相关文章

  1. springboot集成jdbcTemplate

    这里使用springboot自带的jdbcTemplate连接mysql数据库 1. 添加依赖包 <!-- jdbc --> <dependency> <groupId& ...

  2. SpringBoot集成jdbcTemplate/JPA

    1.pom.xml <!-- jdbcTemplate 依赖 --> <dependency> <groupId>org.springframework.boot& ...

  3. springboot集成JdbcTemplate+druid

    application.yml datasource: username: root password: root url: jdbc:mysql://localhost:3306/early_war ...

  4. springBoot 集成Mysql数据库

    springBoot 集成Mysql数据库 前一段时间,我们大体介绍过SpringBoot,想必大家还有依稀的印象.我们先来回顾一下:SpringBoot是目前java世界最流行的一个企业级解决方案框 ...

  5. SpringBoot使用JdbcTemplate

    前言 本文是对SpringBoot使用JdbcTemplate操作数据库的一个介绍,,提供一个小的Demo供大家参考. 操作数据库的方式有很多,本文介绍使用SpringBoot结合JdbcTempla ...

  6. springboot使用jdbcTemplate连接数据库

    springboot使用jdbcTemplate连接数据库 1.pom.xml: <?xml version="1.0" encoding="UTF-8" ...

  7. 【springBoot】springBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  8. SpringBoot集成security

    本文就SpringBoot集成Security的使用步骤做出解释说明.

  9. springboot集成Actuator

    Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...

随机推荐

  1. 测试驱动开发学习笔记(UTDD)

    title: 测试驱动开发学习笔记(UTDD) date: 2020-08-01 23:59:17 tags: [2020, 学习一门技能, TDD, DevOps] What TDD(Test-Dr ...

  2. VS c# 操作 Microsoft Project mpp 文件 并遍历边关系

    网上找到资料提供了遍历.mpp文件中任务的功能: http://blog.csdn.net/gxf36/article/details/5253792 ======================== ...

  3. SAFe必备——提高团队敏捷性

    规模化敏捷之于项目群,就像Scrum之于敏捷团队.为了创建高质量业务解决方案,企业需要提高自身能力,提升团队和技术敏捷性,实现真正的规模化敏捷. 敏捷发布火车 实现团队和技术敏捷性,首先需要敏捷团队围 ...

  4. 解决Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no jogl in java.library.path问题

    首先要把jonl.jar和gluegen.jar导入到eclipse中,然后把解压后的4个.dll文件也导入到eclipse中 具体操作: jonl文件下载地址 链接:https://pan.baid ...

  5. JS 模仿京东键盘输入内容

    css代码 .search { width: 300px; height: 80px; margin: 0 auto; position: relative; } .con { display: no ...

  6. 【Mysql】SpringBoot_2.1.0+Druid_1.1.10 配置数据源监控服务Yml格式

    访问地址:localhost:8080/druid 按照这个方法和版本配置没问题 版本或高或低可能会出现不兼容 1.添加依赖 <dependency> <groupId>com ...

  7. csapp第六章笔记-存储器结构

    目录 随机访问存储器(Random-Access-Memory) 静态RAM 动态RAM 增强的DRAM 非易失性存储器 磁盘存储 磁盘构成 磁盘容量 磁盘操作 逻辑磁盘块 访问磁盘和连接I/O设备 ...

  8. 通过实际案例摸清楚Spring事务传播的行为

    @ 目录 事务传播 案例准备 案例解析 1.无事务 2. Propagation.REQUIRED 3. Propagation.SUPPORTS 4. Propagation.MANDATORY 5 ...

  9. GUAVA-cache实现

    GUAVA  Cache Guava Cache与ConcurrentMap很相似基于分段锁及线程安全,但也不完全一样.最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除 ...

  10. node-sass 报错的解决方法

    今天在运行项目发现原来好好的项目报错了.报错大致信息如下: 这段代码是我升级node之后里面根据不同的项目位置什么的会有所不同. 简单的说,这段代码意思是node-sass 不兼容 node v8 的 ...