服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Bean Searcher配合SpringBoot的使用详解

Bean Searcher配合SpringBoot的使用详解

2023-02-09 15:03m0_54861649 Java教程

这篇文章主要介绍了Bean Searcher配合SpringBoot的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

先吐槽一下,现在的Bean Searcher操作手册的指引弱的可怜…
对我这样的小白及其不友好

 

话不多说直入主题

1、首先肯定是得引入依赖

<dependency>
          <groupId>com.ejlchina</groupId>
          <artifactId>bean-searcher-boot-starter</artifactId>
          <version>${searcher.version}</version>
      </dependency>

2、再配置一下设置

bean-searcher:
params:
  pagination:
    start: 1

其他的依赖、数据源啥的比较常用这里就不展出

3、然后就是创建实体类

由于我为了快速就用了之前使用MyBatis做持久化的一个项目,所以会有Mapper啥的,不过看官方文档和Demo上的例子,好像也没用到所以应该没影响

!!!为了直观我直接Copy源代码上来,可以先跳过这个源码直接看重点介绍

package com.so2.core.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import com.ejlchina.searcher.bean.BeanAware;
import com.ejlchina.searcher.bean.DbField;
import com.ejlchina.searcher.bean.SearchBean;
import lombok.Data;
/**
1. 用户表
2. @author Lynn
3. @TableName user
*/
@TableName(value ="user")
@Data
@SearchBean( tables = "user")
public class User implements Serializable, BeanAware {
  /**
   * 
   */
  @TableId(type = IdType.AUTO)
  @DbField("id")
  private Integer id;
  /**
   * 用户名
   */
  @DbField("name")
  private String name;
  /**
   * 用户 id
   */
  @DbField("userId")
  private Integer userid;
  /**
   * 用户邮箱
   */
  @DbField("email")
  private String email;
  /**
   * 用户密码
   */
  @DbField("password")
  private String password;
  /**
   * 用户是否被封禁, 0-未封禁,1-已封禁
   */
  @DbField
  private Byte delflag;
  /**
   * 用户权限, 0-游客, 1-普通用户, 2-会员用户, 3-管理员
   */
  @DbField("role")
  private Byte role;
  /**
   * 注册日期
   */
  @DbField("registerTime")
  private Date registertime;
  @Override
  public boolean equals(Object that) {
      if (this == that) {
          return true;
      }
      if (that == null) {
          return false;
      }
      if (getClass() != that.getClass()) {
          return false;
      }
      User other = (User) that;
      return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
          && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
          && (this.getUserid() == null ? other.getUserid() == null : this.getUserid().equals(other.getUserid()))
          && (this.getEmail() == null ? other.getEmail() == null : this.getEmail().equals(other.getEmail()))
          && (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()))
          && (this.getDelflag() == null ? other.getDelflag() == null : this.getDelflag().equals(other.getDelflag()))
          && (this.getRole() == null ? other.getRole() == null : this.getRole().equals(other.getRole()))
          && (this.getRegistertime() == null ? other.getRegistertime() == null : this.getRegistertime().equals(other.getRegistertime()));
  }
  @Override
  public int hashCode() {
      final int prime = 31;
      int result = 1;
      result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
      result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
      result = prime * result + ((getUserid() == null) ? 0 : getUserid().hashCode());
      result = prime * result + ((getEmail() == null) ? 0 : getEmail().hashCode());
      result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
      result = prime * result + ((getDelflag() == null) ? 0 : getDelflag().hashCode());
      result = prime * result + ((getRole() == null) ? 0 : getRole().hashCode());
      result = prime * result + ((getRegistertime() == null) ? 0 : getRegistertime().hashCode());
      return result;
  }
  @Override
  public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append(getClass().getSimpleName());
      sb.append(" [");
      sb.append("Hash = ").append(hashCode());
      sb.append(", id=").append(id);
      sb.append(", name=").append(name);
      sb.append(", userid=").append(userid);
      sb.append(", email=").append(email);
      sb.append(", password=").append(password);
      sb.append(", delflag=").append(delflag);
      sb.append(", role=").append(role);
      sb.append(", registertime=").append(registertime);
      sb.append("]");
      return sb.toString();
  }
  @Override
  public void afterAssembly() {
      System.out.println("--------使用了afterAssembly方法----------");
  }
}

创建实体类需要注意几点

  1. 类,要在类名加上 @SearchBean( tables = “定义表名”) 注解,而且必须加上表名,我之前不加表名会报错,而且加上表名在进行多表查询时才能复用
  2. 实现接口,必须要实现 BeanAware或者ParamAware接口,重写的方法可以不做任何改动。
  3. 字段,必须要在需要得到响应的字段或查询的字段上加上**@DbField(“自定义字段名”)** 注解,而且必须指定字段名,且加上注解的字段必须 大于0 | 大于被查询数
  4. get set,加上LomBok的 @Data 注解,或使用idea的快速生成

4、最后就是编写Controller层

先粘上源码
同上,也可先跳过源码直接看注意事项

package com.so2.core.controller;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ejlchina.searcher.MapSearcher;
import com.ejlchina.searcher.SearchResult;
import com.ejlchina.searcher.Searcher;
import com.ejlchina.searcher.util.MapUtils;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.so2.core.service.impl.UserServiceImpl;
import com.so2.core.model.entity.User;
import com.so2.core.base.BaseResponse;
import com.so2.core.base.ResultUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.apache.catalina.util.RequestUtil;
import org.apache.ibatis.util.MapUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 描述:测试类
*
* @author: Lynn
* @date: 2021/12/3
*/
@Api(tags = "测试接口类")
@ApiSupport(author = "Lynn", order = 07)
@RestController
@RequestMapping("/test")
public class HealthController {
	//MyBatis
  @Resource
  private UserServiceImpl user;
	//注入MapSearcher
  @Autowired
  private MapSearcher mapSearcher;
//	先使用MyBatis方法做个对照组	
//	提示:BaseResponse是我写的响应类,而ResultUtils是返回工具类,返回的结果包含了响应码、响应数据、控制台提示
//    千万别加这个,一旦加了就会报空指针异常
//    @ApiImplicitParam(name = "userName", value = "用户账号名", required = true)
  @ApiOperation(value = "通过用户账号名获取信息")
  @GetMapping("/getN")
  @ResponseBody
  public BaseResponse<List<User>> testGetUser(String userName){
      QueryWrapper<User> qw = new QueryWrapper<>();
      qw.like("name", userName);
      return ResultUtils.success(user.list(qw), "查找成功");
  }
//	这个方法比较多变,官方文档也有说明
  @ApiOperation(value = "通过新的Searcher方法来进行便捷查找")
  @ResponseBody
  @GetMapping("/searcherGet")
  public Object getForSearcher(HttpServletRequest request){
		//	可以在builder()后使用其他方法进行数据筛选
      return mapSearcher.search(User.class,
              MapUtils.builder()
                      .build());
  }
//	这个方法可以传入值进行动态查找
  @ApiOperation(value = "使用Searcher “动态“ 查找字段")
  @ResponseBody
  @GetMapping("/searcherGetName")
  public BaseResponse<Object> dynamicField(){
      Map<String, Object> map = new HashMap<>();
      map.put("name", "Lynn");
      return ResultUtils.success(mapSearcher.searchList(User.class, map), "------动态查询字段成功------");
  }

}

Controller层编写的注意事项

  1. 需要先注入MapSearcherBeanSearcher(官方文档那个提示构建构造器的步骤坑死我了,还以为要写一个单例Bean来进行配置)
  2. 看源码注释,哈哈
  3. (dog这个源码比较粗糙,看的出来我并没有对一些可能出现的异常、情况进行捕获。

看看我查询返回的数据

 

MyBatis查询

Bean Searcher配合SpringBoot的使用详解

 

Bean Searcher查询

返回加了字段名字段的所有信息

Bean Searcher配合SpringBoot的使用详解

查找字段名为name且值为Lynn的加了字段名字段的信息

Bean Searcher配合SpringBoot的使用详解

 

结语

最后要说一句,现在网上的文章很多都是抄来抄去的,有互相抄的也有直接搬官方文档的,所以大家在学一样东西之前如果有官方文档官方示例一定要先去看,别问我为什么懂这个道理的…

最后附上Bean Searcher官方文档地址和示例的gitee仓库

官方文档地址: https://searcher.ejlchina.com/

官方Gitee仓库地址:git@gitee.com:ejlchina-zhxu/bean-searcher.git

到此这篇关于Bean Searcher配合SpringBoot的使用的文章就介绍到这了,更多相关Bean Searcher配合SpringBoot使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_54861649/article/details/125098415

延伸 · 阅读

精彩推荐
  • Java教程java简单操作word实例

    java简单操作word实例

    这篇文章主要为大家详细介绍了java简单操作word实例,感兴趣的朋友可以参考一下 ...

    ngulc5282020-04-08
  • Java教程java多线程模拟实现售票功能

    java多线程模拟实现售票功能

    这篇文章主要为大家详细介绍了java多线程模拟实现售票功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    最好的硕硕10102021-12-07
  • Java教程详解Java同步—线程锁和条件对象

    详解Java同步—线程锁和条件对象

    在这篇文章中给大家详细讲述了Java同步—线程锁和条件对象的相关知识点,有需要的读者们可以参考下。...

    Kepler10222021-05-21
  • Java教程JAVA线程用法详解

    JAVA线程用法详解

    这篇文章主要介绍了JAVA线程用法,配合实例针对Java中线程的开启、sleep、合并与让出等进行了较为深入的分析,需要的朋友可以参考下 ...

    shichen20142102019-11-27
  • Java教程详解利用Spring的AbstractRoutingDataSource解决多数据源的问题

    详解利用Spring的AbstractRoutingDataSource解决多数据源的问题

    本篇文章主要介绍了详解利用Spring的AbstractRoutingDataSource解决多数据源的问题。具有一定的参考价值,有兴趣的可以了解一下。 ...

    alaahong20722020-08-22
  • Java教程java检查数组是否有重复元素的方法

    java检查数组是否有重复元素的方法

    这篇文章主要介绍了java检查数组是否有重复元素的方法,涉及java针对数组元素的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    恺哥7902019-12-26
  • Java教程Java中指定时区的3种方法

    Java中指定时区的3种方法

    这篇文章主要介绍了Java中指定时区的3种方法,本文是一个JAVA项目和.NET项目通讯时遇到的问题,本文给出JAVA中的3种解决方法,需要的朋友可以参考下 ...

    junjie7292019-12-10
  • Java教程Mac下用Java调用c/c++的思路详解

    Mac下用Java调用c/c++的思路详解

    这篇文章主要介绍了Mac下用Java调用c/c++的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    JiajunBernoulli6972021-11-11