简单点 开发的方法简单点 繁琐的功能请省略 你有不是个 AI
spring data jdbc 扩展 mybatis 动态 sql 能力
- 官方 spring data jdbc 原生直接 扩展 mybatis 动态 sql 能力
使用方式和官方教程一样 引入 spring-boot-starter-data-jdbc 即可 只需要配置扩展的 NamedParameterJdbcTemplate 即可
@Configuration
public class MybatisQuerySupportConfig {
@Bean
public NamedParameterJdbcOperations namedParameterJdbcOperations(DataSource dataSource) {
return new MybatisJdbcTemplate(dataSource) {@Override protected Dialect dialect() {return new MySQLDialect();}};
}
}
@Query 的 ID 是 user.md 里面 ID 为 queryByUserCode 的 mybatis sql 片段
@Query("user.queryByUserCode")
List<UserDTO> queryByUserCode(@Param("userCode") String userCode);
具体使用参考 spring-data-jdbc-demo 模块
但是 @Query spring 6 (jdk17 以上) 以上才支持 SPEL 不支持实体参数 通过改代码可以解决 (支持 mybatis 版本的) 但有代码侵入性
无法直接 根据方法名 自动查找 sql 片段
- 仿 spring 6+ jdbcClient 实现 更推荐 crudClient
- 更推荐自研版本 spring data jdbc 扩展 mybatis 动态 sql 能力
- 底层 jdbcTemplate 复杂 SQL 才需要 mybatis 动态模板能力 无 QueryDSL/queryMapper 提供 crudClient 和 jdbcClient
- 和 spring data jdbc 一样的追求简单,使用 jdbcTemplate, 调用 jdbc。不提供缓存、延迟加载、QueryDSL 等 JPA 或 mybatis 的许多特性。一个简单、有限的 ORM
- 扩展并兼容 mybatis 动态 sql 能力 (不依赖 mybatis! 提取了动态 sql 代码), 可以应对复杂 sql, 如果换其他模板引擎 (后续可以加) 也是可以的,但有学习成本
- 复杂的 SQL 写在 Markdown 的代码片段中,不提供 @Query 和 QueryDSL 写法,但按方法名查找和扩展的 findByExample 可以应付大部分单表查询需求
- 简化 mybatis 动态 sql 写法 easy-dynamic-sql.md
这真是缺点?
- 缺点一:无 QueryDSL/QueryWrapper 我是个懒人 既然 service 层里可以写 QueryWrapper 为啥不可以写在 service 为啥要重用?
要我独立个 dao/Repository 把数据层下放?想啥呢?!
我这个框架就只能在 dao/Repository 层 写确实太麻烦了 复杂的 sql 还得建个 markdown 文件 - 缺点二:没有数据缓存 审计 数据脱敏 IService 接口 就不能替我做了吗 非得在应用层实现
其实我这给了 spring 缓存框架等用武之地 自己实现可以增加代码量和工作量 在还没被 ai 替代之前 薅羊毛