給springmvc接口快速增長字段檢索,外鍵從表檢索,外鍵從表查詢的searchdb註解

介紹

平常業務中常常會碰見根據幾個字段進行檢索,可能檢索字段還分散在不一樣的表中須要進行join關聯查詢; 也有查詢的結果集中帶有Id字段,咱們須要結果集中帶有id對應的實體表的某些字段,這些須要寫關聯查詢的sql才能完成的業務功能。

好比:

咱們查詢訂單表order,須要使用訂單號,用戶username進行檢索,結果集中還須要username等用戶字段,每每設計order表時只有userId字段。這時就須要join關聯,這種方式增長的sql語句的複雜度,在檢索字段或者結果集變更時須要改動sql語句。在分庫的狀況下join難度增大。mysql

在這個需求下,使用@serachdb,你的order查詢只須要select * from order,其餘的檢索字段,結果集整合,會自動完成。git

源碼地址

github.com/mangues/sea…github

0.0.3版本:

  1. @DictSearch 刪除 合併到 @SearchDb上
  2. 支持controller 參數檢索註解

安裝方式

具體案例能夠查看 demo分支spring

maven

<dependency>
  <groupId>top.mangues</groupId>
  <artifactId>searchdb-spring-boot-starter</artifactId>
  <version>0.0.3-RELEASE</version>
</dependency>
複製代碼

Gradle

compile 'top.mangues:searchdb-spring-boot-starter:0.0.3-RELEASE'
複製代碼

配置,mybatis 插件

mybatis-config.xmlsql

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <plugins>
        <!-- sqldb攔截器 -->
        <plugin interceptor="com.mangues.searchdb.mybatis.SearchInterceptor">
            <property name="dialect" value="mysql"/>
        </plugin>

    </plugins>
</configuration>
複製代碼

使用方法

如下圖片隨機網上截取

image

1、簡單使用

user表數據庫

id	name	password
1	張三	123456
2	李思	123456
複製代碼
  1. 正常查詢全部user數據
@GetMapping("/list")
@ApiOperation(value = "獲取用戶列表")
public Object orderList() {
    return iUserService.list();
}
複製代碼
  1. 加上字段name檢索,只須要添加註解 @SearchDb,搜索類UserSearch,UserSearch必須繼承接口SearchBean, 或者參數加上註解@SearchParam(column="必須指定")
@GetMapping("/list")
@ApiOperation(value = "獲取用戶列表")
@SearchDb
public Object orderList(UserSearch userSearch,@RequestParam @SearchParam(column = "name",symbol = SearchParamEnum.like) String username) {
    return iUserService.list();
}
複製代碼

@SearchParam參數:bash

  1. column: 數據庫須要檢索字段,不寫默認變量名下劃線形式userName-user_name
  2. symbol: 檢索類型:=、like、in、between and。目前這幾種,後期加別的
@Data
public class UserSearch implements SearchBean {
   @SearchParam(column = "password",symbol = SearchParamEnum.like)
   private String password;
}

複製代碼

2、其餘使用

1. 檢索時間格式化

order_info 表mybatis

id	user_id	order_num	create_at	    state
1	1	ED123456	2018-12-19 22:23:23	-1
2	2	ED234566	2018-12-20 22:23:23	2
3	1	DF345677	2018-12-21 22:23:23	-2
複製代碼

數據庫格式是 2018-12-19 22:23:23 形式,但是查詢須要按日查詢app

dateFormat 後接數據庫 FORMAT_DATE 函數的格式化 字符串maven

@SearchParam(column = "create_at",symbol = SearchParamEnum.between_and,dateFormat = "%Y-%m-%d")
@ApiModelProperty(value = "訂單時間範圍 2018-12-11,2018-12-24")
private String createDate;
複製代碼

2.between and 用法

必須字符串參數,"," 分隔先後兩個檢索參數

@SearchParam(column = "create_at",symbol = SearchParamEnum.between_and,dateFormat = "%Y-%m-%d")
@ApiModelProperty(value = "訂單時間範圍 2018-12-11,2018-12-24")
private String createDate;
複製代碼

3.枚舉變量檢索支持

必須實現 Enum 接口的string 方法,返回值就是對應的枚舉在數據庫中的存儲值,此處是code

public enum OrderStateEnum implements Enum {
    REFUND(-2,"已經退單"),
    NOFINISH(-1,"訂單未完成鎖定中"),
    NOSETTLEMWNT(0,"未結算"),
    SETTLEMWNT(1,"已結算");
    Integer code;
    String msg;

    private OrderStateEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    @Override
    public String string() {
        return code+"";
    }

複製代碼

3.外鍵查詢

@SearchDb

自動查詢填充主表外鍵所對應的從表數據

好比 select * from order_info 結果集中的user_id 是外鍵,此註解能夠自動完善user_id 對應的user數據
複製代碼

例子:

@DictSearch開啓功能,resultClass 對應返回list 或者 object 類型

@GetMapping("/list")
@ApiOperation(value = "獲取訂單列表")
@SearchDb(resultClass = OrderInfo.class)
public Object orderList(OrderSearch orderSearch) {
    return orderInfoService.list();
}
複製代碼

@DictParam描述外鍵所須要的配置

  1. dictTable:從表
  2. columns: 所要顯示的從表字段
  3. dictId:從表外鍵字段 默認id
public class OrderInfo
    @DictParam(dictTable = "user",columns = {"name","password"},dictId="id")
    private Integer userId;
    ...
}
複製代碼

結果: 自動填充的 userIdDictMap

[
  {
    "userIdDictMap": {
      "password": "123456",
      "name": "張三",
      "id": 1
    },
    "orderNum": "ED123456",
    "state": -1
    "userId": 1,
    "createAt": "2018-12-19T22:23:23"
  },
]
複製代碼

4、加強@SearchParam外鍵檢索

支持外鍵檢索

好比 select * from order_info 只能檢索user_id字段,
 此註解能夠利用 user_id 對應的從表 user 中的字段進行檢索
複製代碼

例子

@SearchParam(column = "name",symbol = SearchParamEnum.like,
                isDictColumn = true,dictColumn = "user_id",dictTable = "user")
 private String userName;
複製代碼

增長:

  1. isDictColumn 此字段否外鍵
  2. dictColumn: 對應的主表外鍵字段
  3. dictTable: 從表

版權聲明:本文爲博主原創文章,未經博主容許不得轉載。 blog.csdn.net/u012915455/…

相關文章
相關標籤/搜索