4.3 框架对比
客观对比 DLZ-DB 与主流 ORM 框架
核心特性对比
| 特性 | DLZ-DB | MyBatis-Plus | MyBatis | JPA | JOOQ |
|---|---|---|---|---|---|
| 无需 Mapper 接口 | ✅ | ❌ | ❌ | ✅ | ❌ |
| 无需 XML | ✅ | ⚠️ | ❌ | ✅ | ✅ |
| Lambda 表达式 | ✅ | ✅ | ❌ | ❌ | ✅ |
| 链式操作 | ✅ | ✅ | ❌ | ⚠️ | ✅ |
| 逻辑删除 | ✅ 自动 | ✅ 需配置 | ❌ | ❌ | ❌ |
| SQL 代码定位 | ✅ 独家 | ❌ | ❌ | ❌ | ❌ |
| 结果深度取值 | ✅ 独家 | ❌ | ❌ | ❌ | ❌ |
| 预设 SQL 管理 | ✅ | ❌ | ⚠️ | ❌ | ❌ |
| 自动建表 | ✅ | ❌ | ❌ | ✅ | ❌ |
代码量对比(用户 CRUD + 复杂查询)
| 框架 | 文件数 | 代码行数 |
|---|---|---|
| DLZ-DB | 2 | 130 |
| MyBatis-Plus | 5 | 285 |
| MyBatis | 6 | 420 |
| JPA | 5 | 305 |
| JOOQ | 5 | 280 |
查询 API 对比
// DLZ-DB
User user = DB.Pojo.select(User.class).eq(User::getId, 1L).queryBean();
List<User> users = DB.Pojo.select(User.class)
.eq(User::getStatus, 1)
.like(User::getName, "张")
.queryBeanList();
// MyBatis-Plus
User user = userMapper.selectById(1L);
List<User> users = userMapper.selectList(
new LambdaQueryWrapper<User>()
.eq(User::getStatus, 1)
.like(User::getName, "张")
);
// JPA
User user = userRepository.findById(1L).orElse(null);
List<User> users = userRepository.findByStatusAndNameLike(1, "%张%");
启动速度对比
| 框架 | 启动时间 | 原因 |
|---|---|---|
| DLZ-DB | ~3 秒 | 无需加载 Mapper/XML |
| MyBatis-Plus | ~12 秒 | 需扫描 Mapper |
| MyBatis | ~16 秒 | 需解析 XML |
| JPA | ~18 秒 | 需扫描实体 |
| JOOQ | ~8 秒 | 需生成代码 |