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

yizhihongxing

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

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 堆区(Heap)是一种用于存储对象实例的内存区域。堆区是线程共享的,其大小可以通过 -Xmx 和 -Xms 参数进行设置。 堆区的使用攻略 使用 Java 堆区,需要注意以下几点: 在程序开发中需要合理使用存,避免出现内存泄漏和内存溢出等问题。 在实现自定义的类时,需要注意对象的…

    Java 2023年5月12日
    00
  • Spring Data Exists查询最佳方法编写示例

    下面是关于“Spring Data Exists查询最佳方法编写示例”的完整攻略。 概述 在使用Spring Data进行数据持久化时,我们有时需要在数据访问层中使用Exists查询。Exists查询用于判断数据库中是否存在满足特定条件的记录。在本文中,我们将介绍如何在Spring Data中编写最佳的Exists查询。 方法一:使用方法名查询 Spring…

    Java 2023年6月2日
    00
  • Javac/javap 自带工具简单使用讲解

    Javac和Javap是Java语言中自带的两个工具。Javac能够将Java源代码编译为可执行Java字节代码,而Javap则可以将Java字节码反编译为可读性更高的代码。 使用Javac编译Java源代码 Javac是Java编译器,可将Java源文件编译成字节代码。当然,在使用Javac之前,我们需要先下载并安装Java开发工具包(JDK)。以下是使用…

    Java 2023年5月23日
    00
  • Java LinkedList实现班级信息管理系统

    Java LinkedList实现班级信息管理系统 概述 LinkedList是Java中的一种常用数据结构,它实现了List接口,可以存储任意对象。在班级信息管理系统中,我们可以利用LinkedList来存储学生对象。 实现步骤 1. 定义Student类 在Java LinkedList实现班级信息管理系统中,我们需要先定义一个Student类来表示一个…

    Java 2023年5月24日
    00
  • java判断字符串相等的方法

    Java提供了多种方法来判断字符串相等,常用的有以下五种: 使用”==”运算符 使用”==”运算符判断两个字符串是否相等,实际上是判断两个字符串的引用是否相同。当两个字符串的引用指向同一个内存地址时,它们是相等的,否则不相等。示例代码如下: String str1 = "hello"; String str2 = "hello&…

    Java 2023年5月26日
    00
  • Ubuntu 16.04安装Apache Tomcat的方法

    下面是Ubuntu 16.04安装Apache Tomcat的具体步骤: 步骤一:安装Java环境 在Ubuntu 16.04中,可以通过以下命令安装Java环境: sudo apt-get update sudo apt-get install default-jdk 安装成功后,可以通过以下命令验证Java版本信息: java -version 示例输出…

    Java 2023年5月19日
    00
  • hibernate中的增删改查实现代码

    Hibernate是一个开源的关系型数据库持久化框架,使用Java编写,其映射机制将Java类映射到关系型数据库表中。Hibernate提供了封装的API,简化了对数据库的操作,尤其是增删改查操作。在这里,我们将学习如何使用Hibernate实现增删改查操作。 环境准备 在开始之前,请确保以下环境已经就绪: Java开发环境 Hibernate框架 MySQ…

    Java 2023年5月20日
    00
  • springboot配置Jackson返回统一默认值的实现示例

    下面是“springboot配置Jackson返回统一默认值的实现示例”的完整攻略。 1. 什么是Jackson Jackson是Java中主流的JSON解析库之一,用于Java对象和JSON数据之间的序列化和反序列化。在Spring Boot框架中,常用Jackson来将Java对象转换成JSON格式的数据,以便于前端页面对数据进行展示和处理。 2. 什么…

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