选择主题:MyBatis与MyBatis-Plus实现及区别
目录
选择主题:MyBatis与MyBatis-Plus实现及区别
六、SpringBoot集成MyBatis和MyBatis-Plus
一、引言
MyBatis和MyBatis-Plus是两个流行的Java持久层框架,它们都用于将对象关系映射(ORM)模型映射到数据库。在这篇博客中,我们将介绍MyBatis和MyBatis-Plus的基本实现以及它们之间的区别。同时,我们还将探讨如何将它们与SpringBoot集成。
如果有其他疑问请参考:https://www.bilibili.com/read/cv6218166/
二、MyBatis基本实现
MyBatis是一个开源的持久层框架,它允许你直接使用SQL语句进行数据库操作,而不需要编写大量的JDBC代码。MyBatis通过映射文件将SQL语句与Java对象进行映射,从而实现了对象关系映射。
在MyBatis中,你需要编写SQL映射文件,并在Java代码中调用相应的SQL语句。映射文件中的SQL语句可以根据数据库表的结构进行编写,从而实现数据的增删改查操作。
- SQL映射文件
MyBatis使用XML或注解方式定义SQL映射文件,将SQL语句与Java对象进行映射。开发者需要手动编写SQL语句,并通过MyBatis提供的API执行SQL查询和更新操作。
2.配置文件
MyBatis需要配置数据源、事务管理器等参数,以便与数据库进行交互。这些配置通常在Spring的配置文件中完成。
3.代码实现
使用MyBatis时,开发者需要编写相应的Java代码来调用SQL映射文件中的SQL语句。例如,使用@Select注解在Java代码中指定SQL查询语句,并返回相应的Java对象。
举例说明
-
创建User实体类:
public class User { private int id; private String name; private int age; // 省略getter和setter方法 }
-
创建UserMapper接口:
public interface UserMapper { @Select("SELECT * FROM User WHERE id = #{id}") User getUserById(int id); }
- 在SpringBoot中配置数据源和MyBatis:
在application.properties文件中添加以下配置:
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
mybatis.mapper-locations=classpath:mapper/*.xml
4.创建UserMapper的XML映射文件:
在src/main/resources/mapper目录下创建UserMapper.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="getUserById" resultType="com.example.demo.entity.User">
SELECT * FROM User WHERE id = #{id}
</select>
</mapper>
5.在Java代码中调用UserMapper的方法:
在需要使用UserMapper的地方,注入UserMapper实例,并调用getUserById方法获取用户信息。例如:
@Autowired
private UserMapper userMapper;
public void getUserById(int id) {
User user = userMapper.getUserById(id);
System.out.println(user);
}
三、MyBatis-Plus基本实现
MyBatis-Plus是MyBatis的一个增强工具包,它提供了更多的功能和便利性。MyBatis-Plus在MyBatis的基础上进行了扩展,包括自动生成代码、支持ActiveRecord模式、分页插件等。
在MyBatis-Plus中,你可以通过注解的方式进行SQL语句的编写,而不需要编写映射文件。同时,MyBatis-Plus还提供了多种数据库操作方法,如插入、更新、删除等,以及事务管理功能。
1.注解方式
MyBatis-Plus提供了一系列注解,使得开发者可以更加方便地编写SQL语句。例如,@Select注解可以直接在实体类的方法上使用,用于指定SQL查询语句。
2.自动生成代码
MyBatis-Plus提供了自动生成代码的功能,可以快速生成CRUD操作的方法。开发者只需要在实体类上添加相应的注解,就可以自动生成相应的CRUD方法。
3.分页插件
MyBatis-Plus提供了分页插件,可以方便地进行数据的分页查询。开发者只需要在SQL映射文件中添加相应的分页插件配置,就可以实现数据的分页查询。
简单例子
-
创建User实体类:
public class User { private Long id; private String name; private Integer age; // 省略getter和setter方法 }
-
创建UserMapper接口:
@Mapper public interface UserMapper extends BaseMapper<User> { }
- 在SpringBoot中配置数据源和MyBatis-Plus:在application.properties文件中添加以下配置:
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=root spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=com.zaxxer.hikari.HikariDataSource mybatis-plus.mapper-locations=classpath:mapper/*.xml
-
在需要使用MyBatis-Plus的地方,注入UserMapper实例,并调用相应的CRUD方法。例如:
@Autowired private UserMapper userMapper; public void createUser(User user) { userMapper.insert(user); } public void updateUser(User user) { userMapper.updateById(user); } public void deleteUser(Long id) { userMapper.deleteById(id); }
四、MyBatis与MyBatis-Plus的区别
- 代码量:MyBatis需要编写SQL映射文件和Java代码,而MyBatis-Plus可以通过注解的方式简化代码量。
- 开发效率:MyBatis-Plus提供了自动生成代码的功能,可以快速生成CRUD操作的方法,从而提高开发效率。
- 功能丰富度:MyBatis-Plus在MyBatis的基础上增加了更多的功能,如分页插件、乐观锁等。
- 学习成本:对于熟悉MyBatis的开发者来说,学习MyBatis-Plus需要一定的成本。然而,对于初学者来说,使用MyBatis-Plus可以更快速地上手。
以下是一个简单的例子,说明MyBatis和MyBatis-Plus在实现方式上的区别:假设我们有一个名为"User"的表,其中包含"id"、"name"和"age"三个字段。使用MyBatis进行数据库操作:
-
编写SQL映射文件:创建一个名为"UserMapper.xml"的映射文件,其中包含查询、插入、更新和删除等SQL语句。例如,查询所有用户的SQL语句可以如下:
<select id="selectUsers" resultType="User"> SELECT * FROM User </select>
-
编写Java代码:在Java代码中,你需要编写相应的接口和实现类,通过调用SQL语句实现数据库操作。例如,查询所有用户的Java代码可以如下:
@Mapper public interface UserMapper { List<User> selectUsers(); }
- 配置数据源:在SpringBoot中配置数据源,指定数据库连接信息。
使用MyBatis-Plus进行数据库操作
注解方式编写SQL语句:在Java代码中,你可以使用注解的方式编写SQL语句,而不需要编写映射文件。例如,查询所有用户的Java代码可以如下:
@Select("SELECT * FROM User")
List<User> selectUsers();
-
自动生成代码:MyBatis-Plus提供了自动生成代码的功能,可以快速生成CRUD操作的方法。例如,通过在实体类上添加注解,可以自动生成对应的CRUD方法。
-
分页插件:MyBatis-Plus提供了分页插件,可以实现数据的分页查询。例如,查询前10个用户的Java代码可以如下:
@Select("SELECT * FROM User LIMIT #{pageSize} OFFSET #{offset}") List<User> selectUsers(@Param("pageSize") int pageSize, @Param("offset") int offset);
- 事务管理:MyBatis-Plus提供了事务管理功能,可以方便地进行事务控制。例如,在需要执行多个数据库操作的情况下,可以使用事务管理功能确保操作的原子性。
- 配置数据源:同样需要在SpringBoot中配置数据源,指定数据库连接信息。
通过以上例子可以看出,MyBatis和MyBatis-Plus在实现方式上存在明显的区别。MyBatis需要编写映射文件和Java代码来实现数据库操作,而MyBatis-Plus则通过注解的方式简化了代码量,提供了更多的功能和便利性。
五、MyBatis和MyBatis-Plus的优缺点
MyBatis的优点
- 简单易学:MyBatis的入门门槛相对较低,其SQL映射文件和Java代码的写法都比较直观,易于上手。
- 灵活性强:MyBatis允许开发者直接编写SQL语句,这使得开发者能够更加灵活地处理复杂的查询和操作。
MyBatis的缺点
- 代码量较大:相比MyBatis-Plus,MyBatis需要编写更多的代码,包括SQL映射文件和Java代码。
- 功能相对较少:MyBatis本身的功能相对较少,需要开发者自行编写更多的逻辑。
MyBatis-Plus的优点
- 简化开发:MyBatis-Plus提供了许多便利的功能,如自动生成代码、支持ActiveRecord模式、分页插件等,可以大大简化开发过程。
- 功能丰富:MyBatis-Plus在MyBatis的基础上增加了更多的功能,如乐观锁、分页插件等,可以满足更多的业务需求。
MyBatis-Plus的缺点
- 学习成本较高:对于熟悉MyBatis的开发者来说,学习MyBatis-Plus需要一定的成本。
- 可能不适合大型项目:由于MyBatis-Plus提供了许多自动化的功能,可能在大型项目中存在一定的局限性和潜在的风险。
以上是MyBatis和MyBatis-Plus的主要区别,具体选择哪个框架取决于你的具体需求和项目规模。
六、SpringBoot集成MyBatis和MyBatis-Plus
SpringBoot是一个轻量级的Java框架,它提供了许多便利的功能和插件,可以快速构建Web应用程序。在SpringBoot中集成MyBatis和MyBatis-Plus可以更方便地管理数据库操作。
在SpringBoot中集成MyBatis时,需要使用MyBatis的依赖包和配置文件进行配置。同时,还需要编写SQL映射文件和Java代码来实现数据库操作。
在SpringBoot中集成MyBatis-Plus时,同样需要使用相应的依赖包和配置文件进行配置。与MyBatis不同的是,MyBatis-Plus可以通过注解的方式进行SQL语句的编写,无需编写映射文件。同时,MyBatis-Plus还提供了多种数据库操作方法,可以方便地实现数据的增删改查操作。
以为做过的项目为例:
项目目录:
pom.xml文件里面的MyBatis依赖:
在映射文件.xml里面写mysql语句:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.demo.mapper.BrandMapper">
<select id="getAllBrand" resultType="mybatis.demo.entity.Brand">
select * from brand
</select>
<select id="getBrandById" resultType="mybatis.demo.entity.Brand">
select * from brand where id=#{id}
</select>
<insert id="addBrand">
insert into brand(name) values (#{name})
</insert>
<update id="updateBrand">
update brand set name=#{name} where id=#{id}
</update>
<delete id="deleteBrand">
delete from brand where id=#{id}
</delete>
</mapper>
七、总结
MyBatis和MyBatis-Plus是两个流行的Java持久层框架,它们都用于将对象关系映射模型映射到数据库。在这篇博客中,我们介绍了MyBatis和MyBatis-Plus的基本实现以及它们之间的区别。对于初学者来说,MyBatis可能更适合。MyBatis相对简单易学,入门门槛较低,其SQL映射文件和Java代码的写法都比较直观,易于上手。同时,MyBatis的功能相对较少,需要开发者自行编写更多的逻辑,这也有助于初学者更好地理解数据库操作和对象关系映射的概念。
而MyBatis-Plus虽然提供了更多的功能和便利性,但其学习成本较高,需要理解更多的概念和用法。对于初学者来说,可能会感到有些困难。
当然,最终的选择还是要看个人的兴趣和需求。如果你对数据库操作和对象关系映射有更深入的了解,并且希望使用一个功能丰富、易于使用的框架,那么MyBatis-Plus也是一个不错的选择。