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日

相关文章

  • SpringBoot快速搭建web项目详细步骤总结

    下面将详细讲解“SpringBoot快速搭建web项目详细步骤总结”的完整攻略。 1. 确定环境 在开始搭建Spring Boot项目之前,我们需要确保系统中已经安装了以下环境: JDK 8或以上版本 Maven 3.0或以上版本 IDE(推荐使用IntelliJ IDEA) 2. 创建Spring Boot项目 首先,我们需要创建一个新的Spring Bo…

    Java 2023年5月15日
    00
  • Java语言实现扫雷游戏(1)

    “Java语言实现扫雷游戏(1)”是一篇介绍如何使用Java语言编写扫雷游戏的文章。主要分为以下几个步骤: 1. 创建项目 创建一个Java项目,并定义扫雷游戏需要的类和方法。常用的类包括: Mine(扫雷格子) MineField(扫雷地图) MineSweeper(扫雷游戏主类) 2. 实现扫雷格子 定义Mine类,包含以下属性: isMine:格子中是…

    Java 2023年5月26日
    00
  • springboot默认的5种加载路径详解

    在Spring Boot中,有五种默认的加载路径,分别是: classpath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public/ /(根目录) 这些路径可以用于加载静态资源、模板文件等。下面将详细讲解每个路径的作用和使用方法。 1. classpa…

    Java 2023年5月14日
    00
  • SpringBoot实现api加密的示例代码

    什么是API加密? API加密是指对API访问时的数据进行加密处理,确保API的安全性,确保数据在传输过程中不被恶意篡改。 实现API加密的原理 使用SpringBoot框架实现API加密,常用的加密算法有MD5和SHA1。 MD5加密算法可以用以下代码实现: import java.security.MessageDigest; import java.s…

    Java 2023年5月20日
    00
  • Java连接数据库oracle中文乱码解决方案

    下面是关于Java连接数据库Oracle中文乱码解决方案的攻略,分为以下几个步骤: 1. 确定数据库字符集和Java字符集 在连接Oracle数据库前,首先需要确定Oracle数据库的字符集和Java程序的字符集是否一致。可以通过以下方式来确认: 查看Oracle数据库字符集 在Oracle数据库中执行以下SQL语句来查看数据库的字符集: SELECT * …

    Java 2023年5月20日
    00
  • 简单了解java函数式编码结构及优势

    简单了解Java函数式编码结构及优势 前言 在 Java 8 中,函数式编程成为了一个重大的特性。这项特性使得开发人员可以写出更具有简洁性、清晰性和可维护性的代码。在本篇攻略中,我们将简单了解 Java 函数式编码的结构和优势。 函数式编码结构 Lambda 表达式 Lambda 表达式是 Java 8 中最重要的一个特性,是一种简洁地表示函数的方法。它可以…

    Java 2023年5月20日
    00
  • Java中创建对象的5种方式总结

    Java中创建对象的5种方式总结 Java中创建对象有5种方式,分别是:使用new关键字、使用Class类的newInstance()方法、使用Constructor类的newInstance()方法、使用clone()方法、使用反序列化。 使用new关键字 使用new关键字可以直接创建一个对象,其语法格式如下: // 创建类的对象 ClassName ob…

    Java 2023年5月26日
    00
  • IDEA使用SpringAssistant插件创建SpringCloud项目

    下面是“IDEA使用SpringAssistant插件创建SpringCloud项目”的详细攻略: 准备工作 在开始之前,需要保证你的环境中已经安装了JDK和IDEA,并且已经安装了SpringAssistant插件。 创建SpringCloud项目 打开IDEA,选择New Project。 在弹出的New Project窗口中,选择SpringAssis…

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