come on 伸出中指戳戳上方关注我……
Spring Boot 集成 JDBC
引言
今天有一个面向关系型数据库的应用程序接口
,想给大家分享一下,用于Java数据库连接
进行查询和更新数据库,它就是 —— JDBC
。具体该如何使用呢?快来物色物色!
首先,我先带大家了解下 JDBC
!
JDBC 介绍
JDBC
是 Java数据库连接
,是 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
中引入 JDBC
和 MySQL
的依赖包
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
添加配置
在 Spring Boot
中的配置 JDBC
, yml
与 properties
选一种配置即可
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;
}
完成了JDBC
和SpringBoot
的配置和实体类的创建
,就可以通过依赖注入
的方式使用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
*/
public List 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 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 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
@SpringBootTestclass 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 userList = userSerivce.getUserList();//返回数据
System.out.println(userList.toString());
}/**
* 更新数据
*/@Testpublic 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("新增成功");
}
}/**
* 删除数据
*/@Testpublic void delete() {//初始化数据
Integer id = 1;//执行删除int row = userSerivce.deleteUser(id);//判断结果if (row == -1) {
System.out.println("新增失败");
} else {
System.out.println("新增成功");
}
}
}
CRUD自行查看测试结果日志及数据库是否添加成功,如发现数据库数据查询和更新、删除了,证明测试成功
了
示例代码
如需有小伙伴想要 示例代码
可 点击/复制
以下链接查看
GitHub - 示例代码 文末查看👇[1]
Gitee - 示例代码 文末查看👇[2]
总结
看到这今天的 Spring Boot 集成 Memcached 就到此完结了,是不是非常简单,非常nice,这下再也不怕数据库的压力大了。快去赶快试试!别着急,还有更多的秘密等着你来探索!
分享嗨起来,在看点起来,美德传起来,点个星标从此探索之路不迷茫!
Reference
[1]「GitHub - 示例代码」 复制查看👉: https://github.com/AllanTian/spring-boot-examples-demo
[2]「Gitee - 示例代码」 复制查看👉: https://gitee.com/allantian/spring-boot-examples-demo
END
转 载 须 知
本文由 余存 原创
本文作者|余存
公众号|超Ren专属 ( ID : crenzsu)
CSDN|超Ren专属
原创不易,若觉喜欢,点个在看,尽情分享
转载请回复后台 “ 转载 ” 查看
秘密精选
围观
爪哇基础 之 JavaBean与Map相互转换工具类
丨更多
热文
爪哇基础 之 读取文件数据工具类
丨更多
长按下图二维码关注,你将探索程序更多的秘密,且每篇文章都有干货。
喜欢就点个在看再走吧