MyBatis和MyBatis Plus的区别

文章目录

  • 前言
  • 共同点
  • 各自的优势
    • MyBatis
    • MyBatis Plus
    • 各自的代码示例
      • MyBatis 示例:
        • 实体类 User.java:
        • MyBatis Mapper XML 配置文件 UserMapper.xml:
        • MyBatis Mapper 接口 UserMapper.java:
        • MyBatis 使用:
      • MyBatis Plus 示例:
        • 实体类 User.java:
        • MyBatis Plus Mapper 接口 UserMapper.java:
        • MyBatis Plus 使用:
  • 区别总结
  • 如何选择
  • 扩展:MyBatis Plus的常用注解
      • 实体类注解:
      • 主键注解:
      • Mapper接口方法注解:
      • 其他注解:

前言

简单来说,MyBatis Plus就是MyBatis的加强版,MyBatis Plus是在MyBatis基础上进行了功能扩展和增强,如果你会用Mybatis,那么对于MyBatis Plus的使用也是一看就会的。

共同点

MyBatis和MyBatis Plus都是基于Java的持久层框架,用于简化数据库操作。

各自的优势

MyBatis

  1. XML配置驱动:MyBatis以XML文件配置SQL语句和数据库映射,开发者需要手动编写SQL映射文件。

  2. 基本功能:提供SQL执行、结果映射和参数处理等功能,通过XML文件或注解配置SQL语句与Java方法的映射。

  3. 灵活性:开发者对SQL语句有更高的控制权,可以优化和定制SQL语句,适应各种复杂的查询需求。

MyBatis Plus

  1. 代码生成器:MyBatis Plus提供了代码生成器功能,可以根据数据库表自动生成Entity、Mapper、Service、Controller等代码,加速开发过程。

  2. 简化操作:内置了通用的CRUD方法,例如insert、update、delete等操作,简化了数据操作。

  3. 增强功能:提供了更多方便的方法和功能,如分页、条件构造器、Lambda表达式查询等,减少了一些重复的代码编写,提高了开发效率。

  4. 集成Spring Boot:天然地集成了Spring Boot,使得在Spring Boot项目中更加便捷地使用。

  5. Wrapper查询:支持Wrapper的查询方式,允许使用条件构造器进行动态SQL查询,简化了复杂查询条件的拼接。

各自的代码示例

好的,下面是一个简单的示例,展示了使用MyBatis和MyBatis Plus进行数据库操作的区别。

MyBatis 示例:

实体类 User.java:
@Data
public class User {
    private Long id;
    private String username;
    private String password;
    
}
MyBatis Mapper XML 配置文件 UserMapper.xml:

<select id="getUserById" parameterType="long" resultType="User">
    SELECT id, username, password FROM user WHERE id = #{id}
select>
MyBatis Mapper 接口 UserMapper.java:
public interface UserMapper {
    User getUserById(Long id);
}
MyBatis 使用:
public class MyBatisExample {
    public static void main(String[] args) {
        SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User user = userMapper.getUserById(1L);
            System.out.println(user.getUsername());
        }
    }
}

MyBatis Plus 示例:

实体类 User.java:
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
@Data
public class User {
    private Long id;
    private String username;
    private String password;

}
MyBatis Plus Mapper 接口 UserMapper.java:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
}
MyBatis Plus 使用:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

public class MyBatisPlusExample {
    public static void main(String[] args) {
        try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            
            // 查询用户
            User user = userMapper.selectById(1L);
            System.out.println(user.getUsername());
            
            // 使用Wrapper进行查询
            QueryWrapper<User> wrapper = new QueryWrapper<>();
            wrapper.eq("username", "十七号程序猿");
            List<User> userList = userMapper.selectList(wrapper);
            // 输出用户列表
            userList.forEach(u -> System.out.println(u.getUsername()));
        }
    }
}

这个示例展示了MyBatis和MyBatis Plus的基本用法:
在MyBatis中,需要编写XML配置文件来定义SQL语句和Mapper接口,而MyBatis Plus则更为简洁,只需定义实体类和继承自BaseMapper的Mapper接口即可使用内置的CRUD方法。此外,MyBatis Plus提供了条件构造器QueryWrapper,可以方便地构建动态查询条件。

区别总结

  1. 开发效率: MyBatis Plus相对于MyBatis提供了更多的内置功能和方法,能够提高开发效率,尤其是对于通用的数据库操作。

  2. 配置和操作: MyBatis Plus减少了手动编写SQL和Mapper文件的需求,提供了更多便捷的方法来执行数据库操作,而MyBatis更加灵活,需要开发者手动处理更多的SQL和映射配置。

  3. 功能扩展: MyBatis Plus在MyBatis的基础上提供了更多的功能扩展,使得开发者能够更快速地完成开发任务。

如何选择

这个没有一个固定的答案。并不是说MyBatis Plus一定比MyBatis要好。选择使用哪个取决于项目需求和团队偏好,对于需要更多内置功能、简化操作和提高开发效率的项目,MyBatis Plus可能更适合。而对于需要更高度定制和对SQL控制要求较高的项目,则MyBatis可能更合适。

扩展:MyBatis Plus的常用注解

MyBatis Plus提供了多种注解,用于简化数据库操作和增加灵活性。以下是一些常用的注解:

实体类注解:

  1. @TableName:标识实体类对应的数据库表名,用于指定实体类与数据库表的映射关系。

    @TableName("user")
    public class User {
        //...
    }
    
  2. @TableField:指定实体类字段和数据库表字段的映射关系,用于非主键字段。

    public class User {
        @TableField("username")
        private String name;
        //...
    }
    

主键注解:

  1. @TableId:标识主键字段,并指定主键生成策略和数据库表主键字段名称。

    public class User {
        @TableId(value = "id", type = IdType.AUTO)
        private Long userId;
        //...
    }
    

Mapper接口方法注解:

  1. @Mapper:在Mapper接口上使用,标识该接口是MyBatis Plus的Mapper接口。

    @Mapper
    public interface UserMapper extends BaseMapper<User> {
        //...
    }
    
  2. @Select@Insert@Update@Delete:在自定义SQL方法上使用,用于映射SQL操作。

    @Select("SELECT * FROM user WHERE username = #{username}")
    User findByUsername(String username);
    

其他注解:

  1. @Version:用于乐观锁的字段标识,在更新操作时用于控制并发。

    public class User {
        @Version
        private Integer version;
        //...
    }
    

这些注解能够简化MyBatis Plus的使用,并且提供了更多的灵活性,减少了开发者编写重复代码的工作。根据实际情况,使用这些注解可以更方便地进行数据库操作。

你可能感兴趣的:(Java面试题汇总,技术分享,Java,mybatis,plus,mybatis,java)