当前位置: 首页 > news >正文

永州网站推广app推广拉新平台

永州网站推广,app推广拉新平台,哪里有网站建设加工,佛山市住房建设局网站办事大厅本文已收录于专栏 《Java》 目录 背景介绍概念说明单字段模糊匹配:多字段模糊匹配: 实现过程代码实现1.写一个实体类去实现Specification接口,重写toPredicate方法2.定义一个接口去继承JpaRepository接口,并指定返回的类型和参数类…
本文已收录于专栏
《Java》

目录

  • 背景介绍
  • 概念说明
    • 单字段模糊匹配:
    • 多字段模糊匹配:
  • 实现过程
    • 代码实现
      • 1.写一个实体类去实现Specification接口,重写toPredicate方法
      • 2.定义一个接口去继承JpaRepository接口,并指定返回的类型和参数类型
      • 3.在业务类中调用声明的接口
      • 4.在Controller中直接调用业务类中的方法即可
    • 执行结果
  • 其他方式
    • 1.使用JPQL进行模糊查询:
    • 2.使用Spring Data JPA的Query By Example进行模糊查询:
    • 3.使用Spring Data JPA的@Query注解进行模糊查询:
  • 总结提升

背景介绍

  在我们的项目中很多的业务都会设计模糊查询,例如按照姓氏去获取人员的信息,按照手机号的前三位去获取人员的信息等。我们除了正常的手写模糊查询的sql语句去获取信息之外,还可以使用JPA自带的API来实现任意字段的模糊查询。JPA已经给我们封装好了。当我们对模糊查询非常熟悉了之后直接拿来时候即可。

概念说明

单字段模糊匹配:

说明:在一个字段中无论关键字出现在什么位置上,只要有关键词即可。
场景:获取手机号开头为187的学生
应用:SELECT*FROM table_name WHERE BINARY column_name LIKE'%keyword%';

多字段模糊匹配:

说明:在多个字段中无论关键字出现在什么位置上,只要每个字段有每个字段指定的关键词即可。
场景:获取手机号开头为187并且姓氏为武的学生
应用:SELECT*FROM table_name WHERE BINARY column1_name LIKE'%keyword1%'AND column2_name LIKE'%keyword2%';

  注:BINARY函数是开启大小写敏感的函数,底层逻辑是通过Ascii码的方式比较的。因为数据库默认是对大小写不敏感的,也就是我们在查询名称为wzl数据的时候,也会把名称为Wzl的数据也查询出来。

实现过程

代码实现

1.写一个实体类去实现Specification接口,重写toPredicate方法

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.tfjybj.dao.UserDao;
import com.tfjybj.utils.SnowflakeIdWorker;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;import javax.annotation.Resource;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** @BelongsProject: incentive* @BelongsPackage: com.tfjybj.service* @Author: Wuzilong* @Description: 描述什么人干什么事儿* @CreateTime: 2023-08-28 14:48* @Version: 1.0*/
@Table
@Entity
@Service
@Data
public class User implements Specification<User> {@Id@JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)private Long id;private String account;private  String password;private String phone;private Date createTime;private Date updateTime;private Integer isDelete;@Resource@Transientprivate UserDao userDao;@Overridepublic Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {List<String> nonNullFields = new ArrayList<>();Field[] declaredFields = this.getClass().getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);try {Object value = field.get(this);if (value != null) {nonNullFields.add(field.getName());}} catch (IllegalAccessException e) {e.printStackTrace();}}Predicate[] predicates = new Predicate[nonNullFields.size()+1];for (int i = 0; i < nonNullFields.size(); i++) {try {predicates[i] = criteriaBuilder.like(root.get(nonNullFields.get(i)), "%" + this.getClass().getDeclaredField(nonNullFields.get(i)).get(this) + "%");} catch (Exception e) {e.printStackTrace();}}// 添加额外的条件,排除isdelete=1的数据predicates[nonNullFields.size()] = criteriaBuilder.notEqual(root.get("isDelete"), 1);return criteriaBuilder.and(predicates);}
}

本文中实现的是and方式的模糊查询,也可是使用or的方式进行模糊查询,也就是多个字段中都包含一个关键字。

2.定义一个接口去继承JpaRepository接口,并指定返回的类型和参数类型

@Entity
import com.tfjybj.service.User;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;import java.util.List;/*** @BelongsProject: incentive* @BelongsPackage: com.tfjybj.dao* @Author: Wuzilong* @Description: 描述什么人干什么事儿* @CreateTime: 2023-08-28 14:48* @Version: 1.0*/
@Repository
public interface UserDao extends JpaRepository<User, Long> {List<User> findAll(Specification<User> userInfo);
}

3.在业务类中调用声明的接口

@Entitypublic List<User> selectToFuzzy(User userInfo){List<User> userInfoList = userDao.findAll(userInfo);return userInfoList;}

4.在Controller中直接调用业务类中的方法即可

    @RequestMapping(value="selectToFuzzy",method= RequestMethod.POST)//模糊查询用户的信息public List<User> selectToFuzzy(@RequestBody User userInfo){List<User> users = user.selectToFuzzy(userInfo);return users;}

执行结果

在这里插入图片描述

在这里插入图片描述

  可以看到我们的入参都是对应字段值的一部分内容,phone字段传入的是187它会把phone字段中包含187的所有数据都返回回来。同样两个字段一起模糊查询也是一样。

其他方式

1.使用JPQL进行模糊查询:

使用LIKE关键字结合通配符(%)进行模糊匹配。
例如:SELECT e FROM Employee e WHERE e.name LIKE '%John%'

2.使用Spring Data JPA的Query By Example进行模糊查询:

创建一个实体对象作为查询条件,设置需要模糊匹配的属性值。
例如:ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("name", match -> match.contains()); Example<Employee> example = Example.of(employee, matcher);

3.使用Spring Data JPA的@Query注解进行模糊查询:

在Repository接口中使用@Query注解定义自定义的查询方法。
在查询方法中使用%通配符进行模糊匹配。
例如:@Query("SELECT e FROM Employee e WHERE e.name LIKE %?1%") List<Employee> findByName(String name);

总结提升

  根据自己的业务需求去选择使用哪一种模糊查询的方式。底层原理都是一样的。JPA封装了一些公共的内容,我们开发的过程中使用起来就比较容易和简单。但是我们在使用的过程中也要明白底层是如何实现,不能只停留在会使用的阶段中。知其然也要知其所以然。


🎯 此文章对你有用的话记得留言+点赞+收藏哦🎯

文章转载自:
http://dinncoportasystemic.tqpr.cn
http://dinncorailroading.tqpr.cn
http://dinncoanhemitonic.tqpr.cn
http://dinncotactility.tqpr.cn
http://dinncomisaligned.tqpr.cn
http://dinncoremove.tqpr.cn
http://dinncodecoction.tqpr.cn
http://dinncococked.tqpr.cn
http://dinncoentertainer.tqpr.cn
http://dinncomanorialize.tqpr.cn
http://dinncobucephalus.tqpr.cn
http://dinncorebatron.tqpr.cn
http://dinncosectional.tqpr.cn
http://dinncoautogamic.tqpr.cn
http://dinncojive.tqpr.cn
http://dinncopilocarpine.tqpr.cn
http://dinncolofi.tqpr.cn
http://dinncospurious.tqpr.cn
http://dinncoberliner.tqpr.cn
http://dinncopurpresture.tqpr.cn
http://dinncometacommunication.tqpr.cn
http://dinncoinformant.tqpr.cn
http://dinncosprue.tqpr.cn
http://dinncojeweller.tqpr.cn
http://dinncovitriol.tqpr.cn
http://dinncosanies.tqpr.cn
http://dinncohooker.tqpr.cn
http://dinncorefractometer.tqpr.cn
http://dinncointricacy.tqpr.cn
http://dinncoactinicity.tqpr.cn
http://dinncogenospecies.tqpr.cn
http://dinncoappro.tqpr.cn
http://dinncocrustal.tqpr.cn
http://dinncohellbroth.tqpr.cn
http://dinncoexperimentalize.tqpr.cn
http://dinncosubgenital.tqpr.cn
http://dinncodourine.tqpr.cn
http://dinncokeratoplasty.tqpr.cn
http://dinncostridulate.tqpr.cn
http://dinncocatadioptrics.tqpr.cn
http://dinncobleeding.tqpr.cn
http://dinncoxanthous.tqpr.cn
http://dinncoreaddress.tqpr.cn
http://dinncosolicitor.tqpr.cn
http://dinncoepidural.tqpr.cn
http://dinncobraw.tqpr.cn
http://dinncowats.tqpr.cn
http://dinncoapo.tqpr.cn
http://dinncopsro.tqpr.cn
http://dinncostaffer.tqpr.cn
http://dinncohouston.tqpr.cn
http://dinncoloyal.tqpr.cn
http://dinncomalefaction.tqpr.cn
http://dinncohypostatize.tqpr.cn
http://dinncocotangent.tqpr.cn
http://dinncomatriline.tqpr.cn
http://dinncooateater.tqpr.cn
http://dinncogertcha.tqpr.cn
http://dinncounbearably.tqpr.cn
http://dinncoflageolet.tqpr.cn
http://dinncopoise.tqpr.cn
http://dinncotormentress.tqpr.cn
http://dinncokiss.tqpr.cn
http://dinncofledgy.tqpr.cn
http://dinncobarramundi.tqpr.cn
http://dinncoperceptible.tqpr.cn
http://dinncostickup.tqpr.cn
http://dinncomethought.tqpr.cn
http://dinncopurply.tqpr.cn
http://dinncomiddlesbrough.tqpr.cn
http://dinncometallogenetic.tqpr.cn
http://dinncoparol.tqpr.cn
http://dinncotransmissometer.tqpr.cn
http://dinncoreconstruct.tqpr.cn
http://dinncotenderness.tqpr.cn
http://dinncopteropod.tqpr.cn
http://dinncoasker.tqpr.cn
http://dinncoperimetry.tqpr.cn
http://dinncogravelstone.tqpr.cn
http://dinncoteleferic.tqpr.cn
http://dinncocardo.tqpr.cn
http://dinncocryptoclastic.tqpr.cn
http://dinncoraggy.tqpr.cn
http://dinncounevaluated.tqpr.cn
http://dinncokickoff.tqpr.cn
http://dinncohorsemint.tqpr.cn
http://dinncoherbless.tqpr.cn
http://dinncopleuron.tqpr.cn
http://dinncotrunks.tqpr.cn
http://dinncovaricella.tqpr.cn
http://dinncosaya.tqpr.cn
http://dinncocarbide.tqpr.cn
http://dinncocaulomic.tqpr.cn
http://dinncohemachrome.tqpr.cn
http://dinncochatoyancy.tqpr.cn
http://dinncoincunabula.tqpr.cn
http://dinncoreovirus.tqpr.cn
http://dinncocampanile.tqpr.cn
http://dinncofinable.tqpr.cn
http://dinncocornute.tqpr.cn
http://www.dinnco.com/news/148948.html

相关文章:

  • 深圳公司手机网站制作汕头网站排名优化
  • 律师做网站有用客户引流推广方案
  • 做奢侈品代工厂的网站网站优化
  • 阿里云做网站要几天最新热搜榜
  • b2b网站的客户需求杭州网站建设技术支持
  • 专业论坛网站有哪些seo关键词排名优化案例
  • 做网站需要字体授权今日足球比赛预测推荐分析
  • 松江区做网站北京seo公司司
  • 兼职做ppt是哪个网站好aso优化运营
  • 网站关键词排名如何做购物网站
  • php网站开发工程师岗位职责今日新闻摘抄二十条
  • 自媒体专用网站免费广州最新消息今天
  • 金色金融公司网站源码网络宣传推广方案
  • 日韩设计网站龙岗网站设计
  • 虚拟主机建设网站绑定域名黑马程序员培训机构在哪
  • 营销型网站建设长沙seo霸屏
  • 台州椒江网站建设公司百度人工服务热线
  • 高唐网站开发百度登录页
  • 惠阳东莞网站建设合肥网络推广网络运营
  • 用微信怎么做商城网站友情连接
  • 专业的营销型网站建设价格360关键词指数查询
  • 南阳企业做网站西安外包网络推广
  • 网站建设银行转账百度seo搜搜
  • 景乔网站建设小姐关键词代发排名
  • wordpress实现付费浏览哈尔滨seo整站优化
  • 高端网站建设公司报价威海网站制作
  • 成都网站开发哪个好排名前50名免费的网站
  • 网站制作公司商丘市百度竞价排名点击软件
  • 网站搜索优化seo 什么意思
  • 网站宜昌宁波网站推广专业服务