package org.hsweb.web.service.impl; import org.hsweb.commons.ClassUtils; import org.hsweb.web.bean.po.GenericPo; import org.hsweb.web.bean.validator.ValidateResults; import org.hsweb.web.core.exception.NotFoundException; import org.hsweb.web.core.exception.ValidationException; import org.hsweb.web.dao.*; import org.hsweb.web.service.GenericService; import org.hsweb.web.service.commons.SimpleDeleteService; import org.hsweb.web.service.commons.SimpleInsertService; import org.hsweb.web.service.commons.SimpleQueryService; import org.hsweb.web.service.commons.SimpleUpdateService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import javax.validation.ConstraintViolation; import javax.validation.Validator; import java.util.Set; /** * 抽象通用服务实现类,通过指定{@link GenericMapper} 实现通用的增删改查方法 * * @param <Po> PO类型 * @param <PK> 主键类型 * @author zhouhao * @see GenericService * @since 1.0 */ @Transactional(rollbackFor = Throwable.class) public abstract class AbstractServiceImpl<Po extends GenericPo<PK>, PK> implements GenericService<Po, PK> , SimpleQueryService<Po, PK> , SimpleUpdateService<Po, PK> , SimpleDeleteService<PK> , SimpleInsertService<Po, PK> { protected Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired protected Validator validator; protected abstract GenericMapper<Po, PK> getMapper(); @Override public Class<PK> getPKType() { return (Class<PK>) ClassUtils.getGenericType(org.springframework.util.ClassUtils.getUserClass(this.getClass()), 1); } @Override public QueryMapper<Po, PK> getQueryMapper() { return getMapper(); } @Override public UpdateMapper<Po> getUpdateMapper() { return getMapper(); } @Override public DeleteMapper getDeleteMapper() { return getMapper(); } @Override public InsertMapper<Po> getInsertMapper() { return getMapper(); } public void tryValidPo(Po data) { Set<ConstraintViolation<Object>> set = validator.validate(data); ValidateResults results = new ValidateResults(); for (ConstraintViolation<Object> violation : set) { results.addResult(violation.getPropertyPath().toString(), violation.getMessage()); } if (!results.isSuccess()) throw new ValidationException(results); } protected void assertNotNull(Object po, String message) { if (po == null) { throw new NotFoundException(message); } } protected void assertNotNull(Object po) { assertNotNull(po, "数据不存在"); } }