文章目录
前言
简单来说,MyBatis Plus就是MyBatis的加强版,MyBatis Plus是在MyBatis基础上进行了功能扩展和增强,如果你会用Mybatis,那么对于MyBatis Plus的使用也是一看就会的。
共同点
MyBatis和MyBatis Plus都是基于Java的持久层框架,用于简化数据库操作。
各自的优势
MyBatis
-
XML配置驱动:MyBatis以XML文件配置SQL语句和数据库映射,开发者需要手动编写SQL映射文件。
-
基本功能:提供SQL执行、结果映射和参数处理等功能,通过XML文件或注解配置SQL语句与Java方法的映射。
-
灵活性:开发者对SQL语句有更高的控制权,可以优化和定制SQL语句,适应各种复杂的查询需求。
MyBatis Plus
-
代码生成器:MyBatis Plus提供了代码生成器功能,可以根据数据库表自动生成Entity、Mapper、Service、Controller等代码,加速开发过程。
-
简化操作:内置了通用的CRUD方法,例如insert、update、delete等操作,简化了数据操作。
-
增强功能:提供了更多方便的方法和功能,如分页、条件构造器、Lambda表达式查询等,减少了一些重复的代码编写,提高了开发效率。
-
集成Spring Boot:天然地集成了Spring Boot,使得在Spring Boot项目中更加便捷地使用。
-
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
,可以方便地构建动态查询条件。
区别总结
-
开发效率: MyBatis Plus相对于MyBatis提供了更多的内置功能和方法,能够提高开发效率,尤其是对于通用的数据库操作。
-
配置和操作: MyBatis Plus减少了手动编写SQL和Mapper文件的需求,提供了更多便捷的方法来执行数据库操作,而MyBatis更加灵活,需要开发者手动处理更多的SQL和映射配置。
-
功能扩展: MyBatis Plus在MyBatis的基础上提供了更多的功能扩展,使得开发者能够更快速地完成开发任务。
如何选择
这个没有一个固定的答案。并不是说MyBatis Plus一定比MyBatis要好。选择使用哪个取决于项目需求和团队偏好,对于需要更多内置功能、简化操作和提高开发效率的项目,MyBatis Plus可能更适合。而对于需要更高度定制和对SQL控制要求较高的项目,则MyBatis可能更合适。
扩展:MyBatis Plus的常用注解
MyBatis Plus提供了多种注解,用于简化数据库操作和增加灵活性。以下是一些常用的注解:
实体类注解:
-
@TableName
:标识实体类对应的数据库表名,用于指定实体类与数据库表的映射关系。@TableName("user") public class User { //... }
-
@TableField
:指定实体类字段和数据库表字段的映射关系,用于非主键字段。public class User { @TableField("username") private String name; //... }
主键注解:
-
@TableId
:标识主键字段,并指定主键生成策略和数据库表主键字段名称。public class User { @TableId(value = "id", type = IdType.AUTO) private Long userId; //... }
Mapper接口方法注解:
-
@Mapper
:在Mapper接口上使用,标识该接口是MyBatis Plus的Mapper接口。@Mapper public interface UserMapper extends BaseMapper<User> { //... }
-
@Select
、@Insert
、@Update
、@Delete
:在自定义SQL方法上使用,用于映射SQL操作。@Select("SELECT * FROM user WHERE username = #{username}") User findByUsername(String username);
其他注解:
-
@Version
:用于乐观锁的字段标识,在更新操作时用于控制并发。public class User { @Version private Integer version; //... }
这些注解能够简化MyBatis Plus的使用,并且提供了更多的灵活性,减少了开发者编写重复代码的工作。根据实际情况,使用这些注解可以更方便地进行数据库操作。