Spring Boot 整合持久层之JdbcTemplate

目录
  • 整合JdbcTemplate
  • 创建数据库和表
  • 创建项目
  • 数据库配置
  • 创建实体类
  • 创建数据库访问层
  • 创建 Service 和 Controller

整合JdbcTemplate

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

@Configuration
@ConditionalOnClass({DataSource.class, JdbcTemplate.class})
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties({JdbcProperties.class})
public class JdbcTemplateAutoConfiguration {
    public JdbcTemplateAutoConfiguration() {
    }
    @Configuration
    @Import({JdbcTemplateAutoConfiguration.JdbcTemplateConfiguration.class})
    static class NamedParameterJdbcTemplateConfiguration {
        NamedParameterJdbcTemplateConfiguration() {
        }
        @Bean
        @Primary
        @ConditionalOnSingleCandidate(JdbcTemplate.class)
        @ConditionalOnMissingBean({NamedParameterJdbcOperations.class})
        public NamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcTemplate jdbcTemplate) {
            return new NamedParameterJdbcTemplate(jdbcTemplate);
        }
    }
    @Configuration
    static class JdbcTemplateConfiguration {
        private final DataSource dataSource;
        private final JdbcProperties properties;

        JdbcTemplateConfiguration(DataSource dataSource, JdbcProperties properties) {
            this.dataSource = dataSource;
            this.properties = properties;
        }
        @Bean
        @Primary
        @ConditionalOnMissingBean({JdbcOperations.class})
        public JdbcTemplate jdbcTemplate() {
            JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSource);
            Template template = this.properties.getTemplate();
            jdbcTemplate.setFetchSize(template.getFetchSize());
            jdbcTemplate.setMaxRows(template.getMaxRows());
            if (template.getQueryTimeout() != null) {
                jdbcTemplate.setQueryTimeout((int)template.getQueryTimeout().getSeconds());
            }
            return jdbcTemplate;
        }
    }
}

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

创建数据库和表

在数据库中创建表,如下:

CREATE TABLE `book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `author` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `chapter05`(`id`, `name`, `author`) VALUES (1, '斗罗大陆Ⅰ', '唐家三少');
INSERT INTO `chapter05`(`id`, `name`, `author`) VALUES (2, '斗罗大陆Ⅱ', '唐家三少');

创建项目

创建 Spring Boot 项目 ,添加依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.9</version>
</dependency>

spring-boot-starter-jdbc 中提供了 spring-jdbc,另外还加入了数据库驱动依赖和数据库连接池依赖

数据库配置

在application.properties 中配置数据库基本连接信息

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/weirdo
spring.datasource.username=root
spring.datasource.password=root

创建实体类

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

public class Book {
    private int id;
    private String name;
    private String author;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}

创建数据库访问层

创建 BookDao,代码如下:

@Repository
public class BookDao {
    @Autowired
    JdbcTemplate jdbcTemplate;
    public int addBook(Book book) {
        return jdbcTemplate.update("INSERT INTO book(name,author) VALUES (?,?)",
                book.getName(), book.getAuthor());
    }
    public int updateBook(Book book) {
        return jdbcTemplate.update("UPDATE book SET name=?,author=? WHERE id=?",
                book.getName(), book.getAuthor(), book.getId());
    }
    public int deleteBookById(Integer id) {
        return jdbcTemplate.update("DELETE FROM book WHERE id=?", id);
    }
    public Book getBookById(Integer id) {
        return jdbcTemplate.queryForObject("select * from book where id=?",
                new BeanPropertyRowMapper<>(Book.class), id);
    }
    public List<Book> getAllBooks() {
        return jdbcTemplate.query("select * from book",
                new BeanPropertyRowMapper<>(Book.class));
    }
}

代码解释:

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

创建 Service 和 Controller

创建 BookService 和 BooKController

@Service
public class BookService {
    @Autowired
    BookDao bookDao;
    public int addBook(Book book) {
        return bookDao.addBook(book);
    }
    public int updateBook(Book book) {
        return bookDao.updateBook(book);
    }
    public int deleteBookById(Integer id) {
        return bookDao.deleteBookById(id);
    }
    public Book getBookById(Integer id) {
        return bookDao.getBookById(id);
    }
    public List<Book> getAllBooks() {
        return bookDao.getAllBooks();
    }
}
@RestController
public class BookController {
    @Autowired
    BookService bookService;
    @GetMapping("/bookOps")
    public void bookOps() {
        Book b1 = new Book();
        b1.setId(99);
        b1.setName("西厢记");
        b1.setAuthor("王实甫");
        int i = bookService.addBook(b1);
        System.out.println("addBook>>>" + i);
        Book b2 = new Book();
        b2.setId(1);
        b2.setName("朝花夕拾");
        b2.setAuthor("鲁迅");
        int updateBook = bookService.updateBook(b2);
        System.out.println("updateBook>>>"+updateBook);
        Book b3 = bookService.getBookById(1);
        System.out.println("getBookById>>>"+b3);
        int delete = bookService.deleteBookById(2);
        System.out.println("deleteBookById>>>"+delete);
        List<Book> allBooks = bookService.getAllBooks();
        System.out.println("getAllBooks>>>"+allBooks);
    }
}

最后在浏览器中访问 http://localhost:8081/bookOps 地址,控制台打印日志如下:

addBook>>>1
updateBook>>>1
getBookById>>>com.sang.Book@35e33288
deleteBookById>>>1
getAllBooks>>>[com.sang.Book@2f7c2d6d, com.sang.Book@32db4b36]

数据库中的数据如下:

到此这篇关于Spring Boot 整合持久层之JdbcTemplate的文章就介绍到这了,更多相关Spring Boot JdbcTemplate内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot使用JdbcTemplate操作数据库

    前言 本文是对SpringBoot使用JdbcTemplate操作数据库的一个介绍,提供一个小的Demo供大家参考. 操作数据库的方式有很多,本文介绍使用SpringBoot结合JdbcTemplate. 新建项目 新建一个项目.pom文件中加入Jdbc依赖,完整pom如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM

  • 详解Springboot之整合JDBCTemplate配置多数据源

    一.前言 现在在我们的项目中,使用多数据源已经是很常见的,下面,这里总结一下springboot整合jdbcTemplate配置多数据源的代码示例,以方便以后直接使用. 二.配置文件 spring: datasource: datasourceone: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/eesy?serverTimezone=UTC&characterEncoding=utf8&u

  • 详解SpringBoot中JdbcTemplate的事务控制

    目录 前言 原生Jdbc的事务控制 Spring的声明式事务控制 尝试JdbcTemplate的事务控制 TransactionTemplate的编程式事务控制 前言 JdbcTemplate是spring-jdbc提供的数据库核心操作类,那对JdbcTemplate进行事务控制呢? 我的环境:spring-boot-2.1.3,druid-1.1.3. 原生Jdbc的事务控制 即,批处理+自动提交的控制方式, public static void demo(String[] args) thr

  • springBoot使用JdbcTemplate代码实例

    springBoot使用JdbcTemplate 如果是通过spring自动注入的jdbcTemplate,配好application.properties在其他类中就能在其他类中直接使用. 如果通过new JdbcTemplate()出来的就需要自己配置DataSource. 自动注入如下 application.properties文件 spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC spri

  • Springboot集成jdbcTemplate过程解析

    一 说明 实际工作中其实很少会用到jdbcTemplate去操作数据库,因为其使用方式不是很灵活,sql的拼接能力不强:实际上jdbcTemplate是属于spring自带的数据层模板,在spring中可以说是比较失败的一个案例,原因是当代流行mybatis当做持久层访问数据库,其优越的sql拼接能力.动态sql.半自动化映射.和易于sql优化的特性,深受广大互联网公司的喜爱,并且mybatis的市场占有率不断的上升,hibernate的市场不断缩水,可以说hibernate已经这种强映射关系的

  • SpringBoot  jdbctemplate使用方法解析

    Spring为传统的jdbc API进行封装,简化持久层操作,虽然jdbcTemplate很灵活,但和ORM框架相比jdbcTemplate功能就显得力不从心了,学习jdbcTemplate是为学习ORM框架做铺垫 ORM:对象关系映射 O:对象 R:关系 M:映射 下面简单介绍下 Springboot 应用中如何使用 JdbcTemplate 对数据库进行操作: 1.使用 IDEA 创建 SpringBoot 项目,引入数据库连接依赖: <dependency> <groupId>

  • Springboot jdbctemplate整合实现步骤解析

    一.创建项目导入依赖 1.1 1.2 1.3 二.创建service,pojo,controller 2.1 创建一个实体类User类属性userId,userName,userPwd 2.2 我这里sql语句直接写service层了 spring提供jdbctemplate的自动话配置,所以我们直接使用就好了, jdbctemplate提供的增删改都是update()方法 查询所有query(),有俩种方法, 第一种RowMapper<User>是查询数据库字段和类的属性名不一致的情况 第二

  • Spring Boot 整合持久层之JdbcTemplate

    目录 整合JdbcTemplate 创建数据库和表 创建项目 数据库配置 创建实体类 创建数据库访问层 创建 Service 和 Controller 整合JdbcTemplate JdbcTemplate 是 Spring 提供的一套 JDBC 模板框架,利用 AOP 技术来解决直接使用 JDBC 时大量重复代码的问题.JdbcTemplate 虽然没有 Mybatis 灵活,但是比直接使用 JDBC 方便很多.Spring Boot 中对 JdbcTemplate 的使用提供了自动化配置类

  • Spring Boot整合持久层之JdbcTemplate多数据源

    目录 多数据源 JdbcTemplate 多数据源 1. 创建数据库 2.创建项目 3. 配置数据库连接 4. 配置数据源 5. 配置 JdbcTemplate 6. 创建BookController 7. 测试 多数据源 所谓多数据源,就是一个 Java EE 项目中采用了不同数据库实例中的多个库,或者同一个数据库实例中多个不同的库.一般来说,采用 MyCat 等分布式数据库中间件是比较好的解决方案,这样可以把数据库读写分离.分库分表.备份等操作交给中间件去做,Java 代码只需要专注于业务即

  • Spring Boot整合持久层之JPA多数据源

    目录 JPA 多数据源 准备工作 创建 JPA 配置 创建 Repository 创建 Controller JPA 多数据源 JPA 和 MyBatis 配置多数据源类似,不同的是,JPA 配置时主要提供不同的 LocalContainerEntityManagerFactoryBean 以及事务管理器. 项目目录结构如下: 准备工作 创建 Spring Boot Web 项目,添加如下依赖: <dependency> <groupId>org.springframework.b

  • Spring Boot 整合持久层之Spring Data JPA

    目录 整合Spring Data JPA 1. 创建数据库 2. 创建项目 3. 数据库配置 4. 创建实体类 5. 创建 BookDao 接口 6. 创建 BookService 7. 创建 BookController 8. 测试 整合Spring Data JPA JPA (Java Persistence API)和 Spring Data 是两个范畴的概念. Hibernate 是一个 ORM 框架,JPA 则是一种ORM,JPA 和 Hibernate 的关系就像 JDBC 与 JD

  • Spring Boot 整合持久层之MyBatis

    目录 整合MyBatis 1. 创建项目 2. 创表实体类等 3. 创建数据库访问层 4. 创建 BookMapper.xml 5. 创建Service和BookController 6. 配置 pom.xml 文件 整合MyBatis MyBatis 是一款优秀的持久层框架,原名 iBatis ,2010年迁移到 Goole Code 并改名为 MyBatis ,2013年迁移到 GitHub 上.MyBatis 支持定制化 SQL .存储过程及高级映射.MyBatis 几乎避免了所有的 JD

  • Spring Boot整合web层实现过程详解

    Spring Boot中对Spring MVC的文件上传是一脉相传的,我们双击shift去搜CommonsMultipartResolver这个类,它是文件上传的一个实现类.我们先看一下源码: 我们可以看到它是MultipartResolver的实现类,我们再Ctrl+H,就可以看到右侧MultipartResolver的两个实现类.第一个实现类在servlet3.0之后,什么都不用加,就可以直接使用.第二个实现类的兼容性要好一些,早期的servlet也可以使用,但需要自己额外的加依赖.那么在S

  • Spring Boot 整合 TKMybatis 二次简化持久层代码的实现

    经常用 MyBatis 的的都知道,使用这个框架存在一个非常不友善的问题就是,就是每操作一个单表就需要自己手写一个 xml 文件,虽然说可以用工具生成 xml 和实体类可以解决这个问题,但是二次开发的时候对某个表字段进行修改的时候,生成 xml 文件就不现实啦.最近发现 tk.mybatis 就非常好的解决了这个问题.tk.mybatis 整合了 MyBatis 框架,在其基础上提供了很多工具,封装了常用的增删改查 SQL 语句,可以让我们的开发效率更高.在这里和大家分享一下. 引入依赖 在 p

  • springboot整合持久层的方法实现

    目录 1. springboot整合jdbcTemplate 1.1 pom.xml 1.2 application.properties 1.3 model 1.4 service 1.5 serviceImpl,crud案例 2. jdbcTemplate配置多数据源 2.1 pom.xml 2.2 application.properties 2.3 实体类 2.4 数据源配置 2.5 jdbctemplate配置 2.6 注入模板测试 3. springboot整合mybatis(注解方

  • Spring Boot整合Mybatis并完成CRUD操作的实现示例

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官方一点: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordina

  • Spring Boot整合EasyExcel(完整版包含上传解析excel和下载模板)

    1. 加入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.7</version> </dependency> 2. 对读取excel内容(批量添加) @PostMapping("plUpdate") public R plUpdate(@Request

随机推荐