# bean-searcher **Repository Path**: guolei1/bean-searcher ## Basic Information - **Project Name**: bean-searcher - **Description**: 超轻量级 Web 条件检索引擎,为弥补传统ORM框架在复杂条件列表检索时的不便而生,使几行代码实现复杂列表检索成为可能! - **Primary Language**: Java - **License**: Artistic-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/ejlchina-zhxu/bean-searcher/wikis/Home - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 297 - **Created**: 2020-09-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Bean Searcher [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.ejlchina/bean-searcher/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.ejlchina/bean-searcher/) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![Troy.Zhou](https://img.shields.io/badge/%E4%BD%9C%E8%80%85-ejlchina-orange.svg)](https://github.com/ejlchina) Introduction --- - git clone https://gitee.com/ejlchina-zhxu/bean-searcher.git - cd bean-searcher && mvn install - have fun. Documentation --- - 中文 https://gitee.com/ejlchina-zhxu/bean-searcher/wikis/Home Examples --- - https://gitee.com/ejlchina-zhxu/bean-searcher-demo ### 依赖 `compile "com.ejlchina:bean-searcher:2.0.0"` --- ### 1.创建bean 创建一个Bean类,实现BeanAware 接口 ``` class TestBean implements BeanAware { } ``` 实现 afterAssembly()方法(不需要添加自定义逻辑时不需要实现BeanAware) 在 afterAssembly() 方法中可以添加bean 装配完之后的自定义逻辑(后面再说具体用法) ``` class TestBean implements BeanAware{ @Override void afterAssembly() { } } ``` 添加注解 @SearchBean ``` @SearchBean(tables="user",joinCond="u.id = 1",groupBy="u.name",distinct=false) class TestBean implements BeanAware{ @Override void afterAssembly() { } } ``` * tables="user u, roles r, user_role ur",参与检索的数据库表名 * joinCond="u.id = ur.user_id and ur.role_id = r.id",参与检索的数据表的连接条件相当于sql中where条件(非必填) * groupBy="u.id,r.name",分组的字段 相当于 sql中group by条件(非必填) * distinct=false,是否去重,默认为 false(非必填) 添加注解@DbField() 用于指定属性对应数据库的哪张表的哪个字段 ``` @SearchBean(tables="user",joinCond="u.id = 1",groupBy="u.name") class TestBean implements BeanAware{ @DbField('u.id') Long id @DbField('u.name') String name @Override void afterAssembly() { } } ``` afterAssembly()方法 可以实现自定义的逻辑,例如:代码的拼接,数值的运算等 ``` @SearchBean(tables="user",joinCond="u.id = 1",groupBy="u.name") class TestBean implements BeanAware{ @DbField('u.id') Long id @DbField('u.name') String name @DbField('u.gender') String gender String data @Override void afterAssembly() { data = "姓名:" + name + ",性别:" + gender } } ``` ### 2.调用bean 注入 SpringSearcher 类,通过search方法可以获得bean中的数据,通过map加入检索的参数 ``` class TestController { //grovvy语言 def searcher def index() { def map = [:] map.max = 10 map.offset = 0 map.sort = "dateCreated" map.order = "desc" def result = searcher.search(TestBean, map as Map) } } ``` * search(Class beanClass, Map map) >适合需要分页的查询 >beanClass:要检索的bean类型 >map:检索参数 >return:bean的数据列表 SearchResult * searchFirst(Class beanClass, Map map) >查询满足条件的第一个bean >beanClass:要检索的bean类型 >map:检索参数(包括排序分页参数) >return:满足条件的第一个bean * searchList(Class beanClass, Map map) >适合不需要分页的查询 >beanClass:要检索的bean类型 >map:检索参数(包括排序分页参数) >return:bean的数据列表 List * searchAll(Class beanClass, Map map) >检索满足条件的所有Bean,不支持偏移 >beanClass:要检索的bean类型 >map:检索参数(包括排序分页参数) >return:Bean的数据列表 List * searchCount(Class beanClass, Map map) >检索满足条件的所有Bean,不支持偏移 >beanClass:要检索的bean类型 >map:检索参数(包括排序分页参数) >return:Bean的数据个数 Number * searchSum(Class beanClass, Map map, String field) >检索满足条件的所有Bean,不支持偏移 >beanClass:要检索的bean类型 >map:检索参数(包括排序分页参数) >field:参与求和的字段 >return:Bean的求和字段 Number * searchSum(Class beanClass, Map map, String[] field) >检索满足条件的所有Bean,不支持偏移 >beanClass:要检索的bean类型 >map:检索参数(包括排序分页参数) >field:参与求和的字段 >return:Bean的求和字段数组 Number[] ### 3.参数运算符 再添加map参数时,可以添加参数的运算符 ``` map.name = "xxxx" map.'name-op' = Operator.Include //map.'name-op' = 'in' ``` |常量|字符定义|释义| |:----:|:---|-----:| |Include|'in'|ike '%xxx%'| |Equal|'eq'|等于| |GreaterEqual|'ge'|大于等于| |GreaterThan|'gt'|大于| |LessEqual|'le'|小于等于| |LessThan|'lt'|小于| |NotEqual|'ne'|不等于| |Empty|'ey'|为空| |NotEmpty|'ny'|不为空| |StartWith|'sw'|like 'xxx%'| |EndWith|'ew'|like '%xxx'| |Between|'bt'|在 .. 和 .. 之间| |MultiValue|'mv'|多值 or|