学习淘淘商城第四十课(导入商品数据到索引库-dao层)
我们先来看看我们要导入数据的sql语句并且查看查询结果。
针对来自三张表的数据,我们最好使用一个pojo来接收这些数据,而且这个pojo还会作为查询结果的载体,因此服务层和表现层都会用到这个pojo,我们最好把它放到taotao-common工程的pojo目录下。我们新建SearchItem类(记得要实现序列化,因为要进行网络传输)。如下图所示。
private String id;
private String title;
private String sell_point;
private long price;
private String image;
private String item_category_name;
private String item_desc;
下面解释下为何id字段类型为string,我们到/usr/local/solr/solrhome/collection1/conf目录下,打开schema.xml,搜索<field name="id"就可以找到如下图所示的这一行,可以看到id的类型为"string"。数据库中id字段的类型是long,为了避免long和string转换带来的问题,我们就使用string类型。
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接口类,在接口中添加一个接口getSearchItemList,如下图所示。
我们把taotao-manager-dao工程下的某个mapper.xml文件拷贝一份到com.taotao.search.mapper包下,留下头部和<mapper>其余的删掉,在mapper中定义一个sql语句。id为接口的名字,resultType是我们定义的pojo类的全类名。
<?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="getSearchItemList" resultType="com.taotao.common.pojo.SearchItem">
SELECT
a.id,
a.title,
a.sell_point,
a.price,
a.image,
b. NAME item_category_name,
c.item_desc
FROM
tb_item a
LEFT JOIN tb_item_cat b ON a.cid = b.id
LEFT JOIN tb_item_desc c ON a.id = c.item_id
WHERE
a.`status` = 1
</select>
</mapper>