上篇:最近火起的 Bean Searcher 与 MyBatis Plus 倒底有啥差异?

介绍

Bean Searcher 是一款专心高档查询的只读 ORMmysql数据库命令大全,天生支撑联表,免 DTO/VO 转换,使一行代码完成复杂列表检索成为可能!

它能够像 基础组件 ORM 那样运用,一起也拥有 挨近低代码 的开发功率。

运用场景

Bean Searcher 专治复mysql密码忘记了怎么办杂的检索需求,例如:

  • 一般后端查询

Bean Searcher v3.8.0 一大波新特性来袭

  • 动态检索办法

Bean Searcher v3.8.0 一大波新特性来袭

  • 动态数据库系统概论第五版课后答案分组查询github中文官网网页

Bean Searcher v3.8.0 一大波新特性来袭

数据库系统概论第五版课后答案上场景 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 之前,tablesautoMapgithub永久回家地址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官网异?