SpringBoot_逆向工程

商品分类管理

  1. 逆向工程创建Model实体类、Mapper接口、mapper.xml

  2. 初始化项目环境:

    • 配置实例类和表映射(通用Mapper)
    • 初始项目结构:创建controller、service
  3. 实现需求

    • 添加分类

    • 修改商品

    • 商品列表多条件查询:根据商品名称模糊查询、价格范围查询

    • 查询每人提成:展示销售人员ID、姓名、销售总金额、提成总金额

      1. 展示销售人员ID、姓名、销售总金额、提成总金额

      tab_user: uid username totalPrice commission

      1. 查询销售的商品对应的单价、提成比例
        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
      2. 销售总金额:totalPrice:
        3号销售:售价* 单价 + 售价* 单价
        3,1000
        1,500
        2,600
      3. 提成总金额:commission
        3,500
        2,200
        1,150
      4. 把计算结果赋值销售人员

逆向工程

  1. 构建过程
//下载
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

  1. 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>

猜你喜欢

转载自blog.csdn.net/qq_44509920/article/details/107738471