SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


Spring Data

Spring Data是一个用于简化数据库访问和操作的开源框架,为开发人员提供了一种通用的方式来处理不同类型的数据存储,例如关系型数据库(如MySQL、PostgreSQL、Oracle)和非关系型数据库(如MongoDB、Cassandra、Redis)等。Spring Data还提供了许多有用的特性和工具,例如数据持久化、事务管理、查询和分页等功能,以及对多种数据访问技术的支持,如JPA、Hibernate、MyBatis等

Spring Data框架的核心思想是通过使用Repository模式,将数据访问逻辑从业务逻辑中分离出来,从而简化应用程序的开发和维护;开发人员只需要定义一个接口,继承Spring Data提供的Repository接口,即可获得许多常用的数据库操作方法,如增删改查、分页查询等;Spring Data框架会根据接口定义动态生成实现类,从而使得开发人员可以专注于业务逻辑的实现,而不用关注底层的数据访问细节

Spring Data是一个非常强大和灵活的数据访问框架,可以帮助开发人员更加高效地访问和操作各种类型的数据存储,同时提供了许多有用的特性和工具,能够大大简化应用程序的开发和维护

整合JDBC

JDBC是Java语言中用于与关系型数据库交互的一种标准API;通过JDBC,Java程序可以连接到不同的数据库系统,如MySQL、Oracle、PostgreSQL等,并进行数据的增、删、改、查等操作

JDBC API包括两部分:JDBC驱动程序和Java应用程序接口。JDBC驱动程序是连接Java应用程序和数据库的桥梁,它们负责与数据库进行通信,并将数据转换为Java程序可以理解的格式。Java应用程序接口则是Java程序访问数据库的核心,它提供了一组标准的类和方法,用于与数据库进行交互

  • resources文件夹下创建application.yml文件
spring:datasource:username: "root"password: "root"url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCdriver-class-name: com.mysql.cj.jdbc.Driver
  • 编写controller层,测试数据库CURD功能
package com.wei.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;@RestController
public class JDBCController {@Autowired(required = false)JdbcTemplate jdbcTemplate;//查询数据库所有信息@GetMapping("/userList")public List<Map<String, Object>> userList() {String sql = "select * from mybatis.user";List<Map<String, Object>> List_maps = jdbcTemplate.queryForList(sql);return List_maps;}@GetMapping("/addUser")public String addUser() {String sql = "insert into mybatis.user(id,name,pwd) values(5,'bbb',520)";jdbcTemplate.update(sql);return "update-ok";}@GetMapping("/updateUser/{id}")public String updateUser(@PathVariable int id) {String sql = "update mybatis.user set name=?,pwd=? where id=" + id;//封装Object[] objects = new Object[2];objects[0] = "qqq";objects[1] = "www";jdbcTemplate.update(sql,objects);return "update-ok";}@GetMapping("/deleteUser/{id}")public String deleteUser(@PathVariable int id) {String sql = "delete from mybatis.user where id = ?";jdbcTemplate.update(sql,id);return "delete-ok";}
}

整合Druid

Druid是一个开源的高性能、高可靠性的分布式列存储系统,主要用于支持实时数据探索和分析;提供了一种可扩展的、快速的、实时的数据存储和查询技术,支持高吞吐量和低延迟的查询,并能够处理大规模数据的实时流式处理。Druid的数据存储方式基于列存储,具有高效的压缩算法和索引机制,能够提供高效的数据查询和聚合操作

Druid的架构包括数据源、数据处理和数据查询三个组件。数据源负责数据的采集和预处理,数据处理组件将数据转换为Druid的列存储格式,并进行索引和压缩,数据查询组件则提供了一个SQL查询引擎和RESTful API,用于查询和聚合存储在Druid中的数据;被广泛用于实时数据分析和探索领域,如广告分析、在线推荐、监控和运营等

  • application.yml
spring:datasource:username: "root"password: "root"url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCdriver-class-name: com.mysql.cj.jdbc.Driver#切换数据源type: com.alibaba.druid.pool.DruidDataSource#Spring Boot 默认是不注入这些属性值的,需要自己绑定#druid 数据源专有配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入#如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4jfilters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
  • controller层编写DruidController
package com.wei.config;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.servlet.Filter;
import javax.servlet.annotation.WebFilter;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;@Configuration
public class DruidConfig {@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druidDataSource(){return new DruidDataSource();}//后台监控功能@Beanpublic ServletRegistrationBean StatViewServlet(){ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");//后台账号密码HashMap<String, String> initParameters = new HashMap<>();//添加配置initParameters.put("loginUsername","admin");initParameters.put("loginPassword","123456");//允许用户访问initParameters.put("allow","");//禁止用户访问/*initParameters.put("","");*/bean.setInitParameters(initParameters);   //设置初始化参数return bean;}//过滤器Filter@Beanpublic FilterRegistrationBean webStartFilter(){FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();bean.setFilter(new WebStatFilter());//通过请求HashMap<Object, Object> initParameters = new HashMap<>();initParameters.put("exclusions","*.js,*.css,/druid/*");return bean;}
}

整合Mybatis

  • springboot-mybatis依赖
        <!--springboot-mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.1</version></dependency>
  • 配置数据库连接application.properties
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • 测试
package com.wei;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.sql.SQLException;@SpringBootTest
class Springboot04MybatisApplicationTests {@Autowired(required = false)DataSource dataSource;@Testvoid contextLoads() throws SQLException {System.out.println("=================");System.out.println(dataSource.getClass());System.out.println(dataSource.getConnection());}
}
  • 依赖导入pom.xml
<dependencies><!--springboot-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--springboot-mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--mysql--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!--test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
  • 编写pojo/user
package com.wei.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private int id;private String name;private String pwd;
}
  • 编写mapper/UserMapper接口类
package com.wei.mapper;import com.wei.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;import java.util.List;@Mapper
@Repository
public interface UserMapper {List<User> queryUserList();User queryUserById(int id);int addUser(User user);int updateUser(User user);int deleteUser(int id);}
  • 编写resources/mybatis/mapper/UserMapper.xml接口映射器
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wei.mapper.UserMapper"><select id="queryUserList" resultType="User">select *from mybatis.user;</select><select id="queryUserById" resultType="User">select *from mybatis.userwhere id = #{id};</select><insert id="addUser" parameterType="User">insert into mybatis.user (id, name, pwd)values (#{id}, #{name}, #{pwd});</insert><update id="updateUser" parameterType="User">update mybatis.userset name=#{name},pwd=#{pwd}where id = #{id};</update><delete id="deleteUser" parameterType="int">deletefrom mybatis.userwhere id = #{id};</delete></mapper>
  • 编写Controller/UserController控制层
package com.wei.controller;import com.wei.mapper.UserMapper;
import com.wei.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {@Autowiredprivate UserMapper userMapper;//查询全部用户@GetMapping("queryUserList")public List<User> queryUserList() {List<User> userList = userMapper.queryUserList();for (User user : userList) {System.out.println(user);}return userList;}//添加用户@GetMapping("addUser")public String addUser() {userMapper.addUser(new User(5, "王湾", "456"));return "ok";}//修改用户@GetMapping("updateUser")public String updateUser() {userMapper.updateUser(new User(5, "王湾", "123456"));return "ok";}//删除用户@GetMapping("deleteUser")public String deleteUser() {userMapper.deleteUser(5);return "ok";}
}
  • 编写resources/application.properties:配置数据源、整合mybatis
#配置数据源
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#整合mybatis
mybatis.type-aliases-package=com.wei.pojo
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15983.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot中的度量指标及使用方法

Spring Boot中的度量指标及使用方法 简介 Spring Boot是目前流行的Java后端框架之一&#xff0c;它提供了许多有用的功能&#xff0c;其中包括度量指标。度量指标可以帮助我们监测应用程序的性能、稳定性和可靠性&#xff0c;以便及时发现并解决问题。本文将介绍Spring Boot中…

OpenCV——总结《车牌识别》

1.图片中的hsv hsv提取蓝色部分 # hsv提取蓝色部分 def hsv_color_find(img):img_copy img.copy()cv2.imshow(img_copy, img_copy)"""提取图中的蓝色部分 hsv范围可以自行优化cv2.inRange()参数介绍&#xff1a;第一个参数&#xff1a;hsv指的是原图第二个参…

Java后端编译与优化

如果我们将字节码看作是程序语言的一种中间表示形式&#xff0c;那编译器无论在何时、在何种状态下把Class文件转换成与本地基础设施相关的二进制机器码&#xff0c;它都可以视为整个编译过程的后端。 1 即时编译器 即时编译器是指运行时将热点代码编译成本地机器码&#xff…

nginx反向代理 404 问题

发现我们设置了反向代理没有起作用&#xff0c;最后发现原来是伪静态惹得祸 解决nginx添加反向代理代码不生效-与原rewrite伪静态规则冲突了 以thinkphp官方给的伪静态为例 if (!-e $request_filename){rewrite ^(.*)$ /index.php?s$1 last; break;}仔细研究发现发现问…

第48步 深度学习图像识别:RegNet建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;RegNet RegNet (Regulated Networks) 是一种由 Facebook AI 的研究者们在 2020 年提出的神经网络架构&#xff0c;旨在探索网络架构设计的各种可能性&#xff0c;并找出最优的网络设计规则。RegNet 的核心理…

全志V3S嵌入式驱动开发(四种启动方式)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 对于v3s的启动方式分析,怎么研究都不为过。对我们整个系列文章比较熟悉的同学来说,这幅图真的是太熟悉了, 整个流程不复杂。它主要是告诉我们,v3s加载的顺序是怎么样的…

基于智能手机的医院服务客户端设计与实现(论文+源码)_kaic

摘 要 近年来&#xff0c;随着中国经济的迅猛发展&#xff0c;医疗技术水平也在不断提高&#xff0c;但由于人口数目巨大&#xff0c;导致医疗资源人均分配不足的情况依旧十分严峻。预约挂号一直是制约医疗机构服务质量提高的主要环节之一。在传统预约挂号方式下&#xff0c;繁…

APP测试面试题快问快答(六)

26. App测试工程师到底测些什么&#xff1f; 考察点&#xff1a;是否有移动app测试的相关经验 界面测试 功能测试 兼容性测试 性能测试 稳定性测试 安全性测试 环境的测试 专项测试 –安装&#xff0c;卸载&#xff0c;流量&#xff0c;电量&#xff0c;弱网和FPS 27…

华为云函数工作流FunctionGraph新手操作指南

函数工作流&#xff08;FunctionGraph&#xff09;是华为云提供的一款无服务器&#xff08;Serverless&#xff09;计算服务&#xff0c;无服务器计算是一种托管服务&#xff0c;服务提供商会实时为你分配充足的资源&#xff0c;而不需要预留专用的服务器或容量&#xff0c;真正…

【LeetCode】217. 存在重复元素

217. 存在重复元素&#xff08;简单&#xff09; 方法一&#xff1a;哈希表长度比较 思路 针对重复元素&#xff0c;很容易就想到 set。我们可以先将 nums 中的所有元素存入set&#xff0c;然后比较两个数据结构的长度&#xff0c;如果相等则说明不存在重复元素&#xff0c;反…

【计算机视觉 | 图像分类】arxiv 计算机视觉关于图像分类的学术速递(6月 29 日论文合集)

文章目录 一、分类|识别相关(12篇)1.1 Pseudo-Bag Mixup Augmentation for Multiple Instance Learning Based Whole Slide Image Classification1.2 Improving Primate Sounds Classification using Binary Presorting for Deep Learning1.3 Challenges of Zero-Shot Recognit…

pycharm如何给一串中文快捷加引号(方法二)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 商人重利轻别离&#xff0c;前月浮梁买茶去。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python白银群【此类生物】问了一个Pycharm基础的问题&a…