SpringBoot中不通过主外建关系,通过jpa关联两个表
实体层
BaseMOdel(所有的实体类都会继承它)
@MappedSuperclass
@Data
@EntityListeners(AuditingEntityListener.class)
@Audited
public class BaseModel {
public static final String SOFT_DELETED_CLAUSE = “isDeleted = false”;
@Id
@GeneratedValue(generator = "uuid_short")
@GenericGenerator(name = "uuid_short",strategy = "com.zgy.handle.cardService.model.hibernate.UUIDGenerator")
@Column(name = "id",nullable = false)
@JSONField(serializeUsing = ToStringSerializer.class)
protected Long id;
@JsonIgnore
protected boolean isDeleted = false;
@CreatedBy
protected String creator;
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@CreationTimestamp
protected Date createTime;
@LastModifiedBy
protected String updator;
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@UpdateTimestamp
protected Date updateTime;
@ApiModelProperty("备注")
@Column(name = "note",columnDefinition = "text null")
protected String note;
private String createdId; // 创建人的id
private String belongId; // 归属id 部门或者企业
}
实体类
@Entity
@Table(name = “grade”)
@Slf4j
@Audited
@Data
public class Grade extends BaseModel implements Serializable {
//年级表
private String gradeName;//年级名
}
BaseDTO (用来做所用实体DTO的父类声明id)
@Data
public class BaseDTO {
private String id;
}
实体DTO类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Slf4j
public class GradeDTO extends BaseDTO {
private String gradeName;//年级名
}
GradePage(用来做分页的工具类)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Slf4j
public class GradePage {
private Long total;
private List gradeDTO;
}
上边是年级表的创建另一张学生表见https://editor.csdn.net/md/?articleId=118575790
数据处理层(dao)
public interface GradeQueryRepository extends QueryRepository {
Grade findById (int id);
List<Grade> findByGradeNameLike (String gradeName);
}
逻辑处理层(Service)
//接口类
public interface GradeQueryService extends QueryService<Grade, GradeDTO> {
Page getList(String gradeName, int page, int size);
//俩表查全部分页查
Page getStudentDToList(String name,int page, int size);
}
//接口实现类
@Service
@Slf4j
public class GradeQueryServiceImpl extends QueryServiceImpl<Grade, GradeDTO> implements GradeQueryService {
@Autowired
private ZhjMapper zhjMapper;
@Autowired
private ZhjQueryRepository zhjQueryRepository;
@Autowired
private GradeMapper gradeMapper;
private GradeQueryRepository gradeQueryRepository;
public GradeQueryServiceImpl(GradeQueryRepository gradeQueryRepository) {
super(gradeQueryRepository);
this.gradeQueryRepository=gradeQueryRepository;
}
@Override
public Page<Grade> findByDynamicQuery(Pageable pageable, GradeDTO dto) {
return null;
}
@Override
public Specification<Grade> querySpecification(GradeDTO dto) {
return null;
}
@Override
public <T> Optional<T> findByName(String name) {
return Optional.empty();
}
//年级表模糊查询加分页的方法
@Override
public Page getList(String gradeName, int page, int size) {
List gradeDTOList = new ArrayList<>();
Pageable pageable = PageRequest.of(page , size);
List gradetList = gradeQueryRepository.findByGradeNameLike("%"+gradeName+"%");
gradeDTOList= gradeMapper.toGradeDTOList(gradetList);
//当前页第一条数据在list中的位置
int start = (int) pageable.getOffset();
//当前页最后一条数据在list中的位置
int end = (start + pageable.getPageSize()) > gradeDTOList.size() ? gradeDTOList.size() : (start + pageable.getPageSize());
Page pagestudentdto = new PageImpl(gradeDTOList.subList(start, end), pageable, gradeDTOList.size());
return pagestudentdto;
}
俩表的通过学生name模糊查询加分页的方法
@Override
public Page<StudentDTO> getStudentDToList(String name, int page, int size) {
Pageable pageable=PageRequest.of(page,size);
List<Student> studentList= zhjQueryRepository.findByNameLike("%"+name+"%");//根据名字查出了学生数据
List<StudentDTO> studentDTOList=zhjMapper.toStudentDTOList(studentList);//studentDTO数据
for (StudentDTO studentDTO:studentDTOList){
String gradeId=studentDTO.getGradeId();
Optional<Grade> byId = gradeQueryRepository.findById(Long.parseLong(gradeId));
String gradeName = byId.get().getGradeName();
studentDTO.setGradeName(gradeName);
}
//当前页第一条数据在list中的位置
int start = (int) pageable.getOffset();
//当前页最后一条数据在list中的位置
int end = (start + pageable.getPageSize()) > studentDTOList.size() ? studentDTOList.size() : (start + pageable.getPageSize());
Page<StudentDTO> pagestudentdto = new PageImpl<StudentDTO>(studentDTOList.subList(start, end), pageable, studentDTOList.size());
return pagestudentdto;
}
}
逻辑层
//用来做DTO与实体相互转换的工具类
@Mapper(componentModel = “spring”)
public interface GradeMapper {
Grade toGrade(GradeDTO gradeDTO);
GradeDTO toGradeDTO(Grade grade);
List toGradeDTOList(List GradetList);
}
contorller
@RestController
@Slf4j
@RequestMapping(value = “grade/query”)
public class GradeQuaryController extends QueryController<Grade, GradeDTO> {
@Autowired
private GradeMapper gradeMapper;
private GradeUpdateService gradeupdateService;
private GradeQueryService gradequeryService;
public GradeQuaryController(GradeUpdateService gradeupdateService, GradeQueryService gradequeryService) {
super(gradeupdateService, gradequeryService);
this.gradequeryService=gradequeryService;
this.gradeupdateService=gradeupdateService;
}
@GetMapping(value = “mohu”, produces = { “application/json;charset=UTF-8”})
public ResponseCode<List> getlistlikename(String gradeName, int page, int size){
ResponseCode<List> responseCode = ResponseCode.sucess();
responseCode.setDataInfo(gradequeryService.getList(gradeName,page,size));
return responseCode;
}
用來做倆表查詢的入口
@GetMapping(value = "towTable/{name}", produces = { "application/json;charset=UTF-8"})
public ResponseCode<List<StudentDTO>> getTowTablename(String studentName, int page, int size){
ResponseCode<List<StudentDTO>> responseCode = ResponseCode.sucess();
responseCode.setDataInfo(gradequeryService.getStudentDToList(studentName,page,size));
return responseCode;
}
@Override
public List<SelectDTO> convertTtoSelectDTOList(List<Grade> grades) {
return null;
}
@Override
public List<GradeDTO> convertTtoU(List<Grade> grades) {
return gradeMapper.toGradeDTOList(grades);
}
@Override
public GradeDTO convertTtoU(Grade grade) {
return gradeMapper.toGradeDTO(grade);
}
@Override
public Grade convertUtoT(GradeDTO gradeDTO) {
return gradeMapper.toGrade(gradeDTO);
}