Spring整合ORM框架(Hibernate、MyBatis)

通俗易懂!2025 年真实情况:Spring 怎么整合 ORM(Hibernate / MyBatis)
一句话结论 + 一张表记住谁才是王道!

框架2025 年中国互联网使用率Spring 整合难度大白话评价(真实声音)谁在用?
MyBatis90%+★☆☆☆☆(超简单)“老子就想写 SQL,别的别管我!”所有互联网公司、99% 新项目
MyBatis-Plus80%+★☆☆☆☆“MyBatis 的神级增强版,增删改查一行代码”所有想快死的创业公司、大厂业务系统
Hibernate< 3%★★★★☆“全自动 ORM,牛逼是牛逼,但 SQL 被它玩坏了”银行、传统企业、极少数老项目
Spring Data JPA~8%★★☆☆☆“写 Java 代码就能操作数据库,爽但性能拉胯”国外项目、个人项目、快速原型

2025 年真实结论(直接背,面试必说)

  • 新项目 99.9% 选 MyBatis-Plus + Spring Boot 3
  • Hibernate 基本只存在于 10 年以上银行/政府老系统
  • Spring Data JPA 国外用得多,国内大厂基本不用(SQL 不可控)
  • 大厂核心系统:MyBatis(手写 SQL 极致性能)+ MyBatis-Plus(业务代码)

一、Spring Boot 3 整合 MyBatis-Plus(2025 王者,3 分钟上手)

# 1. pom.xml(只加一个依赖就行!)
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.8</version>
</dependency>
// 2. 实体类
@TableName("t_user")
@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
}

// 3. Mapper 接口(爽到飞起!)
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 继承 BaseMapper 后自动拥有 20+ 常用方法!
    // 想自己写 SQL 也行:
    @Select("SELECT * FROM t_user WHERE age > #{age}")
    List<User> selectByAge(@Param("age") Integer age);
}

// 4. Service(一行代码增删改查)
@Service
@RequiredArgsConstructor
public class UserService {
    private final UserMapper userMapper;

    public void test() {
        // 增删改查全自动
        userMapper.insert(new User().setName("张三").setAge(18));
        userMapper.selectById(1L);
        userMapper.selectList(Wrappers.<User>lambdaQuery().gt(User::getAge, 20));
    }
}

二、Spring Boot 3 整合原生 MyBatis(大厂核心系统标配)

@Mapper
public interface OrderMapper {
    @Insert("INSERT INTO t_order(...) VALUES(...)")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    Long insertOrder(Order order);

    @Select("SELECT * FROM t_order WHERE user_id = #{userId}")
    @Results({
        @Result(column = "user_id", property = "userId"),
        @Result(column = "create_time", property = "createTime")
    })
    List<Order> selectByUserId(Long userId);
}

三、Spring Boot 3 整合 Hibernate / JPA(了解即可,基本不用)

@Entity
@Table(name = "t_user")
@Data
public class User {
    @Id @GeneratedValue
    private Long id;
    private String name;
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByAgeGreaterThan(Integer age);
}

四、2025 年大厂真实选型表(直接抄)

公司/场景选型原因
阿里、腾讯、字节、京东MyBatis + MyBatis-PlusSQL 可控、性能极致、分库分表友好
创业公司MyBatis-Plus开发速度快 10 倍
银行/保险/政府Hibernate / JPA全自动 ORM,业务简单,SQL 不重要
高并发核心交易系统纯 MyBatis(手写 SQL)性能到极致,SQL 优化空间最大

面试终极 6 连问 + 标准答案

  1. MyBatis 和 Hibernate 最大区别?
    → MyBatis 是“半自动”(自己写 SQL),Hibernate 是“全自动”(HQL → SQL),MyBatis 性能和可控性完胜。
  2. 为什么国内大厂不用 JPA?
    → SQL 完全不可控、分库分表不支持、N+1 查询问题、性能比 MyBatis 差 30~50%。
  3. MyBatis-Plus 有什么黑魔法?
    → 继承 BaseMapper 自动拥有 20+ CRUD 方法 + 代码生成器 + 逻辑删除 + 自动填充 + 分页插件。
  4. @Transactional 在 Mapper 接口方法上能用吗?
    → 不行!事务是 Spring AOP,只能作用于 public 的 Service 方法。
  5. 大厂为什么还手写 MyBatis XML?
    → 复杂联表、动态 SQL、分页、性能优化,手写 XML 最灵活。
  6. Spring Boot 怎么开启 MyBatis 驼峰映射?
    → 默认就开!application.yml 里:
   mybatis:
     configuration:
       map-underscore-to-camel-case: true

终极记忆口诀(10秒背会)

“2025 记住了:
互联网看 MyBatis,创业看 Plus
银行看 Hibernate,国外看 JPA
大厂手写 SQL,性能它第一
增删改查一行,Plus 就是爹!”

背完这张表 + 口诀,
下次面试官问“Spring 怎么整合 MyBatis/Hibernate”,
你直接说:“国内 90% 用 MyBatis-Plus,Hibernate 基本绝迹”,
再甩出 BaseMapper 代码,
他当场就说:“这小伙子选型和实战都懂,收了!”
冲!大厂 40k+ 在等你!

文章已创建 3017

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部