SSH框架网上商城项目第10战之搭建商品类基本模块

为了方便说明,我们先假设该网上商城项目已经基本搭建完成并且有一个可以登录系统的页面。接下来,针对搭建商品类基本模块,我将按照如下步骤进行讲解:

1. 创建商品类相关的数据库表

首先,需要在数据库中创建商品类相关的表,可以根据实际需求设计表结构,以下是一个示例:

CREATE TABLE `tb_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `parent_id` int(11) DEFAULT NULL COMMENT '父分类id',
  `is_parent` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否为父分类,0否,1是',
  `sort_order` int(11) DEFAULT NULL COMMENT '排序标准',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `tb_item` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) NOT NULL COMMENT '商品标题',
  `sell_point` varchar(100) DEFAULT NULL COMMENT '商品卖点',
  `price` bigint(20) NOT NULL COMMENT '商品价格,单位为:分',
  `num` int(10) NOT NULL DEFAULT '0' COMMENT '库存数量',
  `barcode` varchar(30) DEFAULT NULL COMMENT '商品条形码',
  `image` varchar(200) DEFAULT NULL COMMENT '商品图片',
  `cid` bigint(20) NOT NULL COMMENT '所属类目,叶子类目',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品状态,1:正常,2:下架,3:删除',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_item_title` (`title`),
  KEY `idx_item_cid` (`cid`),
  KEY `idx_item_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建表之后,可以利用Navicat等工具插入一些示例数据,以方便后续开发和测试。

2. 创建商品类的Controller类

Java的代码中,搭建商品类基本模块需要创建Controller类进行控制,以下是示例代码:

@RestController
@RequestMapping("/item")
public class ItemController {

    private static final Logger LOGGER = LoggerFactory.getLogger(ItemController.class);

    @Autowired
    private ItemService itemService;

    @PostMapping("/add")
    public Result addItem(@RequestBody Item item) {
        try {
            int count = itemService.addItem(item);
            if (count > 0) {
                return Result.success("新增商品成功");
            } else {
                return Result.error("新增商品失败");
            }
        } catch (Exception e) {
            LOGGER.error("新增商品异常", e);
            return Result.error("新增商品异常");
        }
    }

    @GetMapping("/list")
    public Result listItems(@RequestParam(defaultValue = "1") int pageNum,
                            @RequestParam(defaultValue = "10") int pageSize) {
        try {
            Page<Item> items = itemService.listItems(pageNum, pageSize);
            return Result.success("查询商品列表成功", items);
        } catch (Exception e) {
            LOGGER.error("查询商品列表异常", e);
            return Result.error("查询商品列表异常");
        }
    }
}

上述代码中,@PostMapping("/add")表示新增商品的请求地址为/item/add@GetMapping("/list")表示查询商品列表的请求地址为/item/list。其中,@RequestBody注解用于将前端传递的JSON字符串转换成Java类对象,@RequestParam注解则用于获取前端传递的参数。

此外,ItemController类中使用了一个ItemService对象,需要在后续步骤中创建。

3. 创建商品类的Service接口和实现类

在Java的代码中,搭建商品类基本模块需要创建Service接口来调用数据库访问层的方法,以下是示例代码:

public interface ItemService {

    int addItem(Item item);

    Page<Item> listItems(int pageNum, int pageSize);
}

上述代码中,addItem方法用于新增商品,listItems方法用于分页查询商品列表。

接下来,需要创建ItemServiceImpl类,实现上述接口的方法。以下是示例代码:

@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private ItemMapper itemMapper;

    @Override
    public int addItem(Item item) {
        item.setCreateTime(new Date());
        item.setUpdateTime(new Date());
        return itemMapper.insert(item);
    }

    @Override
    public Page<Item> listItems(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        ItemExample example = new ItemExample();
        example.createCriteria().andStatusEqualTo(1);
        example.setOrderByClause("create_time desc");
        List<Item> items = itemMapper.selectByExample(example);
        PageInfo<Item> pageInfo = new PageInfo<>(items);
        return pageInfo;
    }
}

上述代码中,@Service注解表示该类是一个Service实现类。@Autowired注解用于注入ItemMapper对象,ItemMapper是访问数据库信息的类。

addItem方法中,item.setCreateTime(new Date())item.setUpdateTime(new Date())分别设置商品的创建时间和更新时间,并将商品插入到数据库中。

listItems方法中,通过PageHelper.startPage(pageNum, pageSize)进行分页设置,然后调用itemMapper.selectByExample(example)方法查询商品列表,并通过PageInfo<Item>对象实现数据的包装和分页。该方法中,ItemExampletk.mybatis.mapper.entity.Example类的对象,在其中可以设置查询条件、排序方式等。

4. 创建商品类的Mapper接口和映射文件

在Java的代码中,使用Mybatis进行数据库操作,需要创建Mapper接口和映射文件。以下是示例代码:

public interface ItemMapper extends Mapper<Item> {
}

上述代码中,ItemMapper继承自Mapper<Item>,使用该接口可以实现通用Mapper功能。

接下来,需要创建ItemMapper.xml,以下是示例代码:

<mapper namespace="com.example.mapper.ItemMapper">

    <resultMap id="BaseResultMap" type="com.example.entity.Item">
        <id column="id" property="id" javaType="java.lang.Long" jdbcType="BIGINT" />
        <result column="title" property="title" javaType="String" jdbcType="VARCHAR" />
        <result column="sell_point" property="sellPoint" javaType="String" jdbcType="VARCHAR" />
        <!--省略其他字段-->
    </resultMap>

    <sql id="Base_Column_List">
        id, title, sell_point, price, num, barcode, image, cid, status, create_time, update_time
    </sql>

    <insert id="insert" parameterType="com.example.entity.Item" useGeneratedKeys="true"
            keyProperty="id">
        insert into tb_item(<include refid="Base_Column_List" />)
        values(#{id,jdbcType=BIGINT}, #{title,jdbcType=VARCHAR}, #{sellPoint,jdbcType=VARCHAR},
         #{price,jdbcType=BIGINT}, #{num,jdbcType=INTEGER}, #{barcode,jdbcType=VARCHAR},
         #{image,jdbcType=VARCHAR}, #{cid,jdbcType=BIGINT}, #{status,jdbcType=TINYINT},
         #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
    </insert>

    <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.example.entity.ItemExample">
        select <include refid="Base_Column_List" /> from tb_item
        <if test="_parameter != null">
            <include refid="Example_Where_Clause" />
        </if>
        <if test="orderByClause != null">
            order by ${orderByClause}
        </if>
        <if test="limit != null">
            limit ${limit}
        </if>
    </select>
</mapper>

上述代码中,<resultMap>标签用于将数据库中的字段映射到Java类的属性,<sql>标签定义了基本的列序,<insert>标签用于新增商品,<select>标签用于查询商品列表。

5. 创建商品类的Dao层接口

在Java的代码中,需要创建Dao层接口,供Service实现类调用Mapper实现类的方法。以下是示例代码:

@Repository
public interface ItemDao {

    int insert(Item item);

    List<Item> selectByExample(ItemExample example);
}

上述代码中,@Repository注解表示该类是一个Dao实现类。int insert(Item item)方法用于新增商品,List<Item> selectByExample(ItemExample example)方法用于查询商品列表。

6. 相关依赖和配置

最后,为了使上述代码可以被正常运行,需要在项目中添加相应的依赖和配置。以下是示例代码:

6.1 依赖

<!--Mybatis依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
<!--通用Mapper依赖-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>
<!--分页插件PageHelper依赖-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

6.2 配置

#Mybatis配置
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.entity
#数据库配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_name
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      #其他配置
  #其他配置
#日志配置
logging:
  level:
    com.example: debug

上述配置中,mybatis.mapper-locations表示映射文件的路径,mybatis.type-aliases-package表示实体类所在的包;spring.datasource表示数据库连接信息,spring.datasource.druid表示数据库连接池的配置;logging.level表示日志配置。

至此,搭建商品类基本模块的完整攻略就讲解完了。在实际开发中,具体的实现方式可能会因项目需求而异,还需要根据实际情况进行适当调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SSH框架网上商城项目第10战之搭建商品类基本模块 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • java实现分布式项目搭建的方法

    下面我来讲解一下“java实现分布式项目搭建的方法”的完整攻略。 一、前置知识 在了解分布式项目搭建之前,需要掌握以下几个基础知识: Java语言基础 Spring框架、Spring Boot框架和Spring Cloud框架的基础知识 Maven和Gradle构建工具的基础知识 数据库的基础知识 Docker、Kubernetes等技术的基础知识 二、分布…

    Java 2023年5月18日
    00
  • java实现两个线程交替打印的实例代码

    下面是详细讲解“java实现两个线程交替打印的实例代码”的完整攻略和示例说明。 首先,实现两个线程交替打印的基本思路是使用wait()和notify()方法进行线程间的通信,其中wait()方法使线程等待,notify()方法唤醒正在等待的线程。具体实现步骤如下: 定义一个对象锁,用于线程间的同步操作。 定义两个标志位:flagA和flagB,分别代表两个线…

    Java 2023年5月18日
    00
  • 堆内存大小的设置有哪些方式?

    关于设置堆内存大小,我们可以采取以下几种方式: 1. 通过命令行参数设置 在启动Java程序时,可以通过命令行参数指定堆内存的大小。具体命令为: java -Xms<initial heap size> -Xmx<maximum heap size> MyApp 其中,-Xms 参数指定堆内存的初始大小,-Xmx 参数指定堆内存的最大…

    Java 2023年5月10日
    00
  • 详解JVM基础之字节码的增强技术

    详解JVM基础之字节码的增强技术 JVM(Java Virtual Machine)是一台虚拟机,它将字节码解释成可执行代码。在Java技术中,字节码是Java类文件中的中间表示形式,并且它是可移植性的关键构成部分。在字节码增强技术中,我们可以使用字节码操作库修改字节码,以实现在程序运行时的动态织入。 一、字节码增强技术的概念 字节码增强技术是在字节码级别上…

    Java 2023年5月26日
    00
  • Go Java算法之简化路径实例详解

    Go Java算法之简化路径实例详解 本篇文章将详细讲解如何使用Go和Java算法来简化路径。首先,我们需要了解路径简化的定义和目的。 什么是路径简化? 路径简化是将路径中冗余的部分删除,使其变得更短、更干净、更易读。例如,路径”/a/b/c/../d”可以简化为”/a/b/d”。这不仅可以节省存储空间,还可以提高代码的效率。 路径简化的目的 路径简化有多种…

    Java 2023年5月19日
    00
  • Sping Security前后端分离两种实战方案

    下面我将详细讲解“Spring Security前后端分离两种实战方案”的完整攻略。 简介 Spring Security 是一款开源的认证和授权框架,可以实现对系统的安全性保护。在前后端分离的架构中,Spring Security 的实现需要特别注意。本文将从两个方面介绍 Spring Security 的前后端分离实现方案。 方案一:基于 Token 的…

    Java 2023年6月3日
    00
  • java数组排列组合问题汇总

    Java数组排列组合问题汇总 在Java中,排列组合是一个常见的问题。本文将介绍如何使用Java处理排列组合问题。 一、排列问题 1.1 什么是排列? 排列是指从多个元素中选出一定数量的元素按一定的顺序排列成一列的不同情况。 1.2 Java中如何实现排列? Java中可以使用递归实现排列。下面是一个示例代码: public static void perm…

    Java 2023年5月26日
    00
  • JAVA十大排序算法之快速排序详解

    JAVA十大排序算法之快速排序详解 算法介绍 快速排序是一种基于分治思想的排序算法,是十大排序算法中非常常用的一种。它的核心思想是取一个基准值,将数组中小于基准值的放在一边,大于它的放在另一边,递归地对两个子集进行排序。通过多次分区排序,最终将整个数组排序。 算法步骤 选择基准值,通常取区间的第一个元素(也可以取随机元素) 分区操作:将区间根据基准值划分为两…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部