实战系列(三)_ Mybatis和MybatisPlus区别,包含详细代码

@TOC

MyBatis 和 MyBatisPlus 都是基于 MyBatis 的扩展库,用于简化 MyBatis 的开发。MyBatisPlus 是在 MyBatis 的基础上进行封装,提供了一套通用的 CRUD 操作接口,而 MyBatis 是一个底层的持久层框架。

1. 底层框架:

MyBatis 是一个持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原生映射。 MyBatisPlus 是一个基于 MyBatis 的扩展库,它提供了一套通用的 CRUD 操作接口,自动生成 SQL 语句,并提供了丰富的查询条件构造器等功能。MyBatisPlus 主要使用了注解进行配置和映射。

2. 代码差异:

MyBatis 的代码主要涉及到以下几个部分:

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

3. 使用差异:

MyBatis 需要手动编写 SQL 语句和结果映射,但提供了高度的定制化能力。MyBatis 的优点是可以根据实际需求灵活编写 SQL 语句,但缺点是编写映射文件和手动设置参数比较繁琐。 MyBatisPlus 提供了一套通用的 CRUD 操作接口,自动生成 SQL 语句。MyBatisPlus 的优点是简化了 MyBatis 的开发,提高了开发效率,但缺点是定制化能力较差,对于复杂的 SQL 语句可能无法满足需求。

4. 案例代码分析:

4.1 MyBatis

以下是一个简单的 MyBatis 案例,用于演示用户信息的增删改查:

xml 复制代码
<!-- 配置文件 -->  
<configuration>  
   <environments default="development">  
       <environment id="development">  
           <transactionManager type="JDBC"/>  
           <dataSource type="POOLED">  
               <property name="driver" value="com.mysql.jdbc.Driver"/>  
               <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&amp;serverTimezone=UTC"/>  
               <property name="username" value="root"/>  
               <property name="password" value="password"/>  
           </dataSource>  
       </environment>  
   </environments>  
   <mappers>  
       <mapper resource="com/example/mapper/UserMapper.xml"/>  
   </mappers>  
</configuration>  
xml 复制代码
<!-- 映射文件 -->  
<mapper namespace="com.example.mapper.UserMapper">  
   <insert id="insertUser" parameterType="com.example.entity.User">  
       INSERT INTO user (username, password, email) VALUES (#{username}, #{password}, #{email})  
   </insert>  
   <!-- 其他 SQL 语句 -->  
</mapper>  
java 复制代码
// Mapper 接口  
public interface UserMapper {  
   int insertUser(User user);  
   // 其他方法  
}
java 复制代码
// DAO 接口  
public interface UserDao {  
   int insertUser(User user);  
   // 其他方法  
}
java 复制代码
// 业务逻辑层  
@Service  
public class UserService {  
   @Autowired  
   private UserDao userDao;  
   public int insertUser(User user) {  
       return userDao.insertUser(user);  
   }  
   // 其他方法  
}

4.2 MyBatisPlus

以下是一个简单的 MyBatisPlus 案例,用于演示用户信息的增删改查:

  1. 首先,创建一个实体类(Entity)User.java:
java 复制代码
public class User {  
   private Long id;  
   private String username;  
   private String password;  
   private String email;
   // 省略 getter 和 setter 方法  
}
  1. 创建一个 Mapper 接口 UserMapper.java:
java 复制代码
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {  
}
  1. 创建一个 Service 接口 UserService.java:
java 复制代码
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {  
}
  1. 创建一个 ServiceImpl 类 UserServiceImpl.java,实现 Service 接口:
java 复制代码
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;  
import org.springframework.stereotype.Service;
@Service  
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {  
}
  1. 创建一个 Controller 类 UserController.java,处理 HTTP 请求:
java 复制代码
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController  
@RequestMapping("/user")  
public class UserController {
   @Autowired  
   private UserService userService;
   @PostMapping  
   public String createUser(@RequestBody User user) {  
       userService.save(user);  
       return "User created";  
   }
   @GetMapping("/{id}")  
   public User getUser(@PathVariable Long id) {  
       return userService.getById(id);  
   }
   @GetMapping  
   public List<User> getUsers() {  
       return userService.list();  
   }
   @PutMapping("/{id}")  
   public String updateUser(@PathVariable Long id, @RequestBody User user) {  
       user.setId(id);  
       userService.updateById(user);  
       return "User updated";  
   }
   @DeleteMapping("/{id}")  
   public String deleteUser(@PathVariable Long id) {  
       userService.removeById(id);  
       return "User deleted";  
   }  
}
  1. 配置 MyBatisPlus 在 Spring Boot 项目中:
xml 复制代码
<!-- 配置文件 -->  
<configuration>  
   <extensions>  
       <extension plugin-id="mybatis-plus" interceptor="com.baomidou.mybatisplus.extension.MybatisPlusInterceptor"/>  
   </extensions>  
</configuration>  
xml 复制代码
<!-- 配置文件 -->  
<mybatis-plus-config>  
   <mapper-locations>  
       <mapper-location resource="classpath:mapper/*Mapper.xml"/>  
   </mapper-locations>  
   <type-aliases>  
       <package name="com.example.entity"/>  
   </type-aliases>  
   <global-config>  
       <db-config>  
           <logic delete-flag="true"/>  
           <logic not-delete-flag="false"/>  
       </db-config>  
       <date-format>yyyy-MM-dd HH:mm:ss</date-format>  
       <null-type-handler>com.baomidou.mybatisplus.core.handlers.空字符串类型处理器</null-type-handler>  
   </global-config>  
</mybatis-plus-config>  

以上代码演示了如何使用 MyBatisPlus 实现用户信息的增删改查。在这个案例中,我们使用了 MyBatisPlus 提供的注解和插件,简化了 MyBatis 的开发。

相关推荐
沐雪架构师1 小时前
mybatis连接PGSQL中对于json和jsonb的处理
json·mybatis
鹿屿二向箔3 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的咖啡馆管理系统
spring·mvc·mybatis
aloha_78912 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
毕业设计制作和分享13 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
paopaokaka_luck16 小时前
基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)
java·spring boot·小程序·毕业设计·mybatis·1024程序员节
cooldream200917 小时前
Spring Boot中集成MyBatis操作数据库详细教程
java·数据库·spring boot·mybatis
不像程序员的程序媛18 小时前
mybatisgenerator生成mapper时报错
maven·mybatis
小布布的不21 小时前
MyBatis 返回 Map 或 List<Map>时,时间类型数据,默认为LocalDateTime,响应给前端默认含有‘T‘字符
前端·mybatis·springboot
背水1 天前
Mybatis基于注解的关系查询
mybatis
free_girl_fang1 天前
高效作业之Mybatis缓存
java·ide·缓存·mybatis