返回顶部
首页 > 资讯 > 精选 >springboot jpaRepository为什么一定要对Entity序列化
  • 132
分享到

springboot jpaRepository为什么一定要对Entity序列化

2023-06-21 23:06:29 132人浏览 八月长安
摘要

这篇文章主要介绍“SpringBoot jpaRepository为什么一定要对Entity序列化”,在日常操作中,相信很多人在springboot jpaRepository为什么一定要对Entity序列化问题上存在疑

这篇文章主要介绍“SpringBoot jpaRepository为什么一定要对Entity序列化”,在日常操作中,相信很多人在springboot jpaRepository为什么一定要对Entity序列化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springboot jpaRepository为什么一定要对Entity序列化”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    springboot jpaRepository对Entity序列化

    1. 问题

    一开始,我没有对实体类Inventory序列化,导致在使用内嵌数据库H2的JPA时,它直接安装字母序列把表Inventory的字段生成。

    举例,原来我按照

    inventory(id, name, quantity, type, comment)

    顺序写的数据库导入表,但是因为没有序列化,导致表结构变成

    inventory(id, comment,name, quantity, type )

    所以后面JPA处理失败。

    2. 写个基本的JpaRepository的使用

    顺便记录一下写spring cloud 基于和H2 database的jpa简单restful 程序。

    实体类Inventory

    package com.example.demo; import java.io.Serializable; import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.SequenceGenerator; @Entitypublic class Inventory implements Serializable{     private static final long serialVersionUID = 1L;     @Id    @SequenceGenerator(name="inventory_generator", sequenceName="inventory_sequence", initialValue = 2)    @GeneratedValue(generator = "inventory_generator")    private Integer id;    @Column(nullable = false)    private String name;    @Column(nullable = false)    private Integer quantity;    @Column(nullable = false)    private Integer type;    @Column(nullable = false)    private String comment;    public Inventory(Integer id, String name, Integer quantity, Integer type, String comment) {        super();        this.id = id;        this.name = name;        this.quantity = quantity;        this.type = type;        this.comment = comment;    }    public Inventory() {        super();    }    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 Integer getQuantity() {        return quantity;    }    public void setQuantity(Integer quantity) {        this.quantity = quantity;    }    public Integer getType() {        return type;    }    public void setType(Integer type) {        this.type = type;    }    public String getComment() {        return comment;    }    public void setComment(String comment) {        this.comment = comment;    }    @Override    public String toString() {        return "Inventory [id=" + id + ", name=" + name + ", quantity=" + quantity + ", type=" + type + ", comment="                + comment + "]";    }}

    下面使用JpaRepository简化开发流程,非常舒服地定义简单的service 接口即可,会自动实现,大赞。

    package com.example.demo; import org.springframework.data.jpa.repository.JpaRepository; public interface InventoryRepository extends JpaRepository<Inventory, Integer> {     Inventory findById(Integer id); }

    我把controller方法放到了springboot启动类里面,这又是一个大问题,因为我的项目只有放在这才能被dispatcher转发,简直了。

    这里的@EnableDiscoveryClient 是因为我在做spring cloud的eureka 服务发现,需要这个注解让注册中心发现这个服务。

    package com.example.demo; import java.time.LocalTime; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.transaction.annotation.Transactional;import org.springframework.WEB.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController; @SpringBootApplication@EnableDiscoveryClient@RestControllerpublic class InventoryApplication {     public static void main(String[] args) {        SpringApplication.run(InventoryApplication.class, args);    }    @Autowired    private InventoryRepository inventoryRepository;     @Value("${server.port}")    private Integer port;     @RequestMapping("/info")    public String info(){        inventoryRepository.save(new Inventory(1, "火锅底料", 10000, 1, "你吃火锅,我吃底料"));        inventoryRepository.save(new Inventory(2, "微服务架构", 100, 2, "微服务还是要考虑 一波"));        return "{Inventory[port:"+port+", info:库存微服务"+"]}";    }     @GetMapping("/get/{id}")    @ResponseBody    @Transactional    public String getById(@PathVariable("id")Integer id){        return inventoryRepository.findById(id).toString();    }     @GetMapping("/")    @ResponseBody    @Transactional    public String re(){        return inventoryRepository.findAll().toString();    }     @GetMapping("/delete/{id}")    @ResponseBody    @Transactional    public String delete(@PathVariable("id")Integer id){        inventoryRepository.delete(id);        return "delete successfully";    }     @GetMapping("/save/id={id}&name={name}&quantity={quantity}&type={type}&comment={comment}")    public String save(@PathVariable("id")Integer id,@PathVariable("name")String name,            @PathVariable("quantity")Integer quantity,@PathVariable("type")Integer type,            @PathVariable("comment")String comment){        inventoryRepository.save(new Inventory(id,name,quantity,type,comment));        System.out.println(new Inventory(id,name,quantity,type,comment));        //强调一下identity和auto        return "save successfully";    }     @GetMapping("/update/id={id}&name={name}&quantity={quantity}&type={type}&comment={comment}")    @ResponseBody    @Transactional    public String update(@PathVariable("id")Integer id,@PathVariable("name")String name,            @PathVariable("quantity")Integer quantity,@PathVariable("type")Integer type,            @PathVariable("comment")String comment){        Inventory inventory=inventoryRepository.findById(id);        if(inventory.getComment().length()<LocalTime.now().toString().length()){            inventory.setComment(inventory.getComment()+LocalTime.now());        }else{            inventory.setComment(inventory.getComment().substring(0,inventory.getComment().length()-                    LocalTime.now().toString().length())+LocalTime.now());        }        inventoryRepository.save(inventory);        inventoryRepository.flush();        return "update successfully";    }}

    application.properties的配置很关键,搜了不少教程

    spring.jpa.show-sql=truelogging.pattern.level=traceserver.port=8765spring.application.name=inventoryserver.Tomcat.max-threads=1000eureka.instance.leaseRenewalIntervalInSeconds= 10eureka.client.reGIStryFetchIntervalSeconds= 5eureka.client.serviceUrl.defaultZone=Http://localhost:8889/eureka#eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${eureka.instance.server.port}/eureka #spring.thymeleaf.prefix=classpath:/templates/  #spring.thymeleaf.suffix=.html  #spring.thymeleaf.mode=HTML5  #spring.thymeleaf.encoding=UTF-8  # ;charset=<encoding> is added  #spring.thymeleaf.content-type=text/html  # set to false for hot refresh  spring.h3.console.enabled=truespring.thymeleaf.cache=false  spring.jpa.hibernate.ddl-auto=update#这里是把h3持久化到本地文件夹,这可以保持数据spring.datasource.url=jdbc:h3:file:C\:/h3/h3cache;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1logging.file=c\:/h3/logging.loglogging.level.org.hibernate=debug#spring.datasource.data=classpath:import.sql

    数据库是自动导入的,只要命名方式是import.sql, 放在src/main/resources下面就可以

    insert into inventory(id, name, quantity, type, comment) values (1, "火锅底料", 10000, 1, "你吃火锅,我吃底料")insert into inventory(id, name, quantity, type, comment) values (2, "微服务架构", 100, 2, "微服务还是要考虑 一波")

    最后一个简单的测试

    junit测试一波

    package com.example.demo; import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)@SpringBootTestpublic class InventoryApplicationTests {     @Autowired    private InventoryRepository inventoriRepository;     @Test    public void test2() {        System.out.println(inventoriRepository.findAll());    } }

    springboot jpaRepository为什么一定要对Entity序列化

    上图是项目结构图

    springboot 使用JpaRepository

    在对数据库操作时使用 MissionInfoRepository,对应的实体类必须用下面两个注解修饰

    @Entity@Table(name = "mission_info")

    主键用下面修饰

     @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", nullable = false)

    springboot jpaRepository为什么一定要对Entity序列化

    到此,关于“springboot jpaRepository为什么一定要对Entity序列化”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: springboot jpaRepository为什么一定要对Entity序列化

    本文链接: https://lsjlt.com/news/301351.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • springboot jpaRepository为什么一定要对Entity序列化
      这篇文章主要介绍“springboot jpaRepository为什么一定要对Entity序列化”,在日常操作中,相信很多人在springboot jpaRepository为什么一定要对Entity序列化问题上存在疑...
      99+
      2023-06-21
    • springbootjpaRepository为何一定要对Entity序列化
      目录springboot jpaRepository对Entity序列化1. 问题2. 写个基本的JpaRepository的使用最后一个简单的测试springboot 使用JpaR...
      99+
      2024-04-02
    • redis为什么要序列化对象
      redis要序列化对象是使对象可以跨平台存储和进行网络传输。因为存储和网络传输都需要把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息,所以进行“跨平台存储”和”网络传输”的数据都需要进行序列化。...
      99+
      2024-04-02
    • springboot序列化和反序列化怎么定义
      在Spring Boot中,序列化和反序列化可以通过以下方式进行定义:1. 实现Serializable接口:在需要进行序列化和反序...
      99+
      2023-08-14
      springboot
    • java为什么序列化
      序列化是一种用来处理对象流的机制。 (推荐学习:java课程)所谓对象流:就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于...
      99+
      2015-12-09
      java教程 java
    • redis要序列化对象的原因是什么
      Redis要序列化对象的原因有以下几点:1. 数据持久化:Redis是一个内存数据库,如果不进行序列化,那么数据只会存在于内存中,一...
      99+
      2023-09-01
      redis
    • 探讨一下JS为什么提交表单前需要序列化
      Javascript是一种被广泛应用于web前端的编程语言。在web开发中,表单(form)提交是一个非常常见的操作,而在Javascript中,提交表单前通常需要序列化(serialize)表单数据。本文旨在探讨一下Javascript为...
      99+
      2023-05-14
    • java中为什么要实现Serializable序列化接口
      我们在学习JavaSE的时候学习过ObjectInputStream和ObjectOutputStream,当时是觉得只要一个对象要写入文件就必须要实现Serializable接口。其实这样理解完全没有问题。一、问题引入Java中为什么要实...
      99+
      2019-01-18
      java教程 java 实现 Serializable 序列化 接口
    • Java对象的序列化和反序列化是什么
      这篇文章主要介绍了Java对象的序列化和反序列化是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java对象的序列化和反序列化是什么文章都会有所收获,下面我们一起来看看吧。Java 对象的序列化和反序列化是...
      99+
      2023-07-06
    • SpringBoot集成Redis,并自定义对象序列化操作
      SpringBoot项目使用redis非常简单,pom里面引入redis的场景启动器,在启动类上加@EnableCaching注解,项目启动会自动匹配上redis,这样项目中就可以愉...
      99+
      2024-04-02
    • python对象序列化和反序列化有什么不同
      Python对象序列化和反序列化是将Python对象转换为可存储或传输的格式,以及将存储或传输的数据重新转换为Python对象的过程...
      99+
      2023-09-13
      python
    • InnoDB表为什么一定要用自增列做主键
      这篇文章主要介绍InnoDB表为什么一定要用自增列做主键,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 0、导读 我们先了解下InnoDB引擎表的一些关键特征: InnoD...
      99+
      2024-04-02
    • 为什么不使用Java序列化
      这篇文章主要介绍“为什么不使用Java序列化”,在日常操作中,相信很多人在为什么不使用Java序列化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么不使用Java序列化”的疑惑有所帮助!接下来,请跟着小编...
      99+
      2023-06-15
    • Java 中对象的序列化和反序列化有什么区别
      本篇文章给大家分享的是有关Java 中对象的序列化和反序列化有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。主要内容如下:简洁的代码实现序列化实现的基本算法两种特殊的情...
      99+
      2023-05-31
      反序列化 java 序列化
    • SpringBoot怎么自定义Redis实现缓存序列化
      本篇内容主要讲解“SpringBoot怎么自定义Redis实现缓存序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么自定义Redis实现缓存序列化”吧!1、自定义Red...
      99+
      2023-07-02
    • java对象序列化有什么作用
      Java对象序列化可以将对象转换为字节流的形式,以便在网络传输或保存到文件中。它的作用包括:1. 数据持久化:将对象转换为字节流后,...
      99+
      2023-10-10
      Java
    • java项目中的实体类为什么需要实现序列化
      这篇文章给大家介绍java项目中的实体类为什么需要实现序列化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。当客户端访问某个能开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSessi...
      99+
      2023-05-31
      java 实体类 序列化
    • 在Python中怎么将类对象序列化为JSON
      本文小编为大家详细介绍“在Python中怎么将类对象序列化为JSON”,内容详细,步骤清晰,细节处理妥当,希望这篇“在Python中怎么将类对象序列化为JSON”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. ...
      99+
      2023-06-29
    • python对象序列化的作用是什么
      Python对象序列化的作用是将一个Python对象转换为字节流或字符串的形式,以便在网络传输或存储时能够被传输或保存,并在需要时能...
      99+
      2023-10-26
      python
    • 为什么类的职责要单一化
      本篇内容主要讲解“为什么类的职责要单一化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么类的职责要单一化”吧!单一职责原则一个类应该只有一个发生变化的原因开...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作