首頁 > 軟體

Bean Searcher配合SpringBoot的使用詳解

2022-06-02 18:01:23

先吐槽一下,現在的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查詢

返回加了欄位名欄位的所有資訊

查詢欄位名為name且值為Lynn的加了欄位名欄位的資訊

結語

最後要說一句,現在網上的文章很多都是抄來抄去的,有互相抄的也有直接搬官方檔案的,所以大家在學一樣東西之前如果有官方檔案官方範例一定要先去看,別問我為什麼懂這個道理的…

最後附上Bean Searcher官方檔案地址和範例的gitee倉庫

官方檔案地址: https://searcher.ejlchina.com/

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

到此這篇關於Bean Searcher配合SpringBoot的使用的文章就介紹到這了,更多相關Bean Searcher配合SpringBoot使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com