在Springboot中Mybatis与Mybatis-plus的区别详解

 更新时间:2023年12月22日 10:24:36   作者:L20523  
MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,MyBatisPlus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生,本文将给大家介绍了在Springboot中Mybatis与Mybatis-plus的区别

引言

MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装。MyBatisPlus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

MyBatisPlus 官网是这么说的我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

1.特性

 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架

 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录

MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架

MyBatisPlus 是一个基于 MyBatis 的扩展库,它提供了一套通用的 CRUD 操作接口,自动生成 sql语句,提供了丰富的查询条件构造器等功能。MyBatisPlus 主要使用了注解进行配置和映射。

2.代码的区别

MyBatis 的代码主要分为以下几个部分:

MyBatis 的配置文件(mybatis-config.xml),用于配置数据源、映射文件等。
映射文件(Mapper.xml),用于定义 SQL 语句和结果映射。
Mapper 接口,用于定义与映射文件对应的方法。
Service 接口,用于封装 Mapper 接口,提供统一的 CRUD 方法。
ServiceImpl 类,实现 Service 接口,调用 Mapper 接口进行数据库操作。

MyBatisPlus 的代码主要涉及到以下几个部分:
MyBatisPlus 的配置文件(mybatis-plus-config.xml),用于配置数据源、分页插件等。
实体类(Entity),用于定义数据库表对应的实体类。
Mapper 接口,用于定义与数据库表对应的方法。
Service 接口,用于封装 Mapper 接口,提供统一的 CRUD 方法。
ServiceImpl 类,实现 Service 接口,调用 Mapper 接口进行数据库操作。

3.两者之间的差异

MyBatis 需要手动编写 SQL 语句和结果映射,可以根据实际需求编写 SQL 语句,但缺点是编写映射文件和手动设置参数比较繁琐。

MyBatisPlus 提供了一套通用的 CRUD 操作接口,自动生成 SQL 语句,简化了 MyBatis 的开发,提高了开发效率,但缺点是定制化能力较差,对于复杂的 SQL 语句无法满足需求。

4.代码解析

关于MyBatis 和MyBatisPlus的代码分析用经典的增删查改来演示

 MyBatis实现增删查改

1.配置文件

 <insert id="addErrLevel" parameterType="ErrLevel">
        insert into err_level values (#{errKey},#{errValue},#{errDec})
    </insert>
 
    <update id="updateErrLevel" parameterType="ErrLevel">
        update err_level set errKey = #{errKey},errDec=#{errDec}  where errValue = #{errValue}
    </update>
 
 
    <select id="selectByErrLevel" resultType="ErrLevel">
        select * from err_level
    </select>
 
    <delete id="deleteErrLevel">
        delete from err_level WHERE errValue = #{errValue}
    </delete>

2.Mapper接口

 
    int addErrLevel(ErrLevel errLevel);
     void updateErrLevel(ErrLevel errLevel);
 
    List<ErrLevel> selectByErrLevel();
    void deleteErrLevel(ErrLevel errLevel);

3.Service 接口

    
int myAddErrLevel(ErrLevel errLevel);
void updateErrLevel(ErrLevel errLevel);
 
List<ErrLevel> selectByErrLevel();
 
void deleteErrLevel(ErrLevel errLevel);

4.ServiceImpl 类

  @Resource
    ErrLevelMapper errLevelMapper ;
    @Override
    public int myAddErrLevel(ErrLevel errLevel) {
        return errLevelMapper.addErrLevel(errLevel);
    }
 
    public void updateErrLevel(ErrLevel errLevel){
        errLevelMapper.updateErrLevel(errLevel);
    }
 
    @Override
    public List<ErrLevel> selectByErrLevel() {
        return errLevelMapper.selectByErrLevel();
    }
 
    @Override
    public void deleteErrLevel(ErrLevel errLevel) {
         errLevelMapper.deleteErrLevel(errLevel);
    }

5.Controller实现类

 @Resource
    IErrLevelService errLevelService ;
    @PostMapping("/add")
    public Result<Integer> addErrlvl(@RequestBody ErrLevel errLevel){
        int num = errLevelService.myAddErrLevel(errLevel);
        return Result.success(num,"新增成功");
    }
 
    @PutMapping("/update")
    public Result<?> updateUser(@RequestBody ErrLevel errLevel){
        errLevelService.updateErrLevel(errLevel);
        return Result.success("更新成功");
 
    }
 
    @GetMapping("/getByMainPage")
    public Result<List<ErrLevel>>selectByMainPage(){
        List<ErrLevel> list =  errLevelService.selectByErrLevel();
        return Result.success(list,"查询成功!");
    }
    @DeleteMapping("/delete")
    public Result<?> deleteErr(@RequestBody ErrLevel errLevel){
        errLevelService.deleteErrLevel(errLevel);
        return Result.success("删除成功");
    }

MyBatisPlus实现增删查改

1.引入依赖

//引入依赖
<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.5.3</version>
		</dependency>

2.创建用户实体 

//实体
@Data
public class User {  
   private Long id;  
   private String username;  
   private String password;   
}

3.创建Mapper接口 

//Mapper接口
@Mapper
public interface UserMapper extends BaseMapper<User> {  
}

4.创建service接口

//Service接口 
 
public interface UserService extends IService<User> {  
}

5.创建一个 ServiceImpl 类,实现service接口 

@Service  
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {  
}

6.创建一个 Controller 类处理对应请求 

@RestController  
@RequestMapping("/user")  
public class UserController {
   @Autowired  
   private UserService userService;
   @PostMapping("/insert")  
   public String createUser(@RequestBody User user) {  
       userService.save(user);  
       return "User created";  
   }
   @GetMapping("/get{id}")  
   public User getUser(@PathVariable Long id) {  
       return userService.getById(id);  
   }
   @GetMapping("/list")
   public List<User> getUsers() {  
       return userService.list();  
   }
   @PutMapping("/update{id}")  
   public String updateUser(@PathVariable Long id, @RequestBody User user) {  
       user.setId(id);  
       userService.updateById(user);  
       return "User updated";  
   }
   @DeleteMapping("/delete{id}")  
   public String deleteUser(@PathVariable Long id) {  
       userService.removeById(id);  
       return "User deleted";  
   }  
}

以上就是MyBatis和MyBatis-Plus的代码演示,虽然MyBatis-Plus没有对复杂SQL查询操作进行封装,但是它提供了一些辅助功能,可以帮助开发者更加方便地进行复杂SQL查询操作。

到此这篇关于在Springboot中Mybatis与Mybatis-plus的区别详解的文章就介绍到这了,更多相关Springboot Mybatis与Mybatis-plus区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot项目如何使用外部application.yml配置文件启动JAR包

    Spring Boot项目如何使用外部application.yml配置文件启动JAR包

    文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括设置spring.config.location参数、打包注意事项及路径格式要求,强调外部配置优先级和覆盖机制,提供Linux/Windows启动示例,需要的朋友跟随小编一起学习吧
    2025-08-08
  • java生成随机图片验证码

    java生成随机图片验证码

    这篇文章主要为大家详细介绍了java生成随机图片验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Java编程实现比对两个文本文件并标记相同与不同之处的方法

    Java编程实现比对两个文本文件并标记相同与不同之处的方法

    这篇文章主要介绍了Java编程实现比对两个文本文件并标记相同与不同之处的方法,涉及java针对文本文件的读取、遍历、判断等相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Java实现单链表基础操作

    Java实现单链表基础操作

    大家好,本篇文章主要讲的是Java实现单链表基础操作,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Spring Boot 3.x 开发中分布式 Session 共享的序列化问题小结

    Spring Boot 3.x 开发中分布式 Session 共享的序

    分布式 Session 共享是构建高可用应用的关键技术,而序列化则是其中的核心环节,本文提供的方案和示例,希望能帮助开发者在Spring Boot 3.x 中从容应对分布式Session 序列化的挑战,构建稳健的微服务架构,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • Applet小应用程序开发简介

    Applet小应用程序开发简介

    Applet小应用程序开发简介 ,用java开发的小程序,需要的朋友可以参考下
    2012-09-09
  • 从java源码分析线程池(池化技术)的实现原理

    从java源码分析线程池(池化技术)的实现原理

    这篇文章主要介绍了从java源码分析线程池(池化技术)的实现原理,池化技术是一种编程技巧,当程序出现高并发时,能够明显的优化程序,降低系统频繁创建销毁连接等额外开销,下文更多的相关介绍需要的小伙伴可以参考一下
    2022-04-04
  • IDEA2020.2创建springboot项目卡死在reading maven project的问题

    IDEA2020.2创建springboot项目卡死在reading maven project的问题

    这篇文章主要介绍了关于2020.2IDEA用spring Initializr创建maven的springboot项目卡死在reading maven project的问题描述及解决方法,感兴趣的朋友跟随小编一起看看吧
    2020-09-09
  • Java中VM options与Program arguments的区别及说明

    Java中VM options与Program arguments的区别及说明

    本文介绍了VMoptions和Programarguments的区别及用法,说明它们分别用于设置运行环境变量和main方法参数,且同名参数时Programarguments优先,并展示了配置方法和结果
    2025-10-10
  • Mybatis中typeAliases的使用

    Mybatis中typeAliases的使用

    这篇文章主要介绍了Mybatis中typeAliases的使用,需要的朋友可以参考下
    2017-08-08

最新评论