Spring Boot 集成 JDBC

Spring Boot 集成 JDBC

引言

今天有一个面向关系型数据库的应用程序接口,想给大家分享一下,用于Java数据库连接 进行查询和更新数据库,它就是 —— JDBC 。具体该如何使用呢?快来物色物色!

首先,我先带大家了解下 JDBC

JDBC 介绍

JDBCJava数据库连接,是 Java Database Connectivity简称,是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口提供了诸如查询和更新数据库中数据的方法

是一种用于执行 SQL 语句的 API,可以为多种关系数据库提供统一访问,它是由一组用 Java 语言编写的类和接口。是 Java 访问数据库的标准规范。

JDBC 也是 Sun Microsystems 的商标

集成过程

一、创建数据库,建测试 user 表

创建 spring-jdbc 数据库
CREATE DATABASE IF NOT EXISTS springboot-jdbc
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
创建 user 数据表
CREATE TABLE `springboot-jdbc`.`user`  (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `username` varchar(255) NULL COMMENT '用户名',
  `password` varchar(255) NULL COMMENT '密码',
  `sex` int(2) NULL COMMENT '性别',
  `age` int(5) NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
);

二、 依赖配置

添加依赖

在对应的项目 pom.xml 中引入 JDBCMySQL 的依赖包

<!-- spring boot 集成 jdbc 依赖包 -->
<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>
添加配置

Spring Boot 中的配置 JDBCymlproperties 选一种配置即可

  • application.yml
spring:
  datasource:
    #指定数据库驱动
    driver-class-name: com.mysql.cj.jdbc.Driver
    #数据库类型
    platform: mysql
    #数据库jdbc连接url地址,serverTimezone设置数据库时区 Asia/Shanghai
    url: jdbc:mysql://localhost:3306/springboot-jdbc?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    #数据库账号
    username: root
    #数据库密码
    password: 123
  • application.properties
#指定数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库类型
spring.datasource.platform=mysql
#数据库jdbc连接url地址,serverTimezone设置数据库时区 Asia/Shanghai
spring.datasource.url=jdbc:mysql://localhost:3306/springboot-jdbc?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false
#数据库账号
spring.datasource.username=root
#数据库密码
spring.datasource.password=123

IP与端口、以及数据库的账号与密码等记得改为自己的

因 SpringBoot 集成了 jdbc的配置文件,所以不需要专门去写配置类及初始化!

这时候只需要直接测试就可以了!

三、 创建 User 实体类

User

package com.example.springbootjdbc.bean;


import lombok.Data;

/**
 * @ClassName: User
 * @Description: (描述)
 * @Author: WHT
 * @Version: V1.0
 * @Date: 2020/11/19 下午8:52
 */

@Data
public class User {
    /**
     * ID
     */
    private Integer id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 性别
     */
    private Integer sex;

    /**
     * 年龄
     */
    private Integer age;
    
}

完成了JDBCSpringBoot配置和实体类的创建,就可以通过依赖注入的方式使用JdbcTemplate

四、 创建 Dao 数据操作类,使用 JDBC

package com.example.springbootjdbc.dao;


import com.example.springbootjdbc.bean.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * @ClassName: UserDao
 * @Description: (描述)
 * @Author: WHT
 * @Version: V1.0
 * @Date: 2020/11/19 下午9:38
 */

@Repository
public class UserDao {

    /**
     * SpringBoot提供的数据库操作类
     */
    @Resource
    private JdbcTemplate jdbcTemplate;

    /**
     * JDBC 查询数据
     *
     * @return List<User>
     */
    public List<User> getUserList() {

        //SQL
        String sql = "SELECT  *  FROM user ";

        //返回结果
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));
    }


    /**
     * JDBC 写入数据
     *
     * @param user User
     */
    public int insertUser(User user) {

        //SQL
        String sql = " INSERT INTO user (username , password , sex , age ) values(?,?,?,?)";

        //执行写入
        return jdbcTemplate.update(sql, user.getUsername(), user.getPassword(), user.getSex(), user.getAge());
    }


    /**
     * 根据 条件查询数据
     *
     * @param id id
     * @return User
     */
    public User getUser(Integer id) {
        final User user = new User();

        //SQL
        String sql = "SELECT *  FROM user WHERE id = " + id;

        jdbcTemplate.query(sql, new RowCallbackHandler() {
            //映射每行数据
            @Override
            public void processRow(ResultSet rs) throws SQLException {
                user.setId(id);
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setSex(rs.getInt("sex"));
                user.setAge(rs.getInt("age"));
            }
        });
        return user;
    }

    /**
     * JDBC 更新数据
     *
     * @param user
     * @return int
     */
    public int updateUser(User user) {

        //SQL
        String sql = "UPDATE user SET username = ? , password = ? , sex = ? , age = ?  where id = ?";

        //返回结果
        return jdbcTemplate.update(sql, user.getUsername(), user.getPassword(), user.getSex(), user.getAge(), user.getId());
    }

    /**
     * JDBC 删除数据
     *
     * @param id id
     */

    public int deleteUser(Integer id) {

        //SQL
        String sql = "DELETE FROM user WHERE id = ?";

        return jdbcTemplate.update(sql, id);
    }

}

五、service 接口及 impl 接口实现类 逻辑层

service 接口

package com.example.springbootjdbc.service;


import com.example.springbootjdbc.bean.User;

import java.util.List;

/**
 * @ClassName: UserSerivce
 * @Description: (描述)
 * @Author: WHT
 * @Version: V1.0
 * @Date: 2020/11/19 下午10:07
 */
public interface UserSerivce {


    /**
     * 查询数据
     */
    List<User> getUserList();


    /**
     * 写入数据
     */
    int insertUser(User user);


    /**
     * 条件查询
     */
    User getUser(Integer id);

    /**
     * 更新数据
     */
    int updateUser(User user);


    /**
     * 删除数据
     */
    int deleteUser(Integer id);


}

UserServiceImpl

package com.example.springbootjdbc.service.impl;


import com.example.springbootjdbc.bean.User;
import com.example.springbootjdbc.dao.UserDao;
import com.example.springbootjdbc.service.UserSerivce;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @ClassName: UserServiceImpl
 * @Description: (描述)
 * @Author: WHT
 * @Version: V1.0
 * @Date: 2020/11/19 下午10:12
 */

@Service
public class UserServiceImpl implements UserSerivce {


    @Resource
    private UserDao userDao;


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

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

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

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

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

六、 测试使用

直接使用 SpringBootTest 进行测试

给 Test 基础类添加 开始和结束测试

SpringBootMemcacheXmemcachedApplicationTests 基础类

package com.example.springbootmemcachexmemcached;

import lombok.extern.slf4j.Slf4j;
import org.junit.After;
import org.junit.Before;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


/**
 * @ClassName: SpringBootMemcacheXmemcachedApplicationTests
 * @Description: (描述) SpringBootTest 测试基础类,其他类继承此类
 * @Author: WHT
 * @Version: V1.0
 * @Date: 2020/10/12 15:55
 */

@RunWith(SpringRunner.class)
@Slf4j
@SpringBootTest
class SpringBootMemcacheXmemcachedApplicationTests {

    private Long time;

    @Test
    void contextLoads() {

    }

    @Before
    public void setUp() {
        this.time = System.currentTimeMillis();
        log.info("==> 测试开始执行 <==");
    }

    @After
    public void tearDown() {
        log.info("==> 测试执行完成,耗时:{} ms <==", System.currentTimeMillis() - this.time);
    }

}

JDBC 测试类继承 SpringBootTest测试基础类

JDBCTest 测试类

package com.example.springbootjdbc;

import com.example.springbootjdbc.bean.User;
import com.example.springbootjdbc.service.UserSerivce;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.Test;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;


import java.util.List;

/**
 * @ClassName: JDBCTest
 * @Description: (描述)
 * @Author: WHT
 * @Version: V1.0
 * @Date: 2020/11/19 下午11:06
 */
@Slf4j
@Component
public class JDBCTest extends SpringBootJdbcApplicationTests {

    @Autowired
    private UserSerivce userSerivce;

    /**
     * 新增数据
     */

    @Test
    public void save() {

        User user = new User();
        user.setUsername("张三");
        user.setPassword("zhangsan");
        user.setSex(0);
        user.setAge(30);

        int row = userSerivce.insertUser(user);
        //判断结果
        if (row == -1) {
            System.out.println("新增失败");
        } else {
            System.out.println("新增成功");

        }
    }

    /**
     * 查询数据
     */
    @Test
    public void query() {
        //查寻数据
        List<User> userList = userSerivce.getUserList();

        //返回数据
        System.out.println(userList.toString());
    }


    /**
     * 更新数据
     */
    @Test
    public void update() {
        //新建对象传递数据
        User user = new User();
        user.setId(1);
        user.setUsername("修改");
        user.setPassword("123");
        user.setSex(1);
        user.setAge(10);
        //执行更新操作
        int row = userSerivce.updateUser(user);
        //判断结果
        if (row == -1) {
            System.out.println("新增失败");
        } else {
            System.out.println("新增成功");

        }
    }

    /**
     * 删除数据
     */
    @Test
    public void delete() {
        //初始化数据
        Integer id = 1;
        //执行删除
        int row = userSerivce.deleteUser(id);
        //判断结果
        if (row == -1) {
            System.out.println("新增失败");
        } else {
            System.out.println("新增成功");

        }
    }

}

自行查看测试结果日志及数据库是否添加成功,如发现数据库数据查询和更新了,证明测试成功

示例代码

如需有小伙伴想要 示例代码点击/复制 以下链接查看

GitHub - 示例代码 文末查看👇

Gitee - 示例代码 文末查看👇

总结

看到这今天的 Spring Boot 集成 Memcached 就到此完结了,是不是非常简单,非常nice,这下再也不怕数据库的压力大了。快去赶快试试!别着急,还有更多的秘密等着你来探索!

在这里插入图片描述

分享嗨起来,美德传起来,点个星标从此探索之路不迷茫!

微信扫描二维码,关注我的原创日更公众号,可以查看更多程序的秘密!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值