使用Spring data jpa 怎么实现全文检索

使用Spring data jpa 怎么实现全文检索,第1张

我说到的spring data jpa 只需要定义个借口,继承JpaRepository就可以了,然后就能做crud *** 作,而且有方便的分页和排序功能。我现在需要把全文索引功能整合进来,用添加solrServer bean 的方法应该是可以,但是比较繁琐,理由见原帖。 <bean id="solrServer" class="org.apache.solr.client.solrj.impl.CommonsHttpSolrServer">

查询语句放到服务器命令行去跑,如果慢,则可以考虑通过添加索引来提高查询速度。

如已有索引或添加索引后查询速度仍未改善,查看语句执行计划中,是全表扫描还是走索引。如果走了索引,那就可能考虑是服务器性能瓶颈或数据库设置问题,涉及的设置项比较多,你没有提供相关信息,无法继续提供优化建议。如果没有走索引,检查语法(查询条件添加函数不走索引)和表属性(关联表字符集不统一不走索引)。

如果服务器本地快,但页面查询慢,那就排除了性能问题,考虑网络问题与页面查询语句调用的驱动模块是否有问题。检测网络连接速度,如慢尝试更换网线。网络连接速度正常,则尝试更换调用的驱动包,重新下一个或换一个版本。

mysql支持几十万的数据,响应速度应该是毫秒级的。

看了下你的语句,不要用IN了,改INNER JOIN吧,套那么多层IN,肯定没效率。

1、使用@Query自定义查询(Spring Data提供的)

这种查询可以声明在Repository方法中,摆脱像命名查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Spring data的特有实现。

例如:

public interface UserRepository extends JpaRepository<User, Long>{

@Query("select u from User u where u.emailAddress = ?1")

User findByEmailAddress(String emailAddress)

}

2、 @Query与 @Modifying 执行更新 *** 作

这两个annotation一起声明,可定义个性化更新 *** 作,例如只涉及某些字段更新时最为常用,示例如下:

@Modifying

@Query("update User u set u.firstname = ?1 where u.lastname = ?2")

int setFixedFirstnameFor(String firstname, String lastname)

3、 索引参数与命名参数

(1)索引参数如下所示,索引值从1开始,查询中 ”?X” 个数需要与方法定义的参数个数相一致,并且顺序也要一致

@Modifying

@Query("update User u set u.firstname = ?1 where u.lastname = ?2")

int setFixedFirstnameFor(String firstname, String lastname)

(2)命名参数(推荐使用这种方式)

可以定义好参数名,赋值时采用@Param("参数名"),而不用管顺序。如下所示:

public interface UserRepository extends JpaRepository<User, Long>{

@Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")

User findByLastnameOrFirstname(@Param("lastname") String lastname,

@Param("firstname") String firstname)

}

详情可查看 :http://jishiweili.iteye.com/blog/2088265


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11375868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存