ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于SpringBoot集成JDBCTemplate的RowMapper问题

2020-02-06 20:02:42  阅读:215  来源: 互联网

标签:Code SpringBoot id 实体类 JdbcTemplate RowMapper JDBCTemplate View


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

View Code

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

 

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

View Code

 

2,添加依赖

View Code

 

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

View Code

 

4.创建实体类,

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

View Code

 

 

5.创建数据库访问层

View Code

代码解释:

创建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

View Code

BookController

View Code

最后,在浏览器中访问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

View Code

 

  如何实现自己的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());
}

  然后在测试对应的接口

才疏学浅,有错误请指出

    

 

标签:Code,SpringBoot,id,实体类,JdbcTemplate,RowMapper,JDBCTemplate,View
来源: https://www.cnblogs.com/banxianer/p/12270113.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有