@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&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 案例,用于演示用户信息的增删改查:
- 首先,创建一个实体类(Entity)User.java:
java
public class User {
private Long id;
private String username;
private String password;
private String email;
// 省略 getter 和 setter 方法
}
- 创建一个 Mapper 接口 UserMapper.java:
java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
- 创建一个 Service 接口 UserService.java:
java
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
}
- 创建一个 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 {
}
- 创建一个 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";
}
}
- 配置 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 的开发。