黑马点评项目shoptype
时间: 2024-02-25 12:45:55 浏览: 47
黑马点评项目中的shoptype是指商铺分类。根据提供的代码,可以看出项目使用了缓存策略来获取shoptype信息。具体来说,有两种缓存策略实现:
1. String缓存策略:首先从Redis中查询商铺缓存,如果存在则直接返回,否则从数据库中查询,并将查询结果存入Redis中。
2. Zset缓存策略:同样首先从Redis中查询商铺缓存,如果存在则直接返回,否则从数据库中查询,并将查询结果按照排序字段存入Redis中。
以上是黑马点评项目中获取shoptype的实现方式,根据具体需求,可以选择使用不同的缓存策略来提高查询效率。
相关问题
SELECT a.* FROM wsy_dream.ShopDistribute a INNER JOIN wsy_dream.ShopActivity b where a.Isvalid=1 and a.Acquirer_id = 138058 and FIND_IN_SET(1,b.ShopType) ORDER BY CASE a.Consumption WHEN 1 then 99 end desc,a.ID desc;上面这条sql语句,b表只有一条ShopType=1,的数据,为什么查询结果会是全部
根据你提供的 SQL 语句,查询结果会返回 a 表中 Acquirer_id 为 138058,且 Isvalid 为 1,且 ShopType 为 1 的所有记录,因为在查询语句中使用了 INNER JOIN 来连接 a 表和 b 表,并且使用了 FIND_IN_SET 函数来判断 ShopType 是否为 1,但是没有使用 WHERE 子句来限制 b 表中只有一条 ShopType=1 的数据,因此查询结果会返回 a 表中所有符合条件的记录。如果想要限制结果只返回 b 表中 ShopType=1 的数据,则可以在查询语句中添加一个子查询,如下所示:
```
SELECT a.*
FROM wsy_dream.ShopDistribute a
INNER JOIN (
SELECT * FROM wsy_dream.ShopActivity WHERE ShopType = 1
) b ON a.Acquirer_id = b.Acquirer_id
WHERE a.Isvalid=1
ORDER BY CASE a.Consumption WHEN 1 THEN 99 END DESC, a.ID DESC;
```
这样,查询结果就只会返回 a 表中 Acquirer_id 为 138058,且 Isvalid 为 1,且 ShopType 为 1 的记录。
SELECT a.* FROM wsy_dream.ShopDistribute a INNER JOIN ( SELECT * FROM wsy_dream.ShopActivity WHERE FIND_IN_SET(2, ShopType) > 0 UNION SELECT * FROM wsy_dream.ShopActivity WHERE FIND_IN_SET(5, ShopType) > 0 UNION SELECT * FROM wsy_dream.ShopActivity WHERE FIND_IN_SET(4, ShopType) > 0 ) b INNER JOIN wsy_o2o.weixin_cityarea_supply c ON a.Activity_id = b.ID WHERE a.Isvalid=1 and a.Acquirer_id = 138058 and a.Shop_id = c.id and c.types = 20 ORDER BY CASE a.Consumption WHEN 1 THEN 99 END DESC, a.ID DESC; 上述中 inner join 里的值如何使用mybatis xml来进行拼接
在 MyBatis XML 映射文件中,可以使用动态 SQL 标签来实现 SQL 拼接,例如在这个例子中使用 `<foreach>` 标签来拼接 SQL 语句。
可以将内部 JOIN 的语句拼接到一个变量中,然后通过 `<foreach>` 标签遍历一个集合,将集合中的元素动态拼接到 SQL 语句中。具体实现可以参考以下代码:
```
<select id="selectData" resultType="yourResultType">
SELECT a.*
FROM wsy_dream.ShopDistribute a
INNER JOIN (
<foreach collection="activityIds" item="item" separator=" UNION ">
SELECT * FROM wsy_dream.ShopActivity WHERE FIND_IN_SET(#{item}, ShopType) > 0
</foreach>
) b
INNER JOIN wsy_o2o.weixin_cityarea_supply c ON a.Activity_id = b.ID
WHERE a.Isvalid=1 and a.Acquirer_id = 138058 and a.Shop_id = c.id and c.types = 20
ORDER BY CASE a.Consumption WHEN 1 THEN 99 END DESC, a.ID DESC;
</select>
```
在这个例子中,假设 `activityIds` 是一个包含需要查询的 ShopActivity 的 ID 的列表,通过 `<foreach>` 标签将这个列表中的元素动态拼接到 SQL 语句中,从而实现内部 JOIN 的功能。注意,`separator` 属性指定了每个元素之间的分隔符,这里使用了 UNION。同时,在 MyBatis 中,使用 `#{}` 语法来占位符表示需要从参数中获取值,避免了 SQL 注入的问题。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)