join和子查询效率_Mybatis如何能达到SpringDataJpa的效率?

SpringDataJpa相比Mybatis,开发效率比较高

具体在以下几点

  • 自动生成建表语句
  • 根据方法名来解析生成单表的查询sql 不需要写sql
  • 自动生成join关联语句

Mybaits 相比SpringDataJpa的优势 主要是学习起来简单 没有一堆的概念需要学 好上手 可以直接看到sql

Mybatis有一个代码生成器 mybatis generator http://www.mybatis.org/generator/

可以生成通用的crud方法

另外使用example 也可以生成类似于SpringDataJpa的查询sql

mybatis generator的使用并没有那么方便

  • 需要建表 需要配置一个xml文件 每加一张表需要配置下
  • 数据库添加减少字段 重新生成时 会覆盖mapper接口文件
  • 自动生成的方法不能定制 example用起来很麻烦
  • 不能生成join

如何解决以上问题 提升mybatis的开发效率

写建表语句太麻烦 写java类简单 需要能直接从java类生成建表语句

配置mybatis generator的xml 麻烦 一键从数据库表生成代码

表增加或减少字段后不应该覆盖接口 而是合并 不改变手动加的接口方法

使用example太麻烦 mybatis一键从方法名生成sql

mybatis一键生成join查询 并且在数据库加减字段后保持相应变化

只需要一个IDEA插件 https://github.com/gejun123456/MyBatisCodeHelper-Pro 就解决了上面所有问题

  • 从java类生成建表语句
8f2007b54da4a0bf8938eeccdc336a30.gif

从java类生成建表语句.gif

  • 直接从表生成crud代码 加减字段后 合并接口和sql 可定制生成的方法 生成service等
4eaaa39b4e8c87403dd277a942748417.gif
  • 数据库生成和合并代码.gif
  • 一键从方法名来生成sql 使用了通用mapper和mybatisplus也可以生成 下面是部分生成演示
a14a8c8e090939e87ecc5037c76d2d40.gif
  • 一键从方法名生成sql.gif
  • 2.5版本可一键生成两张表的join查询
8ef19c19ec68ee9f25b622f8a6a3f462.gif
  • 一键生成两张表关联的join.gif

以上只是插件的部分功能

插件还有其他一系列功能

  • 从xml快速测试sql是否有误
  • mybatis标签识别 如 set where include trim等 在这些标签后的sql 也可以智能补全
  • 一键生成testcase 快速测试写好的的sql
  • mybaits xml 自动补全和检测 几乎所有的标签都有自动补全
  • mybatis spring支持 typealias支持
  • 一键从sql语句导出resultMap和java类
  • 一键生成分页查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 结合 MyBatis 进行多表分页联查时,通常会利用 MyBatis 的动态 SQL 功能以及其关联查询插件(如 MyBatis-Plus 或 MyBatis Pagination)来提高性能和灵活性。以下是一个简要步骤: 1. 定义数据模型:首先,在 Spring Boot 中创建对应的实体 (Entity),比如 User 和 Address,它们之间有 One-to-Many 关系。 2. 配置 MyBatis:在 MyBatis 的配置文件中,配置数据库连接池,并启用动态 SQL 支持。 3. 数据映射:为每个实体编写 XML 映射文件或 Java Config,声明关联查询的 SQL 语句。例如,可以创建一个通用的 Mapper 接口,包含分页查询和关联查询的方法。 ```java public interface UserRepository { List<User> findUsersWithAddresses(int pageNum, int pageSize); } ``` 4. 使用分页插件:在 `findUsersWithAddresses` 方法中,引入分页插件处理分页查询,同时通过子查询JOIN 语句获取关联的数据。 ```xml <select id="findUsersWithAddresses" parameterType="map" resultType="User"> SELECT u.*, a.* FROM user u LEFT JOIN address a ON u.id = a.user_id <if test="pageNum != null and pageSize != null"> LIMIT #{pageNum}, #{pageSize} </if> </select> ``` 5. 利用 Spring Data JPA 或者手动注入 Repository 接口到 Service 层,进行业务处理并传递分页参数给Mapper方法。 6. 在 Controller 中接收前端请求,将参数封装成 map 或者 Pageable 对象,然后调用服务层方法并返回结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值