淘淘商城第47讲——导入商品数据到索引库之dao层开发

xiaoxiao2021-02-28  124

我们现在是想要实现导入商品数据到索引库中这一功能的,但前提是要将需要导入的商品数据从数据库中查询出来,所以我们先来看下从数据库中查询即将要导入到索引库中的商品数据的SQL语句,如下图所示。 从上图可知我们需要从tb_item、tb_item_cat以及tb_item_desc三张表中查询数据。针对来自这三张表的数据,我们最好使用一个pojo来接收这些数据,而且这个pojo还会作为查询结果的载体。因为服务层工程和表现层工程都会用到这个pojo,所以我们最好把它放到taotao-common工程的com.taotao.common.pojo包下。于是,我们新建一个SearchItem类(记得该类要实现序列化,因为要进行网络传输),如下图所示。 我为了方便大家复制该类的代码,现将该类的代码贴出来,如下所示。

package com.taotao.common.pojo; import java.io.Serializable; public class SearchItem implements Serializable { private Long id;//商品的id private String title;//商品标题 private String sell_point;//商品卖点 private Long price;//价格 private String image;//商品图片的路径 private String category_name;//商品分类名称 private String item_desc;//商品的描述 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSell_point() { return sell_point; } public void setSell_point(String sell_point) { this.sell_point = sell_point; } public Long getPrice() { return price; } public void setPrice(Long price) { this.price = price; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getCategory_name() { return category_name; } public void setCategory_name(String category_name) { this.category_name = category_name; } public String getItem_desc() { return item_desc; } public void setItem_desc(String item_desc) { this.item_desc = item_desc; } public String[] getImages(){ if(this.getImage()!=null){ String[] split = this.getImage().split(","); return split; } return null; } }

该类的price字段类型之所以定义为Long类型是为了避免使用浮点数类型(Float),价格精确到分,也就是由原来的以元单位的价格乘以100倍(数据库中的价格存储的都是以分为单位的价格)。

由于我们要导入到索引库中的商品数据来自于三张表,因此用逆向工程生成的代码已经解决不了问题了,这样就需要我们手动来写Mapper映射文件了。那么这个Mapper映射文件我们应该放到哪儿呢?可能有人认为应该放到taotao-manager-dao工程下,但是这其实是不太合理的,因为我们的搜索服务只是引用了taotao-manager-dao工程中的一些东西,搜索服务所涉及到的操作非常特殊,别的工程都用不着,所以我们放到taotao-manager-dao工程中不太合适。或许,我们直接放到taotao-search-service工程下会更合适。

接下来我们要在taotao-search-service工程下新建一个com.taotao.search.mapper包,并在该包下新建一个SearchItemMapper接口,该接口中定义了一个getSerarchItemList方法,如下图所示。 然后我们把taotao-manager-dao工程下的某个Mapper.xml映射文件拷贝一份到com.taotao.search.mapper包下并重命名为SearchItemMapper.xml,留下头部,<mapper></mapper>标签中其余的东西都删掉,接着在该标签中定义一条SQL语句,其id为SearchItemMapper接口中方法的名字,resultType为我们定义的pojo类的全类名。 为了方便大家复制,现将SearchItemMapper.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.taotao.search.mapper.SearchItemMapper" > <select id="getSerarchItemList" resultType="com.taotao.common.pojo.SearchItem"> SELECT a.id, a.title, a.image, a.price, a.sell_point, b.`name` as category_name, c.item_desc FROM tb_item a, tb_item_cat b, tb_item_desc c WHERE a.cid = b.id AND a.id = c.item_id </select> </mapper>

至此,把商品数据导入到索引库中的dao层代码编写完毕!

转载请注明原文地址: https://www.6miu.com/read-26546.html

最新回复(0)