将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;
}
}

上一篇:sql server 2008所有类型对应ef自动生成的约束和实体属性


下一篇:C++类型双关