pringBoot教程(十) | SpringBoot集成JdbcTemplate

这篇具有很好参考价值的文章主要介绍了pringBoot教程(十) | SpringBoot集成JdbcTemplate。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot教程(十) | SpringBoot集成JdbcTemplate

1. JdbcTemplate概述

经过了前面的几篇文章,我们几乎讲解完毕了SpringBoot中前端控制器中的一些操作,体验到SpringBoot为我们使用框架所带来的便捷。前面文章中的所有案例,总共只引入了一个 web-starter, 配置也很少。从今天开始,我们来开始研究一下,SpringBoot如何完成数据的持久化操作。

一般持久化的操作都是有一些专门来做持久化的框架来完成的,比如原始一些的JDBC, 老牌劲旅JPA(hibernate), 还有现在用的比较或的mybatis和MybatisPlus, 而SpringBoot中我们也是先要选择要使用的持久层框架,然后使用SpringBoot进行集成。而集成的步骤由于SpringBoot的自动化配置功能而大大简化。

今天我们先来搞个简单点的,先来个JdbcTemplate, 这个是Spring基于Jdbc而封装的一个持久层框架,致力于轻量、便捷地操作数据库。他的操作很简单,但是不如mybatis和jpa功能全面,但是比原生jdbc强点,说实话,实战中用的也比较少。

2. 集成步骤

2.1 引入依赖

xml复制代码<!-- jdbcTemplate -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
 
<!-- MySQL连接 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

2.2 配置数据库连接

在SpringBoot的配置文件中,配置数据库的连接,这是所有要操作数据库都必须要进行的配置。主要包含使用的驱动类,数据库的连接地址,用户名密码等。

yml复制代码spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot_learning
    username: root
    password: root

我在自己的本地数据库里创建一个名字叫springboot_learning的数据库用于测试。

然后我们创建一张user表。

sql复制代码CREATE TABLE `springboot_learning`.`t_user`  (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(40) NULL COMMENT '姓名',
  `age` int(20) NULL COMMENT '年龄',
  `address` varchar(100) NULL COMMENT '地址',
  `create_time` datetime(0) NULL COMMENT '创建时间',
  `update_time` datetime(0) NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
);

2.3开发实体和DAO

创建一个entity文件夹,然后创建一个实体类User

java复制代码@Data
public class User {

    private Integer id;

    private String name;

    private Integer age;

    private String address;

    private Date createTime;

    private Date updateTime;

}

开发UserDao 包含常用的增删改查接口

UserDao接口

java复制代码/**
 * @interface: UserDao
 * @description:
 * @author: sh.Liu
 * @date: 2022-01-14 16:37
 */
public interface UserDao {
    /**
     * 根据id查询
     * @param id
     * @return
     */
    User getUserById(Integer id);

    /**
     * 查询所有用户
     * @return
     */
    List<User> listUser();

    /**
     * 保存用户
     * @param user
     * @return
     */
    int save(User user);

    /**
     * 更新用户
     * @param id
     * @param user
     * @return
     */
    int update(Integer id, User user);

    /**
     * 删除用户
     * @param id
     * @return
     */
    int delete(Integer id);


}

UserDaoImpl 实现:在类中注入 JdbcTemplate 接口,这个是spring为我们提供的,用来操作数据库的核心对象。这个类上也要加上 @Repository 注解,用于标识这个类是用来处理数据库操作的。可以被Spring扫描到。

UserDaoImpl代码如下:

java复制代码package com.lsqingfeng.springboot.dao.jdbcTemplate.impl;

import com.lsqingfeng.springboot.dao.jdbcTemplate.UserDao;
import com.lsqingfeng.springboot.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @className: UserDaoImpl
 * @description:
 * @author: sh.Liu
 * @date: 2022-01-14 16:40
 */
@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public User getUserById(Integer id) {
        User user  = jdbcTemplate.queryForObject("select * from t_user where id = ?", new BeanPropertyRowMapper<User>(User.class), id);
        return user;
    }

    @Override
    public List<User> listUser() {
        List<User> users = jdbcTemplate.query("select * from t_user", new BeanPropertyRowMapper<User>(User.class));
        return users;
    }

    @Override
    public int save(User user) {
        return jdbcTemplate.update("insert into t_user(name, age, address, create_time, update_time) values(?, ?, ?,?,?)",
                user.getName(),user.getAge(), user.getAddress(),new Date(),new Date());
    }

    @Override
    public int update(Integer id, User user) {
        return jdbcTemplate.update("UPDATE t_user SET name = ? , age = ? ,address = ? ,update_time = ? WHERE id=?",
                user.getName(), user.getAge(), user.getAddress(), new Date(), id);
    }

    @Override
    public int delete(Integer id) {
        return jdbcTemplate.update("DELETE from tb_user where id = ? ",id);
    }
}

我们包装一个Service层,目前主流的项目接口也都是Controller-Service-Dao这样的逻辑。

2.4 Service层开发

创建一个service包,加一个UserService接口。service层中一般用来处理业务逻辑,一般把有事务的代码放到这一层,一般是根据业务模块进行划分,名字可以不与实体名或者表名开发,他里边一般是对多个Dao层操作的封装。想要彻底搞懂Service层也能需要更多项目的历练。这里以演示为主,也没有特别复杂的业务,我们就直接起名UserService.里面就直接把Dao层中的方法全部拿过来。

UserService

java复制代码/**
 * @interface: UserService
 * @description:
 * @author: sh.Liu
 * @date: 2022-01-17 13:56
 */
public interface UserService {
    /**
     * 根据id查询
     * @param id
     * @return
     */
    User getUserById(Integer id);

    /**
     * 查询所有用户
     * @return
     */
    List<User> listUser();

    /**
     * 保存用户
     * @param user
     * @return
     */
    int save(User user);

    /**
     * 更新用户
     * @param id
     * @param user
     * @return
     */
    int update(Integer id, User user);

    /**
     * 删除用户
     * @param id
     * @return
     */
    int delete(Integer id);


}

实现类中,直接注入Dao ,通过调用Dao实现相同功能。

java复制代码/**
 * @className: UserServiceImpl
 * @description:
 * @author: sh.Liu
 * @date: 2022-01-17 13:56
 */
@Service
public class UserServiceImpl implements UserService {

    // 这是构造方法注入,相当于 @autowired
    private final UserDao userDao;

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public User getUserById(Integer id) {
        return userDao.getUserById(id);
    }

    @Override
    public List<User> listUser() {
        return userDao.listUser();
    }

    @Override
    public int save(User user) {
        return userDao.save(user);
    }

    @Override
    public int update(Integer id, User user) {
        return userDao.update(id, user);
    }

    @Override
    public int delete(Integer id) {
        return userDao.delete(id);
    }
}

2.5 开发Controller进行测试

Dao和Service都已经准备好了,接下来我们就开发一个Controller来进行测试,看看是否可以成功的操作数据库。

java复制代码package com.lsqingfeng.springboot.controller;

import com.lsqingfeng.springboot.base.Result;
import com.lsqingfeng.springboot.entity.User;
import com.lsqingfeng.springboot.exception.BizException;
import com.lsqingfeng.springboot.service.UserService;
import org.springframework.web.bind.annotation.*;

/**
 * @className: JdbcController
 * @description:
 * @author: sh.Liu
 * @date: 2022-01-17 13:58
 */
@RestController
@RequestMapping("jdbc")
public class JdbcController {

    /**
     * 这是构造方法注入,相当于 @autowired
     */
    private final UserService userService;

    public JdbcController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping("save")
    public Result save(@RequestBody User user){
        userService.save(user);
        return Result.success();
    }

    @PostMapping("update")
    public Result update(@RequestBody User user){
        if (user.getId() == null) {
            throw new BizException("更新操作id不能为空");
        }
        userService.update(user.getId(), user);
        return Result.success();
    }

    @GetMapping("get/{id}")
    public Result getById(@PathVariable Integer id){
        return Result.success(userService.getUserById(id));
    }

    @GetMapping("list")
    public Result list(){
        return Result.success(userService.listUser());
    }

    @GetMapping("delete/{id}")
    public Result delete(@PathVariable Integer id){
        userService.delete(id);
        return Result.success();
    }
}

我们使用postMan进行测试。注意别忘了传header, 因为咱们的拦截器里要求必须传header

pringBoot教程(十) | SpringBoot集成JdbcTemplate,spring boot,后端,java

返回成功,查看数据库中数据:

pringBoot教程(十) | SpringBoot集成JdbcTemplate,spring boot,后端,java

数据保存成功。

我们再试试getById方法

pringBoot教程(十) | SpringBoot集成JdbcTemplate,spring boot,后端,java

其他的方法就不在演示了。

3. 总结

关于Spring所提供的JdbcTemplate的用法就是这些,Spring集成JdbcTemplate的方法也是比较简单的,整体就是先引入依赖,在配置数据库的连接,然后使用jdbcTemplate这个类就可以了,JdbcTemplate 类中就已经封装了大部分对于数据库的操作。简单是简单,但是这个框架在企业级项目中应用是比较少的,一般用于对于操作数据库的要求不高的项目,因为他就是对jdbc的简单封装,所有的sql都是写入到代码中,维护性差,看起来也比较乱。后边我们会继续介绍比较主流的DAO层框架Mybatis和JPA的用法。希望本篇文章对大家有所帮助。

另: 配套项目代码已托管中gitCode: gitcode.net/lsqingfeng/…文章来源地址https://www.toymoban.com/news/detail-791577.html

到了这里,关于pringBoot教程(十) | SpringBoot集成JdbcTemplate的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RocketMQ 学习教程——(二)SpringBoot 集成 RocketMQ

    在 Maven 仓库【https://mvnrepository.com/】中搜索 RocketMQ 依赖: 在 SpringBoot 项目的 Pom.xml 文件中添加对应 MQ 版本的依赖: YAML 配置 在 SpringBoot 项目的 yml 配置文件中添加以下配置: 创建监听器 创建一个 MQMsgListener 类用于监听 RocketMQ 的消息,类上标注注解: @Component 、 @RocketMQMe

    2024年02月03日
    浏览(45)
  • springboot集成knife4j详细教程

    使用原生的swagger作为接口文档,功能不够强大,并且默认的ui比较简陋,不符合大众审美。所以实际开发中推荐使用knife4j对swagger进行增强。knife4j的地址:https://gitee.com/xiaoym/knife4j 想要使用knife4j非常简单,只要在Springboot项目中引入knife4j的依赖即可 注意:引入knife4j后会自动

    2024年02月20日
    浏览(37)
  • java springboot集成微信小程序【详细教程】

    注册小程序点我 小程序临时素材接口 微信小程序用户接口 效果 点击登录 返回code码,我们拿code码进行获取openid 获取头像昵称 拿到返回的信息进行获取用户信息 获取用户信息

    2024年02月11日
    浏览(41)
  • SpringBoot集成微信支付JSAPIV3保姆教程

    最近为一个公众号h5商城接入了微信支付功能,查找资料过程中踩了很多坑,以此文章记录一下和大家分享 微信支付功能需要开通企业号并进行资质认证,费用一年300,且需企业营业执照等信息,对公账户打款验证 登录微信公众平台https://mp.weixin.qq.com/,创建服务号 如果已有

    2024年02月09日
    浏览(36)
  • 【Springboot集成Neo4j完整版教程】

    🚀 Neo4j 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验

    2024年02月10日
    浏览(52)
  • Java集成支付宝沙箱支付,详细教程(SpringBoot完整版)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 easy支付官方文档:https://opendocs.alipay.com/open/009ys9 通用版文档:https://opendocs.alipay.com/open/02np94 支付宝沙箱的配置: 注册支付宝开发者账户,进入开发者控制台 沙箱快捷入口: https://open.alipay.com/develop/

    2024年02月20日
    浏览(53)
  • 【Redis】Redis 的学习教程(七)之 SpringBoot 集成 Redis

    在前几篇文章中,我们详细介绍了 Redis 的一些功能特性以及主流的 java 客户端 api 使用方法。 在当前流行的微服务以及分布式集群环境下,Redis 的使用场景可以说非常的广泛,能解决集群环境下系统中遇到的不少技术问题,在此列举几个使用 Redis 经常用到的功能: 分布式缓

    2024年02月10日
    浏览(37)
  • 【Redis】Redis 的学习教程(五)之 SpringBoot 集成 Redis

    在前几篇文章中,我们详细介绍了 Redis 的一些功能特性以及主流的 java 客户端 api 使用方法。 在当前流行的微服务以及分布式集群环境下,Redis 的使用场景可以说非常的广泛,能解决集群环境下系统中遇到的不少技术问题,在此列举几个使用 Redis 经常用到的功能: 分布式缓

    2024年02月12日
    浏览(42)
  • Spring Boot进阶(48):【实战教程】SpringBoot集成WebSocket轻松实现实时消息推送

            WebSocket是一种新型的通信协议,它可以在客户端与服务器端之间实现双向通信,具有低延迟、高效性等特点,适用于实时通信场景。在SpringBoot应用中,集成WebSocket可以方便地实现实时通信功能,如即时聊天、实时数据传输等。         本文将介绍如何在Sprin

    2024年02月09日
    浏览(61)
  • idea集成Docker + Docker部署SpringBoot项目到云服务器 保姆级教程

    本人使用资源: 云服务器主机:腾讯云宝塔linux 操作系统:OpenCloudOS 8.6 本文分别讲解了: 1、idea如何集成并使用docker 2、springboot项目如何引入Docker管理 3、如何将一个springboot项目使用Docker打包为一个镜像 不仅讲解了方法,还列出了在整个过程中会遇到的一些问题和注意事项

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包