为了方便说明,我们先假设该网上商城项目已经基本搭建完成并且有一个可以登录系统的页面。接下来,针对搭建商品类基本模块,我将按照如下步骤进行讲解:
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>
对象实现数据的包装和分页。该方法中,ItemExample
是tk.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技术站