关于SpringBoot集成JDBCTemplate的RowMapper问题
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问题的更多相关文章
- springboot集成jdbcTemplate
这里使用springboot自带的jdbcTemplate连接mysql数据库 1. 添加依赖包 <!-- jdbc --> <dependency> <groupId& ...
- SpringBoot集成jdbcTemplate/JPA
1.pom.xml <!-- jdbcTemplate 依赖 --> <dependency> <groupId>org.springframework.boot& ...
- springboot集成JdbcTemplate+druid
application.yml datasource: username: root password: root url: jdbc:mysql://localhost:3306/early_war ...
- springBoot 集成Mysql数据库
springBoot 集成Mysql数据库 前一段时间,我们大体介绍过SpringBoot,想必大家还有依稀的印象.我们先来回顾一下:SpringBoot是目前java世界最流行的一个企业级解决方案框 ...
- SpringBoot使用JdbcTemplate
前言 本文是对SpringBoot使用JdbcTemplate操作数据库的一个介绍,,提供一个小的Demo供大家参考. 操作数据库的方式有很多,本文介绍使用SpringBoot结合JdbcTempla ...
- springboot使用jdbcTemplate连接数据库
springboot使用jdbcTemplate连接数据库 1.pom.xml: <?xml version="1.0" encoding="UTF-8" ...
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- SpringBoot集成security
本文就SpringBoot集成Security的使用步骤做出解释说明.
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
随机推荐
- RabbitMQ学习总结(3)-集成SpringBoot
1. pom.xml引用依赖 SpringBoot版本可以自由选择,我使用的是2.1.6.RELEASE,使用starter-web是因为要使用Spring的相关注解,所以要同时加上. <dep ...
- 记一次TOMCAT一段时间自动关闭
最近同事开发的一个项目部署上线后用过几天就TOMCAT自动关闭,并且该项目没有开通对外访问.通过阿里云监控台查看,从升级后系统内存占用上升趋势,CPU等信息没有太大变化. 打印服务器日志后发现全是线程 ...
- 解惑4:java是值传递还是引用传递
一.概述 曾经纠结了很久java的参数传递方式是什么样的,后面粗略的了解了一鳞半爪以后有了大概的印象:"传参数就是值传递,传对象就是引用传递",后面进一步查找了相关资料和文章以后, ...
- 微信小程序后台springboot+mybatis+mysql“采坑”集锦
"采坑"错误集锦 1.service层 错误描述:2019-04-14 22:09:52.027 ERROR 8416 --- [nio-8082-exec-5] o.a.c.c. ...
- LinuX操作系统基础------>了解文件结构和相关的文件操作
了解LinuX文件系统 熟悉LinuX的文件结构 熟悉LinuX的基本操作指令 利用所学指令进行指令组合操作 什么是文件?什么是目录? 文件:一般是一个独立的东西,可以通过某些工具将其打开 目录:可以 ...
- 补充的javascript 数据类型笔记
<p> 变量名命名规范</p> 由字母,数字,下划线,$组成 严格区分大小写 var app和var App 是两个变量 变量名不能以数字开头 ...
- Caused by: org.postgresql.util.PSQLException: 错误: 语法错误 在 "desc" 、语法错误 在 "from" 附近
此错误一般是由于postgres的数据库表字段名定义与关键字重名所致: 如下,创建的数据库表包含名称为“desc”的字段与倒叙查询的desc关键字冲突会导致Caused by: org.postgre ...
- Node.js简易服务器,配合type="module" 实现html文件script标签 ES module引入模块
相信大家在测试type="module" 在html文件中直接模块化引入 js时,会出现一个跨域问题. 当我们将<script ></scirpt> 标签t ...
- python 3.7 jupyter中安装 docx报错
from docx import Document报错: Import Error: No module named ‘exceptions‘ 解决办法: 使用下面的命令重新安装docx !pip i ...
- 一个简单的例子让你很轻松地明白JavaScript中apply、call、bind三者的用法及区别
JavaScript中apply.call.bind三者的用法及区别 引言 正文 一.apply.call.bind的共同用法 二. apply 三. call 四. bind 五.其他应用场景 六. ...