1. 先建立 entity 层 数据库映射
@Data
@Entity
@DynamicUpdate
@Table(name="wxorder_product_info")
public class ProductInfo {
@Id
private String productId;
/* 名字 */
private String productName;
/* 单价 */
private Float productPrice;
/* 库存 */
private Integer productStock;
/* 描述 */
private String productDescription;
/* 图片 */
private String productIcon;
/* 状态,0 正常 1下架 */
private Integer categoryType;
private Date createTime;
private Date updateTime;
}
2. dao 层
public interface ProductInfoRepository extends JpaRepository<ProductInfo, String>{
List<ProductInfo> findByProductStatus();
}
3. 测试
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public void ProductInfoRepositoryTest(){
@AutoWired
privare ProductInfoRepository repository;
@Test
public ProductInfo queryTest(){
ProductInfo productInfo = repository.findById("123456").get();
Assert.assertNotNull(productInfo);
}
}
4. Service
(1) 先编写接口。
public interface ProductInfoService{
Product findOne(String productId);
// 查询所有在架商品列表
List<ProductInfo> findUpAll();
// 分页,这个注意要选择 domain.Pageable
Page<ProductInfo> findAll(Pageable pageable);
ProductInfo save(ProductInfo productInfo);
}
(2) 实现该接口
// 注意这个类一定要加 `Service` 注解,否则会抛出 bean 之类的错误,不能被 @Autowired 注解。
@Service
public class ProductInfoServiceImpl implements ProductInfoService{
private final ProductInfoRepository repository;
@AutoWired
public ProductInfoServiceImpl(ProductInfoRepository repository){
this.repository = repository;
}
@Override
public ProductInfo findOne(String productId){
return repository.findById(productId).get();
}
@Override
public List<ProductInfo> findUpAll(){
// 可以通过使用枚举来写0
return repository.findByProductStatus(ProductStatusEnum.UP.getCode());
}
@Override
public Page<ProductInfo> findAll(Pageable pageable){
return repository.findAll(pageable);
}
@Override
public ProductInfo save(ProductInfo productInfo){
return repository.save(productInfo);
}
}
(3) 编写 枚举类
public enum ProductStatusEnum{
UP(0,""),
DOWN(1,"")
;
private Integer code;
private String message;
// 构造方法
ProductStatusEnum(Integer code, String message){
this.code = code;
this.message = message;
}
public Integer getCode(){
return code;
}
public String getMessage(){
return message;
}
}
(4) 测试
@RunWith(SpringRunner.class)
@SpringBootTest
class public ProductInfoServiceImplTest{
@Autowired
private ProductInfoServiceImpl productInfoService;
@Test
public void findOne(){
ProductInfo productInfo = productInfoService.findOne("1");
Assert.assertNotNull(productInfo);
}
@Test
public void findUpAll(){
List<ProductInfo> productInfos = productInfoService.findUpAll();
Assert.assertNotNull(productInfos);
}
@Test
public void findAll(){
Pageable pageable = new PageRequest(1, 2);
Page<ProductInfo> productInfoPage = productInfoService.findAll(pageable);
System.out.println(productInfoPage.getTotalElements());
}
@Test
public void save(){
ProductInfo productInfo = new ProductInfo();
productInfo.setProductId("1");
productInfo.setProductName("皮皮虾");
productInfo.setProductStock(1);
productInfo.setProductIcon("http://www.baidu.com");
productInfo.setCategoryType(12);
productInfo.setProductPrice(new BigDecimal(3.2));
productInfo.setProductStatus(0);
productInfo.setProductStatus(0);
productInfoService.save(productInfo);
}
}
总结
- 实现 Entity 层(接口及实现)
- 实现 Repository 层 (接口及实现) -> 测试
- 实现 Service 层 -> 测试