zoukankan      html  css  js  c++  java
  • 将JPA通用的实现方法封装成一个抽象类进行拓展

    ------------恢复内容开始------------

    1.定义一个通用实体类

    package com.cnqisoft.eagle.upload.entity;

    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;
    import org.hibernate.annotations.CreationTimestamp;
    import org.hibernate.annotations.GenericGenerator;

    import javax.persistence.*;
    import java.util.Date;
    import java.util.UUID;

    @Getter
    @Setter
    @ToString
    @MappedSuperclass
    public abstract class Upload {
    @Id
    @GenericGenerator(name = "uuid-generator", strategy = "uuid2")
    @GeneratedValue(generator = "uuid-generator")
    @Column(length = 16, updatable = false)
    private String id;

    @CreationTimestamp
    @Column(nullable = false, updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date createTime;

    }



    2.定义一个拓展的实体类并继承通用实体类
    package com.cnqisoft.eagle.upload.entity;

    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;

    import javax.persistence.*;
    import java.io.Serializable;

    @Getter
    @Setter
    @ToString
    public class UploadRecord extends Upload implements Serializable {
    private String uuid; // uuid
    private String path;
    private String name; // 原文件名
    private String fileTag;
    private Long size;
    private Integer status;
    }
    
    

    3.将通用的方法放在一个抽象类,以此作为实现类继承的拓展

    package com.cnqisoft.eagle.upload.service;

    import com.cnqisoft.eagle.upload.entity.Upload;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.transaction.annotation.Transactional;

    import java.util.List;

    public abstract class AbstractUploadService<T extends Upload, R extends JpaRepository<T, String>> {
    protected final R uploadRepository;

    AbstractUploadService(R repository) {
    this.uploadRepository = repository;
    }

    @Transactional
    public List<T> queryAllEntity(){
    return uploadRepository.findAll();
    }

    @Transactional
    public T queryEntityById(String id) {
    return uploadRepository.findById(id).orElse(null);
    }

    @Transactional
    public T insert(T entity) {
    return uploadRepository.save(entity);
    }

    @Transactional
    public T updateEntity(T entity) {
    return uploadRepository.save(entity);
    }

    @Transactional
    public void deleteEntity(String id) {
    uploadRepository.deleteById(id);
    }

    }


    2.定义业务接口
    package com.cnqisoft.eagle.upload.service;


    import com.cnqisoft.eagle.upload.entity.UploadInfo;
    import com.cnqisoft.eagle.upload.entity.UploadRecord;
    import com.cnqisoft.eagle.upload.entity.UploadState;

    public interface UploadRecordService {
    UploadRecord getUploadRecordByFileTag(String fileTag);
    UploadRecord insertUploadRecord(UploadInfo uploadInfo, String path);
    UploadRecord updateUploadRecord(UploadRecord record);
    void deleteUploadRecord(String id);
    UploadRecord updateUploadStatus(String fileTag, Integer Status);
    UploadState checkUploadedFile(String fileTag);
    }

    3.实现类继承通用方法并,并实现业务接口并注入JpaRepository
    package com.cnqisoft.eagle.upload.service;

    import com.cnqisoft.eagle.upload.entity.UploadInfo;
    import com.cnqisoft.eagle.upload.entity.UploadRecord;
    import com.cnqisoft.eagle.upload.entity.UploadState;
    import com.cnqisoft.eagle.upload.repository.UploadRecordRepository;
    import org.springframework.stereotype.Service;

    import javax.transaction.Transactional;
    import java.util.Optional;
    import java.util.UUID;

    @Service
    public class UploadRecordServiceImpl extends AbstractUploadService<UploadRecord, UploadRecordRepository> implements UploadRecordService {
    UploadRecordServiceImpl(UploadRecordRepository repository) { super(repository); }

    @Override
    @Transactional
    public UploadRecord getUploadRecordByFileTag(String fileTag) {
    return uploadRepository.findByFileTag(fileTag);
    }

    @Override
    @Transactional
    public UploadRecord insertUploadRecord(UploadInfo uploadInfo, String path) {
    UploadRecord uploadRecord = new UploadRecord();

    uploadRecord.setId(uploadInfo.getFileTag());
    uploadRecord.setName(uploadInfo.getName());
    uploadRecord.setUuid(uploadInfo.getUuid());
    uploadRecord.setSize(uploadInfo.getSize());
    uploadRecord.setFileTag(uploadInfo.getFileTag());
    uploadRecord.setStatus(0);
    uploadRecord.setPath(path);


    return uploadRecord;
    }

    @Override
    public UploadRecord updateUploadRecord(UploadRecord record) {
    return uploadRepository.save(record);
    }

    @Override
    public void deleteUploadRecord(String id) {
    uploadRepository.deleteById(id);
    }

    @Override
    public UploadRecord updateUploadStatus(String fileTag, Integer Status) {
    UploadRecord record = uploadRepository.findByFileTag(fileTag);

    if (record != null) {
    record.setStatus(Status);
    record = this.updateUploadRecord(record);
    }

    return record;
    }

    @Override
    public UploadState checkUploadedFile(String tag) {
    UploadRecord uploadRecord = uploadRepository.findByFileTag(tag);
    UploadState uploadState = new UploadState();

    if (uploadRecord != null) {
    Integer state = Optional.ofNullable(uploadRecord.getStatus()).orElse(0);

    uploadState.setUuid(uploadRecord.getUuid());
    uploadState.setState(state);
    } else {
    uploadState.setUuid(UUID.randomUUID().toString());
    uploadState.setState(2);
    }

    return uploadState;
    }
    }
    
    
  • 相关阅读:
    docker下安装mysql数据库
    asp.net core3.0 mvc 用 autofac
    遍历Map的方式
    JAVA 每次从List中取出100条记录
    JAVA 必须掌握技能(三)-Java 基础知识
    JAVA 必须掌握技能-Java 知识结构图
    JAVA 必须掌握技能(二)-Java IO流学习之输入输出流
    JAVA 必须掌握技能(一)-集合类型那么多,如何选择使用List, Set, Map?
    JavaScript 开发必须掌握技能(四)- 更好的使用jQuery attr方法
    JavaScript 开发必须掌握技能(三)- 更好的使用for循环方法
  • 原文地址:https://www.cnblogs.com/superman-21/p/14945937.html
Copyright © 2011-2022 走看看