SpringBoot整合JDBC

一、创建SpringBoot项目

选择Spring Web、JDBC API、MySQL Driver







二、在pom配置文件中修改JDBC版本,导入lombok

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- 在pom文件中修改jdbc版本 -->
<version>5.1.47</version>
<scope>runtime</scope>
</dependency> <!-- 导入lombok -->
<!-- lombok能够通过注解减少冗余代码,比如实体类的get/set方法等 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

三、在MySQL中建库、建表、插入数据

CREATE DATABASE db_springboot_test CHARSET='utf8';

USE db_springboot_test;

CREATE TABLE tab_student(
pk_student_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生学号,起始值2021001',
student_name VARCHAR(10) COMMENT '学生姓名',
student_sex CHAR(1) COMMENT '学生性别',
student_score DOUBLE(4,1) COMMENT '学生分数'
) COMMENT '学生表'; -- 执行一次,设定初始值
INSERT INTO tab_student VALUES(2021001,SUBSTR(MD5(RAND()),1,4),IF(RAND()>0.5,'男','女'),RAND()*100); -- 可根据需要执行多次,随机插入数据
INSERT INTO tab_student VALUES(NULL,SUBSTR(MD5(RAND()),1,4),IF(RAND()>0.5,'男','女'),RAND()*100); SELECT * FROM tab_student;

四、在核心配置文件application.properties中设置连接数据库的四大参数

# 这里要是数据库所在主机的ip地址,如果数据库在本机可使用localhost
spring.datasource.url=jdbc:mysql://192.168.133.139:3306/db_springboot_test spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.username=root spring.datasource.password=root

五、创建实体类

package cn.godfery.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import java.io.Serializable; @NoArgsConstructor// 生成一个无参的构造方法
@AllArgsConstructor// 生成一个包含所有参数的构造方法
@Accessors(chain = true)// 生成方法的链式调用
@Data// 生成get/set方法、重写toString方法等
public class Student implements Serializable {
private Integer studentId;// 学生id
private String studentName;// 学生姓名
private String studentSex;// 学生性别
private Double studentScore;// 学生分数
}

六、创建并实现dao接口,提供基本的增删改查功能

定义一个Student的dao接口

package cn.byuan.dao;

import cn.byuan.entity.Student;

import java.util.List;

public interface StudentDao {
// 添加一个学生
Integer addOneStudent(Student student); // 根据主键studentId删除一个学生
Integer deleteOneStudentByStudentId(Integer studentId); // 根据主键studentId修改一个学生
Integer updateOneStudentByStudentId(Student student); // 根据主键studentId查询一个学生
Student getOneStudentByStudentId(Integer studentId); // 获取全部学生
List<Student> getAllStudent();
}

实现dao接口

package cn.byuan.dao;

import cn.byuan.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository; import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List; @Repository
public class StudentDaoImp implements StudentDao{
@Autowired
private JdbcTemplate jdbcTemplate;// 此对象由springboot创建,类似于PreparedStatement
// jdbcTemplate.update方法:执行dml
// jdbcTemplate.query方法:执行dql
// jdbcTemplate.call方法:执行存储过程和函数 // 添加一个学生
@Override
public Integer addOneStudent(Student student) {
String sql="insert into tab_student values(null, ?, ?, ?)";
return jdbcTemplate.update(sql, new PreparedStatementSetter() {// 匿名内部类
@Override
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setString(1, student.getStudentName());
preparedStatement.setString(2, student.getStudentSex());
preparedStatement.setDouble(3, student.getStudentScore());
}
});
} // 根据主键studentId删除一个学生
@Override
public Integer deleteOneStudentByStudentId(Integer studentId) {
String sql="delete from tab_student where pk_student_id=?";
return jdbcTemplate.update(sql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setInt(1, studentId);
}
});
} // 根据主键studentId修改一个学生
@Override
public Integer updateOneStudentByStudentId(Student student) {
String sql="update tab_student set student_name=?, student_sex=?, student_score=? where pk_student_id=?";
return jdbcTemplate.update(sql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setString(1, student.getStudentName());
preparedStatement.setString(2, student.getStudentSex());
preparedStatement.setDouble(3, student.getStudentScore());
preparedStatement.setInt(4, student.getStudentId());
}
});
} // 根据主键studentId查询一个学生
@Override
public Student getOneStudentByStudentId(Integer studentId) {
String sql="select * from tab_student where pk_student_id=?";
return jdbcTemplate.query(sql, getRowMapper(), studentId).get(0);
} // 获取全部学生
@Override
public List<Student> getAllStudent() {
String sql="select * from tab_student";
return jdbcTemplate.query(sql, getRowMapper());
} private RowMapper<Student> getRowMapper(){// 查询所使用的RowMapper对象,这里单独拿出来提高代码复用性
return new RowMapper<Student>() {
@Override
public Student mapRow(ResultSet resultSet, int i) throws SQLException {
Student student=new Student();
student.setStudentId(resultSet.getInt("pk_student_id"))
.setStudentName(resultSet.getString("student_name"))
.setStudentSex(resultSet.getString("student_sex"))
.setStudentScore(resultSet.getDouble("student_score"));
return student;
}
};
}
}

七、在测试类中进行测试

package cn.byuan;

import cn.byuan.dao.StudentDao;
import cn.byuan.entity.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import java.util.List; @SpringBootTest
class StudentDaoImpTests {
@Autowired
private StudentDao studentDao;
@Test
void addOneStudentTest(){
Student student=new Student()
.setStudentId(null)
.setStudentName("Godfery")
.setStudentSex("男")
.setStudentScore(98.9);
System.out.println(studentDao.addOneStudent(student));
} @Test
void deleteOneStudentByStudentIdTest(){
System.out.println(studentDao.deleteOneStudentByStudentId(2021001));
} @Test
void updateOneStudentByStudentIdTest(){
Student student=new Student()
.setStudentId(2021001)
.setStudentName("Godfery")
.setStudentSex("男")
.setStudentScore(98.9);
System.out.println(studentDao.updateOneStudentByStudentId(student));
} @Test
void getOneStudentByStudentId(){
System.out.println(studentDao.getOneStudentByStudentId(2021001));
} @Test
void getAllStudentTest(){
List<Student> studentList=studentDao.getAllStudent();
for(Student studentPart : studentList){
System.out.println(studentPart);
}
} }

测试结果



源码地址:https://github.com/byuan98/springboot-integration/tree/master/test002_springboot_jdbc

3、SpringBoot整合之SpringBoot整合JDBC的更多相关文章

  1. (七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)

    兴趣的朋友可以去了解一下前五篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...

  2. SpringBoot Druid整合,SpringBoot 集成Druid

    SpringBoot Druid整合,SpringBoot 集成Druid ================================ ©Copyright 蕃薯耀 2018年4月8日 http ...

  3. SpringBoot+SpringMVC+MyBatis快速整合搭建

    作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...

  4. SpringBoot:4.SpringBoot整合Mybatis实现数据库访问

    在公司项目开发中,使用Mybatis居多.在 SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问 中,这种jpa风格的把sql语句和java代码放到一起,总 ...

  5. SpringBoot与PageHelper的整合示例详解

    SpringBoot与PageHelper的整合示例详解 1.PageHelper简介 PageHelper官网地址: https://pagehelper.github.io/ 摘要: com.gi ...

  6. SpringBoot学习- 3、整合MyBatis

    SpringBoot学习足迹 1.下载安装一个Mysql数据库及管理工具,同类工具很多,随便找一个都可以,我在windows下做测试项目习惯使用的是haosql 它内部集成了MySql-Front管理 ...

  7. (八) SpringBoot起飞之路-整合Shiro详细教程(MyBatis、Thymeleaf)

    兴趣的朋友可以去了解一下前几篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...

  8. Java之SpringBoot自定义配置与整合Druid

    Java之SpringBoot自定义配置与整合Druid SpringBoot配置文件 优先级 前面SpringBoot基础有提到,关于SpringBoot配置文件可以是properties或者是ya ...

  9. springboot+jpa+mysql+swagger整合

    Springboot+jpa+MySQL+swagger整合 创建一个springboot web项目 <dependencies> <dependency>      < ...

  10. java框架之SpringBoot(12)-消息及整合RabbitMQ

    前言 概述 大多数应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦的能力. 消息服务中两个重要概念:消息代理(message broker)和目的地(destination).当消息发送者发送 ...

随机推荐

  1. [Django框架 - 注意事项,安装,项目搭建,小白必会三板斧]

    [Django框架 - 注意事项,安装,项目搭建,小白必会三板斧] 想要正常运行django项目所需要知道的注意事项 1. 计算机名称不能有中文,不然bug在哪儿你都不知道! 2. 项目名和py文件名 ...

  2. centos8.2-2004

    ~]# cat /etc/*leaseCentOS Linux release 8.2.2004 (Core)NAME="CentOS Linux"VERSION="8 ...

  3. [文章]Linux宕机故障分析案例

    [文章]Linux宕机故障分析案例 已采纳 收藏  0  1669 0 马化辉 2018-07-01发布 背景 在Linux系统环境下,服务器宕机发生的频率比较小,但是不少工程师或多或少都会遇到这 ...

  4. CentOS7安装vncserver(启动失败及连接黑屏解决办法)

    CentOS7安装vncserver(启动失败及连接黑屏解决办法) 转载weixin_34167043 最后发布于2017-11-09 15:11:00 阅读数 42  收藏 展开 AutoSAR入门 ...

  5. stm32之ADC应用实例(单通道、多通道、基于DMA)-转载精华帖,最后一部分的代码是精华

    硬件:STM32F103VCT6    开发工具:Keil uVision4    下载调试工具:ARM仿真器网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗).所用的芯片内嵌3个12位的 ...

  6. 5.6 date:显示与设置系统时间

    date命令 用于显示当前的系统时间或设置系统时间. date [选项] +[日期格式]   date命令的参数选项及说明 OPTION参数选项-d 时间字符串 显示指定字符串所描述的时间,而非当前时 ...

  7. 使用goland调试远程代码

    前言 很多时候我们都在window上使用goland,并直接使用goland调试go代码. 但是很多时候我们的程序运行在Linux服务器上,虽然可以通过dlv命令行进行手动打断点调试,但是太麻烦了. ...

  8. Python+Selenium学习笔记17 - HTML测试报告

    运行少量case时 1 # coding = utf-8 2 3 from selenium import webdriver 4 import unittest 5 import time 6 fr ...

  9. maven项目多环境打包问题

    1.xxx-api是基于springboot的模块 2.配置文件 application.properties spring.profiles.active=@activeEnv@ applicati ...

  10. APA自动泊车系统

    APA自动泊车系统 1. 半自动泊车 自动泊车又称为自动泊车入位,它对于新手来说是一项相当便捷的配置,对于老手来说也省了些不少力气.那么自动泊车的原理是什么呢?能想怎么停就怎么停,想停哪儿就停哪儿吗? ...