mysql8全文检索应用之二:Mybatis-Plus


上篇( 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
jsqlparser issue 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拦截注入
mybatis-plus拦截忽略注解

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

到这里,就可以愉快的进行开发了~~~~~~~~

惯例宣传一下我的网站 :打字狗 dazigo.vip,传送门->> 打字练习,一个免费在线打字练习、打字测试的网站,打字还不太顺溜的朋友可以多去练习一下哦~~~~

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风云乱动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值