文章目录
商品分类管理
-
逆向工程创建Model实体类、Mapper接口、mapper.xml
-
初始化项目环境:
- 配置实例类和表映射(通用Mapper)
- 初始项目结构:创建controller、service
-
实现需求
-
添加分类
-
修改商品
-
商品列表多条件查询:根据商品名称模糊查询、价格范围查询
-
查询每人提成:展示销售人员ID、姓名、销售总金额、提成总金额
- 展示销售人员ID、姓名、销售总金额、提成总金额
tab_user: uid username totalPrice commission
- 查询销售的商品对应的单价、提成比例
SELECT
sale.uid,
sale.pid,
sale.sale_num,
p.sale_price,
p.commission
FROM tab_sale sale,tab_product p
WHERE sale.pid = p.product_id - 销售总金额:totalPrice:
3号销售:售价* 单价 + 售价* 单价
3,1000
1,500
2,600 - 提成总金额:commission
3,500
2,200
1,150 - 把计算结果赋值销售人员
-
逆向工程
- 构建过程
//下载
git clone https://github.com/zouzg/mybatis-generator-gui
//进入解压目录
cd mybatis-generator-gui
//打包
mvn jfx:jar
cd target/jfx/app/
//运行可执行jar
java -jar mybatis-generator-gui.jar
将逆向工程生产的Model类和mapper接口、mapper.xml复制到项目中
注意:
1. model需要绑定对应的表,标注ID
- mapper接口:删除自动生成的单表CRUD方法,我们使用通用Mapper
3. mapper.xml 注意namespace和mapper接口的路径,删除自动生成的单表CRUD方法,我们使用通用Mapper
Model
Brands
@Table(name = "tab_brands")
public class Brands implements Serializable {
/**
* 自增ID
*/
@Id
private Integer brandid;
/**
* 品牌名称
*/
private String brandname;
/**
* 品牌图标
*/
private String brandimg;
/**
* 建立时间
*/
@JsonFormat(pattern="yyyy-MM-dd",timezone = "Hongkong")
private Date createtime;
/**
* 删除标志 -1:删除 1:有效
*/
private Byte dataflag;
/**
* 品牌排序号
*/
private Integer sortno;
/**
* 品牌介绍
*/
private String branddesc;
private List<Goods> goodsList;
//get set...
}
Goods
@Table(name = "tab_goods")
public class Goods implements Serializable {
/**
* 自增ID
*/
@Id
private Integer goodsId;
/**
* 商品编号
*/
private String goodsSn;
/**
* 商品名称
*/
private String goodsName;
/**
* 市场价
*/
private BigDecimal marketPrice;
/**
* 店铺价
*/
private BigDecimal shopPrice;
/**
* 商品总库存
*/
private Integer goodsStock;
/**
* 预警库存
*/
private Integer warnStock;
/**
* 是否上架
*/
private Byte isSale;
/**
* 是否新品
*/
private Byte isNew;
/**
* 上架时间
*/
private Date saleTime;
/**
* 创建时间
*/
private Date createTime;
/**
* 品牌ID
*/
private Integer brandId;
private Brands brands;
//get set...
}
GoodsVo
public class GoodsVo extends Goods {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date createEndTime;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date createStartTime;
//get set...
}
Controller
BrandController
@CrossOrigin
@RestController
@RequestMapping("/brand")
public class BrandController {
@Autowired
BrandService brandService;
/**
* 根据ID查询品牌
* @param brandid
* @return
*/
@GetMapping(value = "/{brandid}")
public Brands selectOne(@PathVariable(value = "brandid") Integer brandid){
Brands brand = brandService.selectByPrimaryKey(brandid);
return brand;
}
/**
* 多条件查询
* @param brands
* @return
*/
@GetMapping(value = "/list")
public List<Brands> listBrands(Brands brands){
List<Brands> brandsList = brandService.selectList(brands);
return brandsList;
}
@PostMapping("/insert")
public void insert(Brands brands){
brandService.insertSelectTive(brands);
}
/**
* 更新品牌
* @param brands
* @return
*/
@PutMapping
public String update(Brands brands){
brandService.updateSelecttive(brands);
return "success";
}
/**
* 一对多查询
* 查查品牌和对应的商品
* @param brandid
* @return
*/
@GetMapping("/list/{brandid}")
public Brands listBrandsAndGoods(@PathVariable("brandid") Integer brandid){
return brandService.listBrandsAndGoods(brandid);
}
}
GoodsController
@RestController
@RequestMapping("/goods")
public class GoodsController {
@Autowired
GoodsService goodsService;
/**
* 多条件查询
* @param goodsVo
* @return
*/
@CrossOrigin
@PostMapping("/list")
public List<Goods> productList(GoodsVo goodsVo){
List<Goods> plist = goodsService.list(goodsVo);
return plist;
}
/**
* 多对一查询
* 查询商品和对应的品牌
* @param goodsid
* @return
*/
@GetMapping("/selectOne")
List<Goods> listGoodsAndBrand(Integer goodsid){
return goodsService.listGoodsAndBrand(goodsid);
}
}
Service
BrandServiceImpl
@Service
@Transactional
public class BrandServiceImpl implements BrandService {
@Resource
BrandsMapper brandsMapper;
/**
* 根据主键查询
* @param brandid
* @return
*/
@Override
public Brands selectByPrimaryKey(Integer brandid) {
return brandsMapper.selectByPrimaryKey(brandid);
}
/**
* 多条件查询
* @param brands
* @return
*/
@Override
public List<Brands> selectList(Brands brands) {
Example example = new Example(Brands.class);
Example.Criteria criteria = example.createCriteria();
//获取查询条件:goodsname isSale
String brandname = brands.getBrandname();
Byte dataflag = brands.getDataflag();
//动态拼接查询条件
if(brandname != null && !brandname.trim().equals("")){
criteria.andLike("brandname","%"+brandname+"%");
}
if(dataflag == null){
criteria.andEqualTo("dataflag",1);
}
//根据example查询
List<Brands> brandsList = brandsMapper.selectByExample(example);
return brandsList;
}
/**
* 插入数据
* @param brands
*/
@Override
public void insertSelectTive(Brands brands) {
//初始化数据
brands.setCreatetime(new Date());
brands.setDataflag((byte) 1);
brands.setSortno(10);
brandsMapper.insertSelective(brands);
}
/**
* 更新数据
* @param brands
*/
@Override
public void updateSelecttive(Brands brands) {
brandsMapper.updateByPrimaryKeySelective(brands);
}
/**
* 一对多查询
* @param brandid
* @return
*/
@Override
public Brands listBrandsAndGoods(Integer brandid) {
return brandsMapper.listBrandsAndGoods(brandid);
}
}
GoodsServiceImpl
@Service
@Transactional
public class GoodsServiceImpl implements GoodsService {
@Resource
GoodsMapper goodsMapper;
/**
* 多条件查询
* @param goodsVo
* @return
*/
@Override
public List<Goods> list(GoodsVo goodsVo) {
String goodsName = goodsVo.getGoodsName();
if(!StringUtils.isEmpty(goodsName)){
goodsVo.setGoodsName("%"+goodsName+"%");
}
List<Goods> goodsList = goodsMapper.listByBoodsVo(goodsVo);
return goodsList;
}
/**
* 多对一查询
* @param goodsid
* @return
*/
@Override
public List<Goods> listGoodsAndBrand(Integer goodsid) {
return goodsMapper.listGoodsAndBrand(goodsid);
}
}
Dao
BrandsMapper
@org.apache.ibatis.annotations.Mapper
public interface BrandsMapper extends Mapper<Brands> {
@Select("SELECT\n" +
"\tbrandId,\n" +
"\tbrandName,\n" +
"\tbrandDesc,\n" +
"\tcreateTime,\n" +
"\tdataFlag,\n" +
"\tsortNo\n" +
"FROM tab_brands\n" +
"WHERE brandId = #{brandid}")
@Results({
@Result(property = "goodsList",column = "brandId",
many = @Many(select = "com.czxy.boot.dao.GoodsMapper.listByBrandId"))
})
Brands listBrandsAndGoods(Integer brandid);
}
GoodsMapper
@org.apache.ibatis.annotations.Mapper
public interface GoodsMapper extends Mapper<Goods> {
List<Goods> listByBoodsVo(GoodsVo goodsVo);
@Select("SELECT \n" +
"\tgoods_id,\n" +
"\tgoods_sn,\n" +
"\tgoods_name,\n" +
"\tmarket_price,\n" +
"\tshop_price,\n" +
"\tgoods_stock,\n" +
"\twarn_stock,\n" +
"\tis_sale,\n" +
"\tis_new,\n" +
"\tsale_time,\n" +
"\tcreate_time,\n" +
"\tbrand_id\n" +
"FROM tab_goods\n" +
"WHERE goods_id = #{goodsid}")
@Results({
@Result(property ="brands",column = "brand_id",
one = @One(select = "com.czxy.boot.dao.BrandsMapper.selectByPrimaryKey"))
})
List<Goods> listGoodsAndBrand(Integer goodsid);
@Select("SELECT \n" +
"\tgoods_id,\n" +
"\tgoods_sn,\n" +
"\tgoods_name,\n" +
"\tmarket_price,\n" +
"\tshop_price,\n" +
"\tgoods_stock,\n" +
"\twarn_stock,\n" +
"\tis_sale,\n" +
"\tis_new,\n" +
"\tsale_time,\n" +
"\tcreate_time,\n" +
"\tbrand_id\n" +
"FROM tab_goods\n" +
"WHERE brand_id = #{brandid}")
List<Goods> listByBrandId(Integer brandid);
}
mapper.xml
GoodsMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czxy.boot.dao.GoodsMapper">
<resultMap id="BaseResultMap" type="com.czxy.boot.model.Goods">
<id column="goods_id" jdbcType="INTEGER" property="goodsId" />
<result column="goods_sn" jdbcType="VARCHAR" property="goodsSn" />
<result column="goods_name" jdbcType="VARCHAR" property="goodsName" />
<result column="market_price" jdbcType="DECIMAL" property="marketPrice" />
<result column="shop_price" jdbcType="DECIMAL" property="shopPrice" />
<result column="goods_stock" jdbcType="INTEGER" property="goodsStock" />
<result column="warn_stock" jdbcType="INTEGER" property="warnStock" />
<result column="is_sale" jdbcType="TINYINT" property="isSale" />
<result column="is_new" jdbcType="TINYINT" property="isNew" />
<result column="sale_time" jdbcType="TIMESTAMP" property="saleTime" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="brand_id" jdbcType="INTEGER" property="brandId" />
</resultMap>
<sql id="Base_Column_List">
goods_id, goods_sn, goods_name, market_price, shop_price, goods_stock, warn_stock,
is_sale, is_new, sale_time, create_time, brand_id
</sql>
<select id="listByBoodsVo" resultMap="BaseResultMap">
select <include refid="Base_Column_List"></include>
from tab_goods
<where>
<if test="goodsSn != null and goodsSn != ''">
goods_sn = #{goodsSn}
</if>
<if test="goodsName != null and goodsName != ''">
and goods_name like #{goodsName}
</if>
<if test="createStartTime != null">
and create_time >= #{createStartTime}
</if>
<if test="createEndTime != null">
<![CDATA[ and create_time <= #{createEndTime} ]]>
</if>
</where>
</select>
</mapper>