sumk-db的主要方法及註解

sumk-db的原生入口類有DB(ORM)、SDBjava

 

目的:redis

  1. 減小sql編寫數目,提升開發速度並減小sql出錯機率
  2. 提高性能,能很容易的與redis結合起來
  3. 便於修改表字段,mybatis方式下,修改一個字段會帶來災難性後果
  4. 提供事件機制,便於監控數據庫操做以及慢操做之類

ORM的公共功能sql

大小寫:大小寫不敏感。數據庫

 

字段名:ORM用的是java字段。RawDB、NamedDB用的是原生數據庫字段緩存

 

failIfPropertyNotMapped這個實際上是代碼檢查,爲了防止開發人員寫錯map中的key。默認狀況下,當使用map的時候,若是map的某個key不是pojo中的字段名,就會拋出異常。設爲false會禁用這個異常。本設置只對當前select有效session

 

tableClass若是尚未用過pojo作參數,就用Map<String,Object>作參數,就得調用本法。它的參數是使用了@Table作註解的pojo對象。確保起見,在用map做參數的時候,都調用一次本方法。tableClass能夠是pojo所屬的類,也能夠是所屬類的子類mybatis

 

execute全部的修改操做,都要調用execute()才最終執行。好比DB.insert(pojo),它只是DB.insert().insert(pojo)的簡寫,也須要調用execute()才能執行app

 

Selectless

 

DB採用的是懶執行模式,select只有在queryList、queryOne、count時才執行。性能

count和query能夠一塊兒使用,好比:

Select select=DB.Select()…

int c=select.count();

List list=select.queryList();

 

 

addEqual:

  • 屢次調用之間是(  )or(  )關係
  • AddEqual的參數是Map或pojo對象,各字段之間是And關係

 

比較:

  • 全部的比較是And關係
  • 同一種比較類型,一個key只會出現一次
  • 比較跟全部的Equal是And關係
  • 比較用的是java的字段名,大小寫敏感

 

 

allowEmptyWhere  默認狀況下,select必需要有where條件。設爲false就能夠查詢整張表。若是使用軟刪除,查詢的是全部有效記錄,被刪除的記錄不會查詢出來。若是要查詢已經被刪除的記錄,要使用RawDB或NamedDB

 

resultHandler返回值的處理方式,默認是List<pojo>。使用MapResultHandler.handler做爲參數,就能夠返回List<Map<String,Object>>

 

bigThan大於的意思,有2種重載方式,一種參數是bigThan(String p,Object v),它表示組裝sql的時候,會有相似p>v的條件出現。另外一種是bigThan(map),它表示組裝sql的時候,會有相似(key1>v1 AND key2>v2)的條件出現。bigThan(String p,Object v)能夠屢次調用,屢次調用的效果,相似於調用一次bigThan(map)。bigThan(map)不可屢次調用,屢次調用的話,後調用的會覆蓋前面的;並且它也會覆蓋以前調用的bigThan(String p,Object v)

bigOrEqual是大於等於,使用方式與bigThan相同

 

lessThan 是小於的意思,使用方式與bigThan相同

lessOrEqual是小於等於的意思,使用方式與bigThan相同

 

orderByAsc根據參數字段升序排序,參數是java的field,大小寫敏感

orderByDesc降序排序

  升序降序能夠屢次調用,越早調用的,優先級越高(這是sql決定的)

 

offset  limit起始位置的偏移量,以及返回的記錄數。可使用Paged對象將「第幾頁」這種頁面表示轉化成offset表示

 

selectColumns指定返回的列,通常無需調用。目前版本中,它並不節省數據庫開銷,將來有可能

 

fromCache若是爲false,將強制進行數據庫查詢

 

parseNULL若是爲true,在判斷是否相等時,會將null值解析成is null。不然將忽略null值(默認)

 

byPrimaryId根據數據庫主鍵列表查詢,只能在單主鍵的表中使用

 

byRedisId根據redis主鍵列表查詢,只能應用於redis單主鍵的狀況

 

tableClass若是參數是map,要在設置map參數前調用本方法,只須要調用一次就好了

 

Insert

插入數據庫,同時修改redis緩存。若是是數字類型的單主鍵,不須要顯示設置主鍵,系統會自動生成主鍵。若是設置了,就用你設置的那個主鍵。

 

insert本方法的參數是要插入的記錄,能夠是pojo對象,也能夠是map

  • DB.insert(**)等價於Select select=DB.insert(); select.insert(**)
  • 本方法能夠被屢次調用,至關於批處理
  • 若是使用map作參數,要確保有使用過pojo作參數,若是沒有,請先調用tableClass方法

 

 

 

Update

updateDBID默認狀況下,數據庫的主鍵收到保護,不會被更新。將它設爲false,就能夠更新主鍵

 

 

addWhere添加查詢條件,若是沒有顯式調用本方法,就會使用updateTo參數中的主鍵(數據庫主鍵或redis主鍵)做爲where條件

  • 本方法能夠被屢次調用,屢次調用之間是OR關係。
  • 若是本表使用了緩存,本參數必須包含全部redis主鍵
  • bean類型或Map<String, Object>.若是是pojo對象,其中的null字段會被忽略掉

 

byDBID調用本方法,addWhere爲空時,根據數據庫主鍵更新。本方法是系統默認,通常不須要調用

 

byCacheID調用本方法後,addWhere爲空時,根據redis主鍵更新。若是addWhere不爲空,調用本方法無實際做用

 

updateTo更新後的狀態,要注意所有更新和部分更新的差異。DB.update(**)等價於DB.update().updateTo(**)。若是使用DB.update()方法初始化的,本方法必須被調用

 

execute最終執行,若是不調用本方法,上面的操做都沒有實際做用

 

fullUpdate默認是部分更新,若是設置爲true,就會全局更新。它對updateTo()中的參數起做用

 

incrNum增長某個字段的值,若是要減小,用負數就好了。name參數指的是java的字段名,大小寫敏感。設置了該屬性,updateTo參數中相同字段的值將被忽略。該方法能夠被屢次調用。

 

Delete

  • 屢次調用delete是or關係
  • 分物理刪除和邏輯刪除2種。不管哪種,對業務系統來講,都是刪除。可是邏輯刪除的記錄,在數據庫中仍是存在的。參見@SoftDelete
  • 若是設置的是外鍵緩存,根據主鍵刪除時,也要把外鍵帶上,這樣不影響數據庫刪除,並且也能正確刪除緩存數據

@Table

屬性

含義

value

表名。爲空時,就是小寫的類名

duration

在緩存中保留的時間,單位秒。0表示使用全局設置,小於0表示不過時

preInCache

爲空使用類名,通常使用默認就好

maxBeats

訪問多少次以後刷新緩存,0表示使用全局默認,小於0表示不刷新

cacheType

SINGLE:每一個redis鍵對應一條記錄

LIST:每一個redis鍵對應一個List

NOCACHE:本表不緩存

 

 

  

@SoftDelete

屬性

含義

value

字段名

columnType

字段屬性,默認是String,還支持Int、Byte、Short、Long

validValue

什麼值表示有效。若是是數字類型,會被轉化成數字類型

inValidValue

刪除的時候,會被置爲該值

  

@Column

屬性

含義

value

數據庫字段的名字,不填的話,就是屬性名(小寫)

columnType

 

columnOrder

越小的,在越前面。值相等的時候,根據數據庫字段名排序.使用默認的就好

NORMAL

默認的,表示普通字段

ID_DB

數據庫主鍵。不容許爲null。在更新的時候,若是沒有顯式設置where條件,主鍵字段將不會被更新

ID_CACHE

redis 主鍵,不容許爲null

ID_BOTH

既是數據庫主鍵,也是redis主鍵。不容許爲null

 

app.properties中的一些配置

屬性名

含義

默認值

sumk.sql.fromCache

1表示會select操做會讀取redis

1

sumk.sql.toCache

1表示會select操做會更新redis

1

sumk.orm.update.byType

ID_DB表示根據數據庫主鍵更新,其它標示根據redis主鍵更新

ID_DB

sumk.sql.failIfPropertyNotMapped

1 表示會檢查字段名跟pojo中定義的是否一致

1

sumk.db.config.path

#是數據庫名字

classpath: db/#.ini

http.session.single

1 表示啓用單處登錄

0

http.jetty.resource

靜態文件的目錄

sumk.db.generator

若是爲1,就會打印建表sql

0

sumk.db.generator.db

設置了數據庫別名,將會自動生成數據庫表。但要知足2個條件:

一、sumk.db.generator=1

二、該表還未建立,若是表已存在,將不作任何事情

 

 

SDB:

  • 文件放置在classes底下的sql目錄裏面,支持一級子文件夾
  • namespace是可選的,sql名稱只與namespace和當前sql的id有關,與文件名無關
  • 它是ORM的補充
相關文章
相關標籤/搜索