博客中需要包含一个简单的检索功能,我自己设定的目标是能够通过检索一定的关键词来获取带有这些关键词的标题的博客列表,并且能够通过云图展示搜索趋势。
1. Service
在ArticleService.java中添加三个方法
//模糊查找 title的相关内容
List<Article> getArticleListByTitle(String contents);
//搜索记录相关
List<Search> getSearchHistory();
int addSearchHistory(Search search);
在ArticleServiceImpl.java中对其进行实现
@Override
/**
* @description: 查找的匹配方式是%contents%,如果检索到,则会将这个contents加到search History中
* @param [contents]
* @return java.util.List<com.nevergetme.nevergetmeweb.bean.Article>
* @throws
* @author Alden He
* @date 2019/5/23 19:04
*/
public List<Article> getArticleListByTitle(String contents){
List<Article> list=articleMapper.getArticleListByTitle("%"+contents+"%");
if(list!=null&&list.size()>0)articleMapper.addSearchHistory(new Search(contents,1));
return list;
}
//搜索记录相关
@Override
public List<Search> getSearchHistory(){
return articleMapper.getSearchHistory();
}
@Override
public int addSearchHistory(Search search){
return articleMapper.addSearchHistory(search);
}
这里的一个处理逻辑是如果搜索结果存在则将搜索词添加到搜索历史中
2. Mapper
在ArticleMapper添加如下方法
List<Article> getArticleListByTitle(String contents);
//搜索记录相关
List<Search> getSearchHistory();
int addSearchHistory(Search search);
在ArticleMapper.xml中的实现为
<select id="getArticleListByTitle" parameterType="java.lang.String" resultMap="articleResultMapList">
select article.id,article.title,article.shortcut,
DATE_FORMAT(article.publishDate,'%Y-%m-%d') publishDate,
DATE_FORMAT(article.updateDate,'%Y-%m-%d') updateDate,article.likes,article.visitTimes,article.isStick,article.cover,
user.id as user_id,user.username
from article left join user on article.authorId=user.id where article.title like #{contents}
order by isStick desc,article.id desc
</select>
<select id="getSearchHistory" resultType="com.nevergetme.nevergetmeweb.bean.Search">
select * from SearchHistory
</select>
<insert id="addSearchHistory" parameterType="com.nevergetme.nevergetmeweb.bean.Search" keyProperty="id" useGeneratedKeys="true">
insert into SearchHistory(content,times) values(#{content},#{times}) on duplicate key update times=times+1
</insert>
3. SQL建表
需要建立存储搜索记录的表
CREATE TABLE `searchhistory` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(200