上篇( mysql8全文检索应用之一:参数设置)介绍了mysql服务器参数配置、full text索引,这篇介绍如何在Mybatis-Plus下应用全文检索。
1、mybatis-plus版本
最少要3.5.0版本以上,Mybatis-Plus 3.5.0版本以下的jsqlparser组件支持mysql 全文检索方面有bug,jsqlparser 4.3版本彻底修复了对mysql 全文检索(match() against ()语句)的支持,以下是Mybatis-Plus 3.5.0版本的更新日志:
[v3.5.0] 2022.01.01
升级 mybatis 3.5.9
升级 jsqlparser 4.3
新增移除 Mapper 相关缓存,支持 GroovyClassLoader 动态注入 Mapper
添加动态表名的钩子函数 #3965
注入类 DefaultSqlInjector 优化调整
…………
在jsqlparser的issue#1356中,说明了4.3版本才完全修复了对mysql全文检索match() against ()语句的支持,有兴趣的可以去看看。
jsqlparser github的issue地址:https://github.com/JSQLParser/JSqlParser/issues/1356
2、mapper.xml
<!-- 全文索引检索 -->
<select id="queryFulltext" resultType="vip.dazigo.mapper.article">
select * from article
<where>
delete_flag=1
<if test="queryStr != null" >
and ( MATCH (title,content) against (#{queryStr}) )
</if>
</where>
order by id desc
</select>
3、mapper接口
/**
* 根据检索字符串进行全文检索
* <p>
* 全文检索包含字段:title,content
* </p>
* @param page
* @param queryStr
* @return
*/
@InterceptorIgnore(tenantLine = "true")
IPage<Article> queryFulltext(Page<Article> page, @Param("queryStr") String queryStr);
3.1 @InterceptorIgnore(tenantLine = “true”)
注意:—>>>如果项目使用了Mybatis-Plus的多租户插件TenantLineInnerInterceptor,有可能报错,如果出错就在接口方法上加上这个注解:@InterceptorIgnore(tenantLine = “true”)!!!
这个注解的作用是忽略租户sq拦截注入
4、service方法
/**
* 根据搜索字符串进行全文检索
* <p>
* 全文检索包含字段:title,content
* </p>
* @param queryStr
* @return
*/
@Override
public IPage<Article> queryFulltext(Page<Article> page, String queryStr){
return articleMapper.queryFulltext(page,queryStr);
}
5、controller方法
/**
* 分页列表全文检索
*
* @param queryStr
* @param pageNo
* @param pageSize
* @return
*/
@ApiOperation(value="文章-全文检索", notes="文章-全文检索")
@GetMapping(value = "/queryFulltext")
public Result<?> queryPageListFulltext(String queryStr,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
if (oConvertUtils.isEmpty(queryStr) || "".equals(queryStr.trim())){
return Result.error("搜索字符串不能为空",null);
}
//搜索字符串处理xss攻击
queryStr = XSSUtils.striptXSS(queryStr);
Page<Article> page = new Page<Article>(pageNo, pageSize);
IPage<Article> pageList = articleService.queryFulltext(page, queryStr);
return Result.OK(pageList);
}
6、Encountered unexpected token: “MATCH” “MATCH”
debug时如果遇到Encountered unexpected token: “MATCH” “MATCH”,不要慌,只是警告而已!!
debug日志如下:
net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "MATCH" "MATCH"
at line 4, column 11.
Was expecting one of:
"!"
"("
"NOT"
不放心的可以去Mybatis-Plus的issue里看看:
https://github.com/baomidou/mybatis-plus/issues/3294
到这里,就可以愉快的进行开发了~~~~~~~~文章来源:https://www.toymoban.com/news/detail-417538.html
惯例宣传一下我的网站 :打字狗 dazigo.vip,传送门->> 打字练习,一个免费在线打字练习、打字测试的网站,打字还不太顺溜的朋友可以多去练习一下哦~~~~文章来源地址https://www.toymoban.com/news/detail-417538.html
到了这里,关于mysql8全文检索应用之二:Mybatis-Plus的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!