Spring Boot整合JPA+MySQL+Redis(一)

【可不卸载重装】VS2019新建项目里没有CUDA选项 问题:VS2019 新建项目里没有CUDA选项,vs也属性没有cuda。这是因为你在Visual Studio 2019安装之前,先安装了CUDA Toolkit。 阅读详情

Spring Boot整合JPA+MySQL+Redis

在开始之前,我们在pom.xml添入关键依赖:

JPA依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

MySQL依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

Redis依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

下面开始整合过程:
①首先,我们在application.yml添入以下配置:

spring:
  ##配置数据源
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: ##数据库连接地址
    username: ##数据库用户名
    password: ##数据库密码
  ##开启JPA
  jpa:
    hibernate:
      ##自动建表
      ddl-auto: update 
    ##打印sql语句
    show-sql: true
  ##配置redis
  redis:
    ##默认redis客户端连接为0 可修改
    database: 0  
    host: ##连接地址 如:00.000.000.000
    ##连接端口号 默认是6379 可修改
    port: 6379
    password: ##redis客户端密码
    pool:
      ##连接池最大空闲连接
      max-idle: 8
      ##连接池最小空闲连接
      min-idle: 0
      ##连接池最大连接数
      max-active: 8
      ##连接池最大等待时间
      max-wait: 1
    ##连接超时时间
    timeout: 5000

②配置Redis,注意加上@EnableCaching注解开启缓存:

package com.java.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis配置
 * @author zxy
 *
 */
@Configuration
@EnableCaching//启用缓存
public class RedisConfig extends CachingConfigurerSupport{

    /**
     * 注入 RedisConnectionFactory
     */
    @Autowired
    RedisConnectionFactory redisConnectionFactory;

    /**
     * 实例化 RedisTemplate 对象
     *
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> functionDomainRedisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
        return redisTemplate;
    }

    /**
     * 设置数据存入 redis 的序列化方式
     *
     * @param redisTemplate
     * @param factory
     */
    private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
        //定义key生成策略
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setConnectionFactory(factory);
    }

    /**
     * 缓存管理器
     * @param redisTemplate
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) {
           CacheManager cacheManager = new RedisCacheManager(redisTemplate);
           return cacheManager;
    }

    /**
     * 实例化 HashOperations 对象,可以使用 Hash 类型操作
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForHash();
    }

    /**
     * 实例化 ValueOperations 对象,可以使用 String 操作
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForValue();
    }

    /**
     * 实例化 ListOperations 对象,可以使用 List 操作
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForList();
    }

    /**
     * 实例化 SetOperations 对象,可以使用 Set 操作
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForSet();
    }

    /**
     * 实例化 ZSetOperations 对象,可以使用 ZSet 操作
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForZSet();
    }

}

③创建User实体类,一定要实现Serializable序列化:

package com.java.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_user")
public class User implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String redisKey;//redis中的key

    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    private String sex;

    private String address;

    public String getRedisKey() {
        return redisKey;
    }

    public void setRedisKey(String keyStr) {
        this.redisKey = "user_"+keyStr;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User [redisKey=" + redisKey + ", id=" + id + ", name=" + name + ", sex=" + sex + ", address=" + address
                + "]";
    }

}

④定义User用户JPA接口:

package com.java.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.java.entity.User;

/**
 * 用户 Repository层接口
 * @author zxy
 *
 */
public interface UserRepository extends JpaRepository<User, Integer>{

}

⑤定义抽象类RedisService实现redis对泛型对象的操作,多态调用getRedisKey()方法获取子类的自定义redis key生成相应的Hash表结构:

package com.java.redis.service;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public abstract class RedisService<T> {

    /**
     * 实例化 RedisTemplate对象
     */
    @Autowired
    protected RedisTemplate<String, Object> redisTemplate;

    /**
     * 定义Hash结构 操作存储实体对象
     */
    @Resource
    protected HashOperations<String, String, T> hashOperations;

    /**
     * 定义Hash表的redis key名称
     *
     * @return
     */
    protected abstract String getRedisKey();

    /**
     * 在相应Hash表中添加键值对 key:Object(doamin)
     *
     * @param key    key
     * @param doamin 对象
     * @param expire 过期时间(单位:秒),传入 -1 时表示不设置过期时间
     */
    public void put(String key, T doamin, long expire) {
        hashOperations.put(getRedisKey(), key, doamin);
        if (expire != -1) {
            redisTemplate.expire(getRedisKey(), expire, TimeUnit.SECONDS);
        }
    }

    /**
     * 在相应Hash表中删除key名称的元素
     *
     * @param key 传入key的名称
     */
    public void remove(String key) {
        hashOperations.delete(getRedisKey(), key);
    }

    /**
     * 在相应Hash表中查询key名称的元素
     *
     * @param key 查询的key
     * @return
     */
    public T get(String key) {
        return hashOperations.get(getRedisKey(), key);
    }

    /**
     * 获取在相应Hash表下的所有实体对象
     *
     * @return
     */
    public List<T> getAll() {
        return hashOperations.values(getRedisKey());
    }

    /**
     * 查询在相应Hash表下的所有key名称
     *
     * @return
     */
    public Set<String> getKeys() {
        return hashOperations.keys(getRedisKey());
    }

    /**
     * 判断在相应Hash表下key是否存在
     *
     * @param key 传入key的名称
     * @return
     */
    public boolean isKeyExists(String key) {
        return hashOperations.hasKey(getRedisKey(), key);
    }

    /**
     * 查询相应Hash表的缓存数量
     *
     * @return
     */
    public long count() {
        return hashOperations.size(getRedisKey());
    }

    /**
     * 清空相应Hash表的所有缓存
     */
    public void empty() {
        Set<String> set = hashOperations.keys(getRedisKey());
        set.stream().forEach(key -> hashOperations.delete(getRedisKey(), key));
    }

}

⑥继承RedisService类自定义实现UserRedisServiceImpl,泛型注入User实体,自定义redis key的名称为USER_KEY,User实体的所有缓存均存入名为USER_KEY的Hash表中:

package com.java.redis.service.impl;

import org.springframework.stereotype.Service;

import com.java.entity.User;
import com.java.redis.service.RedisService;

/**
 * 用户redis service继承类
 * @author zxy
 *
 */
@Service("userRedisService")
public class UserRedisServiceImpl extends RedisService<User>{

    //自定义redis key作为Hash表的key名称
    private static final String REDIS_KEY = "USER_KEY";

    @Override
    protected String getRedisKey() {
        // TODO Auto-generated method stub
        return REDIS_KEY;
    }

}

⑦定义User用户Service接口UserService:

package com.java.service;

import java.util.List;

import com.java.entity.User;

/**
 * 用户Service层接口
 * @author zxy
 *
 */
public interface UserService {

    /**
     * 根据Id查询用户信息
     * @param id
     * @return
     */
    public User findById(Integer id);

    /**
     * 查询所有用户信息
     * @return
     */
    public List<User> findAll();

    /**
     * 添加或修改用户信息
     * @param user
     */
    public void save(User user);

    /**
     * 根据Id删除用户信息
     * @param id
     */
    public void delete(Integer id);

}

⑧定义User用户Service接口实现类UserServiceImpl,@CacheEvict注解中的allEntries=true属性很重要,确保数据修改后缓存能够得到刷新:

package com.java.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import com.java.entity.User;
import com.java.redis.service.impl.UserRedisServiceImpl;
import com.java.repository.UserRepository;
import com.java.service.UserService;

/**
 * 用户Service层接口实现类
 * @author zxy
 *
 */
@Service("userService")
public class UserServiceImpl implements UserService{

    @Resource
    private UserRepository userRepository;

    @Resource
    private UserRedisServiceImpl userRedisService;

    @Cacheable(value="userCache") //缓存,这里没有指定key.
    @Override
    public User findById(Integer id) {
        // TODO Auto-generated method stub
        return userRepository.findOne(id);
    }

    @Cacheable(value="userCache")
    @Override
    public List<User> findAll() {
        // TODO Auto-generated method stub
        return userRepository.findAll();
    }

    //allEntries 清空缓存所有属性 确保更新后缓存刷新
    @CacheEvict(value="userCache", allEntries=true)
    @Override
    public void save(User user) {
        // TODO Auto-generated method stub
        userRepository.save(user);
        if(user.getRedisKey()==null||"".equals(user.getRedisKey().trim())){
            user.setRedisKey(user.getId().toString());
            userRepository.save(user);
        }
        userRedisService.put(user.getRedisKey(), user, -1);
    }

    //allEntries 清空缓存所有属性 确保更新后缓存刷新
    @CacheEvict(value="userCache", allEntries=true)
    @Override
    public void delete(Integer id) {
        // TODO Auto-generated method stub
        User user=userRepository.findOne(id);
        userRedisService.remove(user.getRedisKey());
        userRepository.delete(id);
    }

}

自此,所有准备工作全部完成,下面定义一个Controller层测试类TestController:

package com.java.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.java.entity.User;
import com.java.service.UserService;

/**
 * 测试Controller层
 * @author zxy
 *
 */
@RestController
@RequestMapping("/test")
public class TestController {

    private static Integer userNum=0;

    @Resource
    private UserService userService;

    /**
     * 根据Id查询用户信息
     * @param id
     * @return
     */
    @RequestMapping("/findById/{id}")
    public User findById(@PathVariable("id")Integer id){
        return userService.findById(id);
    }

    /**
     * 查询所有用户信息
     * @return
     */
    @RequestMapping("/findAll")
    public List<User> findAll(){
        return userService.findAll();
    }

    /**
     * 添加用户信息
     * @return
     */
    @RequestMapping("/add")
    public String add(){
        User user=new User();
        ++userNum;
        user.setName("张三"+userNum);
        user.setSex("男"+userNum);
        user.setAddress("广州"+userNum);
        userService.save(user);
        return "success";
    }

    /**
     * 修改用户信息
     * @return
     */
    @RequestMapping("/update/{id}")
    public String update(@PathVariable("id")Integer id){
        User user=userService.findById(id);
        user.setName(user.getName()+"asd");
        user.setSex(user.getSex()+"asd");
        user.setAddress(user.getAddress()+"asd");
        userService.save(user);
        return "success";
    }

    /**
     * 根据Id删除用户信息
     * @return
     */
    @RequestMapping("/delete/{id}")
    public String delete(@PathVariable("id")Integer id){
        userService.delete(id);
        return "success";
    }

}

*  测试过程:

项目启动,redis客户端数据库均为空,数据表建表t_user结构:
MySQL表结构

地址栏两次访问http://localhost/test/add后:

MySQL数据库:
MySQL数据

redis客户端:
redis客户端数据

地址栏两次访问http://localhost/test/findById/1后,可以看到只执行了一次sql语句:
控制台sql打印
页面数据显示:
findById数据显示

地址栏访问http://localhost/test/update/1后,分别使用http://localhost/test/findById/1和http://localhost/test/findAll查询数据,可以看到数据均发生了修改(数据库和redis客户端的数据均对应发生变化,在此笔者就不贴图了):
findById数据显示
findAll数据显示

地址栏访问http://localhost/test/delete/1后,使用http://localhost/test/findAll查询数据,可以看到数据的变化(数据库和redis客户端的数据均对应发生变化,在此笔者就不贴图了):
findAll数据显示

总结:以上为Spring Boot整合JPA+MySQL+Redis的所有过程,实现了作为中间层的redis缓存以及MySQL数据库和redis客户端的数据同步,完成了对实体对象的CRUD操作。笔者不才,如有遗漏、错误读者可提出建议。

*注:后续进一步的实现可参考笔者的下一篇文章,Spring Boot整合JPA+MySQL+Redis(二)

从流体力学到深度学习:手把手教你用PINN预测涡流场(基于TensorFlow2.10+GPU) 本文详细介绍了如何利用物理信息神经网络(PINN)结合TensorFlow 2.10和GPU加速,预测Navier-Stokes方程的涡流场。通过核心原理讲解、实战环境配置、网络架构设计及物理约束实现,帮助读者掌握从流体力学到深度学习的跨学科技术应用,特别适合处理复杂流体问题和非定常流动场景。 阅读详情

相关推荐

PSOC Creator 入门教程超详细

最近工作原因需要使用到赛普拉斯的一款芯片,奈何以前没有用过,所以趁这次也学习了一些简单的用法,总结一下,希望能帮到有需要朋友,因为网上关于这方面的文章少的可怜,详细点的更是少之又少!废话少说,正文开始.

qm_mq的博客 5747

JPA+MySQL详解

JPA+mySQL详解 首先明确两个端的关联关系,在java实体类定义中,含有mappedBy属性的时关系被维护端,含有关联字段的是关系维护端。 一、OneToOne关联关系 假设有实体People和Address,他们的关系是一对一,再设定People实体是关系的维护端,应有如下设计 //People.java @Entity @Table(name = "people") public class People { @Id @GeneratedValue(strategy = Gener

David的博客 3766

AS7262六通道可见光传感器:从光谱原理到物联网色彩检测实战

光谱检测是嵌入式感知领域的关键技术,其核心原理是通过特定波长的滤光片分离光线并转换为电信号,从而实现对环境光或物体反射光的成分分析。这项技术的价值在于将复杂的光学分析简化为可编程读取的数字信号,极大降低了色彩检测在物联网和智能设备中的应用门槛。在智能农业、工业分拣、环境监测等场景中,精确的光谱数据能够驱动自动化决策,例如评估植物光照条件或识别物料颜色。本文以Adafruit AS7262传感器为例,深入解析其基于硅干涉滤光片的六通道设计,并通过Arduino与Python实战,演示如何快速构建从数据采集到可

weixin_28738173的博客 595

SpringBoot整合redis+mysql

SpringBoot+Redis+mysql

陆卿之的博客 4627

Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧

在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa

weixin_30899023的博客 330

STM32实战:增量式PID控制气体流量(附完整代码与调参技巧)

本文详细解析了如何在STM32平台上实现气体流量控制的增量式PID算法。内容涵盖从系统硬件架构选型、增量式PID算法原理与代码实现,到ADC采样滤波、PWM驱动配置等关键外设驱动,并提供了完整的参数整定技巧与工程调优实战指南,帮助开发者构建稳定可靠的气体流量控制系统。

rose2的博客 619

mysql用JPA框架操作

JPA是与MyBits(plus)相同的一款非常优秀的ORM产品,其源于优秀的全自动ORM框架Hibernate(出身高贵)。生产中,JPA与MyBtis的应用场景是不同的。对于关联关系不太复杂的数据库设计,JPA的的实现可能较MyBatis会更加快速方便,简单明了。Contorller层进行方法的调用,在调用之前得先连接mysql数据库,建一个空的test库,然后在yml文件中进行数据源配置,以及日志的配置。学习spring Cloud 然后数据层使用的是 JPA 来自动建表,直接操作表。

lonely233的博客 309

用豆包+Skill从零制作AI漫剧:分镜、画面、配音到成片全流程

AI漫剧作为一种新兴内容形态,结合AI绘画与AI视频生成技术,正在改变短视频创作方式。其核心原理是利用提示词工程,将创意转化为结构化分镜脚本,再通过豆包等AI助手的Skill能力,将重复的脚本生成和分镜拆解流程固化为可复用的指令模板,从而大幅降低从构思到成品的生产门槛。这种模式无需剧组、演员和实景拍摄,让个人创作者也能借助图像生成、TTS配音与剪辑合成工具,批量化地生产剧情短片,适用于短视频平台连载、商业定制与个人IP打造。围绕豆包+Skill这条主线,从选题、剧本写作、分镜表设计,到画面提示词生成、视频片

weixin_29048309的博客 1508

MySQL与JPA集成实践

1. 背景介绍 1.1 MySQL数据库简介 MySQL是一个开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,后被Sun公司收购,最后被Oracle公司收购。MySQL是最流行的关系型数据库管理系统之一,广泛应用于各种场景,如Web应用、数据仓库、嵌入式应用等。 1.2 JPA简介 Java Persistence API(JPA)是Java EE和Java SE平台的一部分,...

AI天才研究院 1038

SpringBoot系列之实现一个AI聊天助手

本文介绍了基于Spring Boot框架实现的AI聊天助手项目。该项目使用Spring Boot 3.2.3、Spring AI 1.0.0-M5等技术栈,集成DeepSeek-R1-Distill-Llama-8B模型实现智能对话功能。文章详细介绍了项目配置流程、运行方式和核心代码实现,包括ChatMessage模型类和服务类ChatService的关键功能,如消息处理、历史记录管理和AI响应获取等。读者可通过提供的GitHub链接获取完整代码,快速搭建自己的AI聊天应用。

Nicky's blog 1451

105、LLC谐振变换器的LTspice仿真建模

文章摘要:本文分享了LLC谐振变换器在LTspice中的仿真建模经验。作者从实际调试中炸管的教训出发,指出数学计算无法捕捉瞬态问题,必须通过仿真验证。详细介绍了半桥LLC主电路搭建、理想元件选择、开环增益扫频、闭环控制实现等关键步骤,重点讲解了启动过程、ZVS验证和短路保护等高风险工况的仿真技巧。文章提供了实用参数设置建议和LTspice代码片段,强调先开环后闭环的调试顺序,并提醒仿真结果需保留20%设计裕量。最后总结了谐振电流波形观察、死区时间优化等经验性建议。

Jack010169的博客 228

jpa怎样连接mysql数据库_使用JPA连接MySQL数据库

使用JPA连接MySQL数据库步骤:(1)下载JPA所需要的库函数;(2)创建实体java文件;(3)创建Persistence.xml,此文件将配置数据库并制定实体类;(4)使用JPA添加CRUD操作:(5)根据测试结果修改代码,再测试,直到被测试的代码完全正确。Questions:1.What is persistent class?持久化类:在应用程序中,用来实现业务问题实体的类(如,在电子...

weixin_29825861的博客 1752

Yolo11改进:Block改进|MixDehazeNet,用于图像去雾网络的混合结构块|即插即用|附代码

https://arxiv.org/pdf/2305.17654 图像去雾是低级视觉领域中的一项典型任务。先前的研究验证了大型卷积核和注意力机制在去雾中的有效性。然而,存在两个缺点:引入大型卷积核时容易忽略图像的多尺度特性,而注意力模块的标准串联方式没有充分考虑雾分布的不均匀性。在本文中,我们提出了一种名为混合结构图像去雾网络(MixDehazeNet)的新型框架,该框架解决了上述两个问题。具体而言,它主要由两部分组成:多尺度并行大型卷积核模块和增强并行注意力模块。与单个大型卷积核相比,多尺度的并行大型卷积

m0_47867638的博客 1273

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

hutao8896的博客 1113

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring Boot中集成Redis与MySQL

用途:将键或简单的值序列化为字符串。适用场景:通常用于键的序列化,确保键在 Redis 中以字符串存储,以便于直接查看和管理。用途:将对象序列化为 JSON 格式的字符串,并支持 JSON 反序列化回对象。适用场景:通常用于值的序列化,尤其是需要存储复杂对象的情况。它可以确保数据的可读性,且 JSON 格式数据跨系统兼容性好。缓存穿透指的是请求的数据在缓存和数据库中都不存在,这种请求直接穿过缓存访问数据库。当恶意请求大量涌入时,缓存层无法拦截这些无效请求,导致数据库承受大量压力,从而影响性能。

m0_73837751的博客 3260

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Spring boot整合Spring Data Jpa,Redis和Spring Cache入门练习

这两天一直在学习Spring Cache,下面就简单总结一下。 首先,从创建项目开始:我使用的是Spring tool suit创建的Spring boot + Spring Data Jpa 项目,这里就不详细讲了。项目简单整合Redis和Spring Cache。 下面是主配置文件application.properties的配置: spring.datasource.url = jd...

weixin_42904666的博客 1329

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring Boot数据访问,整合MyBatis,JPA,Redis

数据准备,在MySQL中建一个名springbootdata的数据库 # 创建数据库 CREATE DATABASE springbootdata; # 选择使用数据库 USE springbootdata; # 创建表t_article并插入相关数据 DROP TABLE IF EXISTS `t_article`; CREATE TABLE `t_article` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '文章id', `title` va.

weixin_46083166的博客 481

SpringBoot实践 - SpringBoot+MySql+Redis

大家都知道redis的强大之处,在目前应用上也是大显神威。 先说说他的优点: 1 读写性能优异 2 支持数据持久化,支持AOF日志和RDB快照两种持久化方式 3 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。 4 数据结构丰富:除了支持string类型的value外还支持string、hash、set、sortedset、list等数据结构。   那么现在我们在 Strin...

人人都是程序员 1339

Java笔记-使用jpa连接mysql数据库

目录 基本概念 代码与实例 基本概念 此处的基本概念来至于:https://www.cnblogs.com/yunche/p/10279324.html JPA(Java Persistence API)用于对象持久化的 API,是 Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层。 JDBC 也是一种规范和接口,不过 JDB...

IT1995的博客 7815

jpa mysql_Spring boot通过JPA访问MySQL数据库

本文展示如何通过JPA访问MySQL数据库。JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发流程的目的,使开发者能够专注于实现自己的业务逻辑上。Spring boot结合Jpa 能够简化创建 JPA 数据访问层和跨存储的持久层功能,用户的持久层Dao接口只...

weixin_33700875的博客 402

MySQL-SpringBoot集成JPA实现数据读写分离

https://blog.youkuaiyun.com/Anbang713/article/details/83240353 在上篇博客《MySQL-主从复制之同步主从数据》中,我们实现了读库和写库的数据同步。今天,我们继续学习SpringBoot集成JPA如何实现数据读写分离。废话不多话直接上代码。 一、配置数据源 1. # 数据源 2. spring.datasource.druid.write.url=jdbc:mysql://localhost:3380/test 3. spring.data

yygr的博客 1820

SpringBoot+mysql+Redis 整合

本文通过记录SpringBoot+springMVC+redis+mysql来实现web项目中增删改查的具体操作。|______Webdemo1Application(springboot启动类)2.3创建RedisConfig模板类。2.3创建RedisConfig模板类。2.2创建User类与UserDao。2.2创建User类与UserDao。2.5创建Controller类。2.5创建Controller类。2.7 配置文件pom.xml。2.4创建service类。2.4创建service类。

u012299679的博客 1889

Springboot整合Spring Data JPA,使用JPA操作MySql数据库进行CRUD

JPA 概述 JPA是Java Persistence API的简称,是JCP组织发布的Java EE标准之一。JPA是一种面向对象的查询语言,定义了独特的JPQL(Java Persistence Query Language),是一种针对实体的查询语言,无论是查询还是修改,全部操作的都是对象实体,而非数据库的表。 1. 添加Spring Date JPA 依赖 新建一个Springboot项目,在pom.xml中加入Spring DateJPA依赖 <!--引入jpa的...

weixin_46244937的博客 5021

redis 设置连接数配置修改 java 最大连接数_Spring Boot集成mysql与Redis

上一篇文章:一分钟解决临时需求,设计一个可热部署的切面在项目搭建初期,我们便集成了mysql数据库,但是在现代的分布式架构中,往往还需要一种更高访问性能的键值数据库Redis。mysql结合redis解决了大多数软件系统的痛点,当然还有一些特殊的系统,需要保存大量的归档资料而用到分布式文件系统(比如GFS),需要同时满足数据强一致与高性能而自研了分布式数据库(比如OceanBase)。本篇文章介绍...

weixin_34857730的博客 1311

Springboot集成mysql+jpa实现增删改查示例

Springboot集成mysql+jpa实现增删改查示例

weixin_40764759的博客 749

MySQL学习&Jpa

MySQL单字段存储大容量内容 Data too long for column 'abc' at row 1 解决办法: 将字段类型修改成更大的类型 字段类型 类型长度 空间大小 TINYTEXT 256 bytes TEXT 65,535 bytes ~64kb MEDIUMTEXT 16,777,215 bytes ~16MB LONGTEXT 4,294,967,295 bytes ~4GB .........

杀神lwz的博客 1225
上一篇: Spring Boot热部署配置
下一篇: Java Mail解决标题乱码问题
IceCaptain
博客等级 码龄10年 12粉丝 19原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值