上篇:最近火起的 Bean Searcher 与 MyBatis Plus 倒底有啥差异?
介绍
Bean Searcher 是一款专心高档查询的只读 ORMmysql数据库命令大全,天生支撑联表,免 DTO/VO 转换,使一行代码完成复杂列表检索成为可能!
它能够像 基础组件 ORM 那样运用,一起也拥有 挨近低代码 的开发功率。
运用场景
Bean Searcher 专治复mysql密码忘记了怎么办杂的检索需求,例如:
- 一般后端查询
- 动态检索办法
- 动态数据库系统概论第五版课后答案分组查询github中文官网网页
以数据库系统概论第五版课后答案上场景 Bean Searcmysql安装配置教程her 都能够一行代码完成后端代码,极实体类的定义大进步生产力。
设计思想(出发点)mysql安装配置教程
bs.zhxu.cn/guide/lates…
开发功率能够极大提高的原因
bs.zhxu.cn/guide/lates…
结构功能
功能不是主要卖点,但也比传统 ORM 结构均匀提高 2 ~ 5 倍(Java 层功能)
详情:gitee.com/t数据库royzhxu/be…
代码库房
- Github: github.com/troyzhxu/be…
- Gitee: gitee.com/troyzhxu/be…
文档与博客
- 文档:bs.zhxu.cn/
- 博客:/column/7028…
新版本 v3.8.0 的改变
1、提高数据库兼教学设计思想容性
新增 参数转换器 机制,使 Oracle、PgSql 等数据库也同 MySQL 般顺滑。
参考:gitee.com/troyzhxu/be…
2、参数构建器支撑 自定义 SQL 条件
自定义 SQL 条件,只能在后端通过参数构建器运用,例如
Map<String, Object> params = MapUtils.builder()
// 生成 SQL 条件:u.id in (select user_id from xxx)
.field(User::getId).sql("$1 in (select user_id from xxx)")
.build();
List<User> users = searcher.searchList(User.class, params);
用$n
来表示所需引用的第n
个字段,再如:
Map<String, Object> params = MapUtils.builder()
// 生成 SQL 条件:id < 100 or age > 10
.field(User::getId, User::getAge).sql("$1 < 100 or $2 > 10")
.build();
List<User> users = searcher.searchList(User.class, params);
也能够在自定义的 SQL 片段中运用参数占位符 ?
(作为 JDBC 参数),例如:
Map<String, Object> params = MapUtils.builder()
// 生成 SQL 条件:id < ? or age > ?,两个占位符参数分别为:100,10
.field(User::getId, User::getAge).sql("$1 < ? or $2 > ?", 100, 10)
.build();
List<User> users = searcher.searchList(User.class, params);
3、分组动态查询条件生成机制
- 分组字段 生成
where
条件,其它字段 生成having
条件
例如一个指定了 gr软件设计思想oupmysql基础命令By
的 SearchBean:
@SearchBean(
tables = "student_course",
groupBy = "course_id" // 按课程 ID 分组
)
public class CourseScore {
@DbField("course_id")
private long courseId;
@DbField("sum(score)") // 该课程的总分(聚合函数:sum)
private long totalScore;
}
当以 coMySQLurseI实体类的作用d
为条件时:
Map<String, Object> params = MapUtils.builder()
.field(CourseScore::getCourseId, 101).op(LessThan.class)
.build();
List<CourseScore> list = searcher.searchList(CourseScore.class, params);
履行 SQL(条件在 where 里):
select course_id, sum(score) from student_course where course_id < 101 group by course_id
当以 totalScore
为条件时:
Map<String, Object> params = MapUtils.builder()
.field(CourseScore::getTotalScore, 500).op(GreateThan.class)
.build();
List<CourseScore> list = searcher.searchList(CourseScore.class, params);
履行 SQL(条件在 having 里):
select course_id, sum(score)
from student_course
group by course_id
having sum(score) > 500
当然两者还能够组合:
Map<String, Object> params = MapUtils.builder()
.field(CourseScore::getCourseId, 101).op(LessThan.class)
.field(CourseScore::getTotalScore, 500).op(GreateThan.class)
.build();
List<CourseScore> list = searcher.searchList(CourseScore.class, params);
履行 SQL:
select course_id, sum(score)
from student_course
where course_id < 101
group by course_id
having sum(score) > 500
4、新增 NotLike 运算实体类的定义符
目前内置的运算符已经有 19 个:
运算符 | 缩写 | SQL 片段 | 是否疏忽空值 | 意义 |
---|---|---|---|---|
Equal |
e实体类图q |
x = ? |
是 | 等于(是缺省github下载默认的运算符) |
NotEqual |
ne |
x != ? |
是 | 不等于 |
GreaterThan |
gt |
x > ? |
是 | 大于 |
GreaterEqual |
ge |
x >= ? |
是 | 大于等于 |
LessThan |
lt |
x < ? |
是 | 小于 |
LessEqual |
lgithub是什么e |
x <= ? |
是 | 小于等于 |
Between |
bt |
x between ?1 and ?2 /x >= ?1 /x <实体类;= ?2
|
是 | 在…之间(规模查询) |
NotBetween |
nb |
x not betw教学设计思想een ?1 and ?2 /x < ?1 /x > ?2
|
是 | 不在…之间(规模查询)(since v3.3) |
Contain |
ct |
x like '%?%' |
是 | 包含(含糊查询)(since v3.2) |
StartWith |
sw |
x like '?%' |
是 | 以…开头(含糊查询) |
End数据库有哪几种With |
ew |
x like '%?' |
是 | 以…结尾(含糊查询) |
OrLike |
ol |
x like ?1 or x like ?2 or ... |
是 | 含糊或匹配(可有多个参数值)(github直播平台永久回家since v3.7) |
NotLike |
nk |
x not like ? |
是 | 反含糊匹配(since v3.8) |
InList |
il /mv
|
x in (?, ?, ...) |
是 | 多值查询(InList /il 自 v3.3 新增,之前是MultiValue数据库设计 /mv ) |
No设计思想tIn |
ni |
x not in (?, ?, ...) |
是 | 多值查询(since v3.3) |
IsNull |
nl |
x is null |
否 | 为空实体类图(since v3.github中文社区3) |
NotNull |
nn |
x is not数据库系统概论 null |
否 | 不为空(since v3.3) |
Empty |
ey |
x is nul教学设计思想l or x = '' |
否 | 为空(仅适用于字符串类型的字段)mysql数据库 |
NotEmpty |
ny |
x i实体类图s nomysql数据库命令大全t null and x != '' |
否 | 不为空(仅适用于字符串类型的字段) |
假如不行,你还能够自定义哦,参看:bs.zhxu.cn/guide/lates…
5、新增根参数安全机制
先回忆一下逻辑分组:/post/709241…
当指定了组表达式后,所有不在表达式指定组内的 字段参数 都会被 检索器 疏忽,例如:
# A 组
A.name = Jack
# 组外字段参数,当 gexpr 非空且合法时将会被疏忽
age = 20
# 组表达式
gexpr = A
但有时候组表达数据库系统概论第五版课后答案式 gexpr
是需求前端指定的,软件设计思想一起后端也需求注入一些参数,并且 不能被疏忽,这时该怎么办呢?此时只需多注入一个根组(用 $
表示)参数即可:
# 组外字段参数,当 gexpr 为空或不合法时有用
age = 20
# 根组参数,当 gexpr 非空且合法时有用
$.age = 20
组 $
是结构内置的一个组,它github永久回家地址与 gexpr
之间永远是 且
的关系。
为了让某个字段参数不能被疏忽设计思想,咱们有必要向检索参数中注入两个参数(如上面的 age
与 $.age
),这略显费事。为此,v3.8.0
一起增强了参数构建器,使其 field(..)
办法在 未显现指定组 之前,都默认会增加对应的根数据库软件组参数。例如:
Map<String, Object> params = MapUtils.builder()
// 未显现指定组 之前调用 field 办法
.field(User::getAge, 20)
// 等效于下面的两行代码:
// .put("age", 20)
// .put("$.age", 20)
.group("A")
// 显现指定组 之后调用 field 办法
.field(User::getName, "Jack")
// 只等效于:
// .put("A.name", "Jack")
.build()
所以当后端需求手动增加检索条件时,咱们推荐您运用参数构建器。
参看:bs.zhxu.cn/guide/lates…
6、优化注解省掉机制
本来若要在实体类字段上省掉数据库软件 @DbFeild数据库管理系统
时,有必要满设计思想是什么意思足以下三条件之一:
- 实数据库设计体类省掉了
@SearchBean
注解 - 实github官网登陆入口体类的
@SearchBean
没有指实体类的作用定tables
特点 - 实体类的
@SearchBean
指定了autoMapgithub是什么Tomysql面试题
特点
在 v3.8.0
之前,tables
与 autoMapgithub永久回家地址To
有必要 一起呈现 或 一起消失 才能够省掉 @DbFeild
注解,例如改github官网成这样即可:
@SearchBean(tables="user", autoMapTo="user")
public class UserVO {
private Long id; // 省掉注解 @DbFeild
private Long name; // 省掉注解 @DbFeild
}
可是总有小伙伴,不想不想省掉 tables
,又不想指向 autoMapTo
,写成这样:
@SearchBean(tables="user")
public class UserVO {
private Long id; // 省掉注解 @DbFeild
private Long name; // 省掉注解 @DbFeild
}
成果让不少人都收到了异常,参考:github.com/ejlchina/be…
为了让咱们少数据库系统概论踩坑,v3.8.0
让这也兼容了这种的写法。现在要省掉 @DbFeild
,只需满足以下四个条件之一即可:
- 实体类省mysql密码忘记了怎么办掉了
@S软件设计思想earchBean
注解 - 实体github汤姆类的
@SearchBean
没有指定tables
特点 - 实体类数据库软件的
@SearchBean.tables
只含一张表(since v3.8.0) - 实体类的
@SearchBemysql安装配置教程an
指定了autoMapTo
特点
参看:bs.zhxu.cn/guide/lates…
7、其它改变
其它改变就不一一列列举了,咱们能够在这里查看:
- github.com/troyzhmysql安装xu/be…
- gitee.com/troyzhxu/be…
- bs.zhxu.cn/guide/lates…
未来特性
- BEP 54: 注解内的 SQL 片段 支撑 条件模板
- BEP 55: SearchBean 支撑 内mysql面试题嵌对象 与 列表
假如觉得不错,点个 Star 吧:
- Github: github.com/troyzhxu/be…
- Gitee: gitee.com/troyzhxu/be…
请咱们继续关注,感谢一路走来支撑 Bean Searcher 的你们,咱们会努力做到更好。
上篇:最近火起的 Bean Searcher 与 MyBatis Plus 倒底有啥差github官网异?