英語 | 中文
文件:https://bs.zhxu.cn
阿里雲最低1折:https://www.aliyun.com/minisite/goods?userCode=zugtbi5w
爵金博客:
只需一行程式碼即可實現:
設計思維:Bean Searcher 的思維
建築學:
雖然CREATE/UPDATE/DELETE是Hibernate、MyBatis、DataJDBC等ORM的強項,但查詢,尤其是多條件、多表、分頁、排序的複雜列表查詢,一直是它們的弱項。
傳統的ORM很難用較少的程式碼實現複雜的列表檢索,但Bean Searcher在這方面做出了很大的努力。這些複雜的查詢幾乎可以用一行程式碼來解決。
後端需要寫檢索API,如果用傳統的ORM來寫,程式碼複雜度非常高
但 Bean Searcher 可以:
首先,您有一個實體類別:
@ SearchBean ( tables = "user u, role r" , joinCond = "u.role_id = r.id" , autoMapTo = "u" )
public class User {
private long id ;
private String username ;
private int status ;
private int age ;
private String gender ;
private Date joinDate ;
private int roleId ;
@ DbField ( "r.name" )
private String roleName ;
// Getters and setters...
}
然後你可以用一行程式碼完成API:
@ RestController
@ RequestMapping ( "/user" )
public class UserController {
@ Autowired
private BeanSearcher beanSearcher ; // Inject BeanSearcher
@ GetMapping ( "/index" )
public SearchResult < User > index ( HttpServletRequest request ) {
// Only one line of code written here
return beanSearcher . search ( User . class , MapUtils . flat ( request . getParameterMap ()), new String []{ "age" });
}
}
這行程式碼可以實現:
age
欄位摘要例如,可以如下請求該API:
GET: /user/index
預設分頁檢索:
{
"dataList" : [
{
"id" : 1 ,
"username" : " Jack " ,
"status" : 1 ,
"age" : 25 ,
"gender" : " Male " ,
"joinDate" : " 2021-10-01 " ,
"roleId" : 1 ,
"roleName" : " User "
},
... // 15 records default
],
"totalCount" : 100 ,
"summaries" : [
2500 // age statistics
]
}
GET: /user/index? page=1 & size=10
按指定分頁檢索
GET: /user/index? status=1
預設分頁status = 1
檢索
GET: /user/index? name=Jac & name-op=sw
預設分頁檢索以Jac
開頭的name
GET: /user/index? name=Jack & name-ic=true
預設分頁檢索name = Jack
(忽略大小寫)
GET: /user/index? sort=age & order=desc
按age
降序擷取並預設分頁
GET: /user/index? onlySelect=username,age
預設分頁僅擷取username,age
:
{
"dataList" : [
{
"username" : " Jack " ,
"age" : 25 ,
},
... // 15 records default
],
"totalCount" : 100 ,
"summaries" : [
2500 // age statistics
]
}
GET: /user/index? selectExclude=joinDate
檢索joinDate
排除的預設分頁
Map < String , Object > params = MapUtils . builder ()
. selectExclude ( User :: getJoinDate ) // Exclude joinDate field
. field ( User :: getStatus , 1 ) // Filter:status = 1
. field ( User :: getName , "Jack" ). ic () // Filter:name = 'Jack' (case ignored)
. field ( User :: getAge , 20 , 30 ). op ( Opetator . Between ) // Filter:age between 20 and 30
. orderBy ( User :: getAge , "asc" ) // Sorting by age ascending
. page ( 0 , 15 ) // Pagination: page=0 and size=15
. build ();
List < User > users = beanSearcher . searchList ( User . class , params );
演示:
使用Bean Searcher可以大幅節省複雜清單檢索api的開發時間!
domain
,無需定義新的Entity
Bean Searcher 可以與任何 JavaWeb 框架配合使用,例如:SpringBoot、SpringMVC、Grails、Jfinal 等。
您所需要的只是添加一個依賴項:
implementation ' cn.zhxu:bean-searcher-boot-stater:4.3.4 '
然後你可以將 Searcher 注入到Controller
或Service
中:
/**
* Inject a MapSearcher, which retrieved data is Map objects
*/
@Autowired
private MapSearcher mapSearcher;
/**
* Inject a BeanSearcher, which retrieved data is generic objects
*/
@Autowired
private BeanSearcher beanSearcher;
您所需要的只是添加一個依賴項:
implementation ' cn.zhxu:bean-searcher-solon-plugin:4.3.4 '
然後你可以將 Searcher 注入到Controller
或Service
中:
/**
* Inject a MapSearcher, which retrieved data is Map objects
*/
@Inject
private MapSearcher mapSearcher;
/**
* Inject a BeanSearcher, which retrieved data is generic objects
*/
@Inject
private BeanSearcher beanSearcher;
新增此相依性:
implementation ' cn.zhxu:bean-searcher:4.3.4 '
然後你可以使用SearcherBuilder
建立一個Searcher
:
DataSource dataSource = ... // Get the dataSource of the application
// DefaultSqlExecutor suports multi datasources
SqlExecutor sqlExecutor = new DefaultSqlExecutor ( dataSource );
// build a MapSearcher
MapSearcher mapSearcher = SearcherBuilder . mapSearcher ()
. sqlExecutor ( sqlExecutor )
. build ();
// build a BeanSearcher
BeanSearcher beanSearcher = SearcherBuilder . beanSearcher ()
. sqlExecutor ( sqlExecutor )
. build ();
您可以自訂和擴充 Bean Searcher 中的任何元件。
例如:
FieldOp
以支援其他現場操作員DbMapping
以支援其他 ORM 的註釋ParamResolver
以支援 JSON 查詢參數FieldConvertor
以支援任何類型的字段Dialect
以支援更多資料庫參考:https://bs.zhxu.cn
[Sa-Token]一個輕量級Java權限認證框架,讓鑑權變得簡單、優雅!
[ Fluent MyBatis ] MyBatis 語法增強框架,綜合了 MyBatisPlus、DynamicSql、Jpa 等框架的特性與優點,利用註解處理器產生程式碼
[ OkHttps ]輕量卻強大的 HTTP 用戶端,前端通用,支援 WebSocket 和 Stomp 協定
[ hrun4j ]介面自動化測試解決方案--工具選得好,下班早回家;測試用得對,半夜安心睡覺
[ JsonKit ]超輕量級 JSON 門面工具,最簡單,不依賴具體實現,讓業務程式碼與 Jackson、Gson、Fastjson 等解耦合!
[免費UI]基於Vue3 + TypeScript,一個非常輕量酷的UI元件庫!
git checkout -b feat/xxxx
git commit -am 'feat(function): add xxxxx'
git push origin feat/xxxx
pull request