同步操作将从 Troy/bean-searcher 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
虽然 增删改 是 hibernate 和 mybatis、data-jdbc 等等 ORM 的强项,但查询,特别是有 多条件、联表、分页、排序 的复杂的列表查询,却一直是它们的弱项。
传统的 ORM 很难用较少的代码实现一个复杂的列表检索,但 Bean Searcher 却在这方面下足了功夫,这些复杂的查询,几乎只用一行代码便可以解决。
后端需要写一个检索接口,而如果用传统的 ORM 来写,代码之复杂是可以想象的。
而 Bean Searcher 却可以:
无论简单还是复杂,Bean Searcher 都只需一行代码:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private BeanSearcher beanSearcher; // 注入 BeanSearcher 的检索器
@GetMapping("/index")
public SearchResult<User> index(HttpServletRequest request) {
// 只一行代码,实现包含 分页、组合过滤、任意字段排序、甚至统计、多表联查的 复杂检索功能
return beanSearcher.search(User.class, MapUtils.flat(request.getParameterMap()));
}
}
这一行代码可实现:
例如,该接口支持如下查询:
/user/index?type=1&page=1&size=10
/user/index?type=1&name=张&name-op=sw
张
开头的用户,默认分页(第 0 页,每页 15 条)/user/index?type=1&sort=age&order=desc
/user/index?age-0=20&age-1=30&age-op=bt
/user/index?onlySelect=name,age
/user/index?selectExclude=dateCreated
Map<String, Object> params = MapUtils.builder()
.field(User::getType, 1).op("eq") // 条件:type 等于 1
.field(User::getName, "张").op("sw") // 条件:姓名以"张"开头
.field(User::getAge, 20, 30).op("bt") // 条件:年龄在 20 与 30 之间
.field(User::getNickname, "Jack").ic() // 条件:昵称等于 Jack, 忽略大小写
.orderBy(User::getAge, "asc") // 排序:年龄,从小到大
.page(0, 15) // 分页:第 0 页, 每页 15 条
.build();
SearchResult<User> result = beanSearcher.search(User.class, params);
DEMO 快速体验:
使用 Bean Searcher 可以极大地节省后端的复杂列表检索接口的开发时间!
Domain
,无需定义 SearchBean
可以和任意 Java Web 框架集成,如:SpringBoot、Spring MVC、Grails、Jfinal 等等。
implementation 'com.ejlchina:bean-searcher-boot-stater:3.0.1'
接着便可在 Controller
或 Service
里注入检索器:
/**
* 注入 Map 检索器,它检索出来的数据以 Map 对象呈现
*/
@Autowired
private MapSearcher mapSearcher;
/**
* 注入 Bean 检索器,它检索出来的数据以 泛型 对象呈现
*/
@Autowired
private BeanSearcher beanSearcher;
implementation 'com.ejlchina:bean-searcher:3.0.1'
然后可以使用 SearcherBuilder
构建一个检索器:
DataSource dataSource = ... // 拿到应用的数据源
// DefaultSqlExecutor 也支持多数据源
SqlExecutor sqlExecutor = new DefaultSqlExecutor(dataSource);
// 构建 Map 检索器
MapSearcher mapSearcher = SearcherBuilder.mapSearcher()
.sqlExecutor(sqlExecutor)
.build();
// 构建 Bean 检索器
BeanSearcher beanSearcher = SearcherBuilder.beanSearcher()
.sqlExecutor(sqlExecutor)
.build();
面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件!
比如你可以:
DbMapping
)来实现自定义注解,或让 Bean Searcher 识别其它 ORM 的注解ParamResolver
)来支持 JSON 形式的检索参数FieldConvertor
)来支持 数据库没有的 字段类型Dialect
)来支持更多的数据库参阅:https://searcher.ejlchina.com/
文档已完善!
[ Sa-Token ] 一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!
[ OkHttps ] 轻量却强大的 HTTP 客户端,前后端通用,支持 WebSocket 与 Stomp 协议
[ JsonKit ] 超轻量级 JSON 门面工具,用法简单,不依赖具体实现,让业务代码与 Jackson、Gson、Fastjson 等解耦!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。