本文将介绍商品信息(product_info)的Dao层和Service层的开发,以及测试。
分页 Pageable 类的使用
枚举 Enum 的使用
...其他的继承上一节
1、数据表结构
注意,我们的 id 是 varchar 类型
以下是测试时添加的一些数据
2、这是最终的文件结构
ProductInfo.java
这里就不解释了,前面的章节已经说过啦。记住我们的 id 用 String 类型啦。
ProductInfoDao.java
ProductInfoDaoTest.java
1、ProductService.java
我们这里的加库存,减库存以后再写
2、ProductServiceImpl.java
注意:第33行的,给商品的状态赋值为0,有时候我们可能会写错,0和1有时候就稀里糊涂搞混了,所有这里使用枚举来管理再好不过了。
这里直接看第六步
还有,第38行,因为是查询所有商品(后台),需要分页,所以
Page<ProductInfo> findAll(Pageable pageable) 是 Page 类型,而不用 List,参数也是 Pageable 的实例对象。
关于 Pageable 我们可以看下它的源码
根据方法命名就能大概推测其功能了。
因为我们表示商品的状态,即 product_status 字段,为 0 表示在架状态,正常可买。为 1则表示已经下架了。如果我们在代码里统统写 0,1这样一方面不利于维护,一方面容易出错。
现在,我们新建一个枚举类型
ProductStatusEnum.java
这样,我们第五步的
return dao.findByProductStatus(0);
可以改成
return dao.findByProductStatus(ProductStatusEnum.UP.getCode());
本节先介绍到此
本文新关键词
分页 Pageable 类的使用
枚举 Enum 的使用
...其他的继承上一节
一、基本准备
1、数据表结构
注意,我们的 id 是 varchar 类型
以下是测试时添加的一些数据
2、这是最终的文件结构
二、实体类的创建
ProductInfo.java
- package com.liuyanzhao.sell.entity;
- import lombok.Data;
- import org.hibernate.annotations.DynamicUpdate;
- import javax.persistence.Entity;
- import javax.persistence.Id;
- import java.math.BigDecimal;
- import java.util.Date;
- /**
- * 商品信息
- * @Author: 言曌
- * @Date: 2017/11/11
- * @Time: 下午9:25
- */
- @Entity
- @DynamicUpdate
- @Data
- public class ProductInfo {
- //商品编号
- @Id
- private String productId;
- //商品名字
- private String productName;
- //商品价格
- private BigDecimal productPrice;
- //商品库存量
- private Integer productStock;
- //商品描述
- private String productDescription;
- //商品小图
- private String productIcon;
- //商品状态,0正常,1下架
- private Integer productStatus;
- //商品分类编号
- private Integer categoryType;
- //创建时间
- private Date createTime;
- //更新时间
- private Date updateTime;
- public ProductInfo() {
- }
- }
这里就不解释了,前面的章节已经说过啦。记住我们的 id 用 String 类型啦。
三、Dao 层的创建
ProductInfoDao.java
- package com.liuyanzhao.sell.dao;
- import com.liuyanzhao.sell.entity.ProductInfo;
- import org.springframework.data.jpa.repository.JpaRepository;
- import java.util.List;
- /**
- * @Author: 言曌
- * @Date: 2017/11/11
- * @Time: 下午9:33
- */
- public interface ProductInfoDao extends JpaRepository<ProductInfo,String>{
- //根据商品状态获取商品列表
- List<ProductInfo> findByProductStatus(Integer productStatus);
- }
四、Dao 层的测试
ProductInfoDaoTest.java
- package com.liuyanzhao.sell.dao;
- import com.liuyanzhao.sell.entity.ProductInfo;
- import org.junit.Assert;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import java.math.BigDecimal;
- import java.util.List;
- /**
- * @Author: 言曌
- * @Date: 2017/11/11
- * @Time: 下午9:36
- */
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class ProductInfoDaoTest {
- @Autowired
- private ProductInfoDao dao;
- @Test
- public void saveTest() {
- ProductInfo productInfo = new ProductInfo();
- productInfo.setProductId("123456");
- productInfo.setProductName("怡宝矿泉水");
- productInfo.setProductPrice(new BigDecimal(2.50));
- productInfo.setProductStock(100);
- productInfo.setProductDescription("纯天然,有点甜");
- productInfo.setProductIcon("http:xxx.com/xx.jpg");
- productInfo.setProductStatus(0);
- productInfo.setCategoryType(2);
- ProductInfo result = dao.save(productInfo);
- Assert.assertNotNull(result);
- }
- @Test
- public void findByProductStatusTest() {
- List<ProductInfo> result = dao.findByProductStatus(0);
- Assert.assertNotEquals(0,result.size());
- }
- }
五、Service 层的创建
1、ProductService.java
- package com.liuyanzhao.sell.service;
- import com.liuyanzhao.sell.entity.ProductInfo;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import java.util.List;
- /**
- * 商品
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 上午11:32
- */
- public interface ProductService {
- //查询一个商品
- ProductInfo findOne(String productId);
- //查询所有上架的商品
- List<ProductInfo> findUpAll();
- /**
- * 查询所有记录(用于后台)
- * @param pageable 分页
- * @return
- */
- Page<ProductInfo> findAll(Pageable pageable);
- //添加商品
- ProductInfo save(ProductInfo productInfo);
- //加库存
- //减库存
- }
我们这里的加库存,减库存以后再写
2、ProductServiceImpl.java
- package com.liuyanzhao.sell.service.impl;
- import com.liuyanzhao.sell.dao.ProductInfoDao;
- import com.liuyanzhao.sell.entity.ProductInfo;
- import com.liuyanzhao.sell.enums.ProductStatusEnum;
- import com.liuyanzhao.sell.service.ProductService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import org.springframework.stereotype.Service;
- import java.util.List;
- /**
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 上午11:39
- */
- @Service
- public class ProductServiceImpl implements ProductService {
- @Autowired
- private ProductInfoDao dao;
- @Override
- public ProductInfo findOne(String productId) {
- return dao.findOne(productId);
- }
- @Override
- public List<ProductInfo> findUpAll() {
- //return dao.findByProductStatus(0);
- return dao.findByProductStatus(ProductStatusEnum.UP.getCode());
- }
- @Override
- public Page<ProductInfo> findAll(Pageable pageable) {
- return dao.findAll(pageable);
- }
- @Override
- public ProductInfo save(ProductInfo productInfo) {
- return dao.save(productInfo);
- }
- }
注意:第33行的,给商品的状态赋值为0,有时候我们可能会写错,0和1有时候就稀里糊涂搞混了,所有这里使用枚举来管理再好不过了。
这里直接看第六步
还有,第38行,因为是查询所有商品(后台),需要分页,所以
Page<ProductInfo> findAll(Pageable pageable) 是 Page 类型,而不用 List,参数也是 Pageable 的实例对象。
关于 Pageable 我们可以看下它的源码
根据方法命名就能大概推测其功能了。
六、使用枚举
因为我们表示商品的状态,即 product_status 字段,为 0 表示在架状态,正常可买。为 1则表示已经下架了。如果我们在代码里统统写 0,1这样一方面不利于维护,一方面容易出错。
现在,我们新建一个枚举类型
ProductStatusEnum.java
- package com.liuyanzhao.sell.enums;
- import lombok.Getter;
- /**
- * 商品状态枚举
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 上午11:42
- */
- @Getter
- public enum ProductStatusEnum {
- UP(0,"在架状态"),
- DOWN(1,"下架状态")
- ;
- private Integer code;
- private String message;
- ProductStatusEnum(Integer code,String message) {
- this.code = code;
- this.message = message;
- }
- }
这样,我们第五步的
return dao.findByProductStatus(0);
可以改成
return dao.findByProductStatus(ProductStatusEnum.UP.getCode());
七、Service 层的测试
- package com.liuyanzhao.sell.dao;
- import com.liuyanzhao.sell.entity.ProductInfo;
- import org.junit.Assert;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import java.math.BigDecimal;
- import java.util.List;
- /**
- * @Author: 言曌
- * @Date: 2017/11/11
- * @Time: 下午9:36
- */
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class ProductInfoDaoTest {
- @Autowired
- private ProductInfoDao dao;
- @Test
- public void saveTest() {
- ProductInfo productInfo = new ProductInfo();
- productInfo.setProductId("123456");
- productInfo.setProductName("怡宝矿泉水");
- productInfo.setProductPrice(new BigDecimal(2.50));
- productInfo.setProductStock(100);
- productInfo.setProductDescription("纯天然,有点甜");
- productInfo.setProductIcon("http:xxx.com/xx.jpg");
- productInfo.setProductStatus(0);
- productInfo.setCategoryType(2);
- ProductInfo result = dao.save(productInfo);
- Assert.assertNotNull(result);
- }
- @Test
- public void findByProductStatusTest() {
- List<ProductInfo> result = dao.findByProductStatus(0);
- Assert.assertNotEquals(0,result.size());
- }
- }
本节先介绍到此
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏