前言
在编写Java开发过程中,尤其是CRUD开发,我们会发现大部分事件都在编写Java持久层的增删改查上了,并且配置mybatis的mapper文件也是一件麻烦的事。如果你也有这样的烦劳,看来就可以认识一下我们的新朋友mybatis-plus了。
MyBatis-Plus 是一个 Mybatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。特点:无侵入,只增强mybatis,不会破坏原来的已经由mybatis构建的项目;CRUD,内置CRUD方法,不再需要自己编写单表CRUD功能;Lambda表达式以及各种插件。
快速入门
实验环境需要在JetBrins Idea上完成,请事先下载好这款编辑器
1.构建一个spring Boot项目
打开idea,新建项目为SpringBoot
JDK最好使用17以上,默认打jar包就好,然后第二个勾选依赖,先只勾选一个spring Web就好,后面慢慢的导入也是一样的,由于springboot的自动装配,自己手写导入依赖很少
2.引入相关的依赖
由于测试的是数据库方面,那么映入的依赖肯定要包括数据库连接器,我使用的是mysql,故而需要导入mysql-connector-java
接着导入mybatis-plus,导入mybatis-plus需要注意不要同时导入mybatis的依赖,这会导致依赖冲突,一个mybatis-plus就可以解决了:mybatis-plus-spring-boot3-starter
然后导入一个方便写实体类的插件Lombok,也是老朋友了
全部的准备依赖如下:
<!-- mysql驱动器--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency> <!-- lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> <!-- mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.10.1</version></dependency>
3.写application.properties文件:连接配置
一般MySQL的使用版本一共有两个,一个是5版本开头的用户,这类用户配置需要配置登录用户名,密码,连接地址以及连接驱动,而8版本开头的用户则是需要多配置一个时区
5版本的连接驱动:com.mysql.jdbc.Driver ;8版本的驱动:com.mysql.cj.jdbc.Driver;由于8版本向下兼容,故而5版本的mysql也可以使用8版本的连接驱动
5版本的配置如下:
spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://localhost:3306/mybatis-plus?useUnicode=true&characterEncoding=utf-8 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
8版本的配置多了一个时区配置:
spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://localhost:3306/mybatis-plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
4.初始化数据库和一张数据库表用于测试mybatis-plus
创建数据库命令:
create database mybatis_plus;
使用此数据库,并且创建一张数据库表:
use mybatis_plus;
DROP TABLE IF EXISTS `user`;CREATE TABLE `user`
(id BIGINT NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
);
并且插入一些初始化的数据:
DELETE FROM `user`;INSERT INTO `user` (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
查看数据库表中的内容,是否完成插入:
select * from user;
5.编写实体类,用于映射数据库表的字段
User实体类:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain=true)
public class User {private Integer id;private String name;private int age;private String email;
}
6.编写Dao接口,或者持久层接口
由于是操作User的接口,故而推荐定义为UserDao,并且需要在此接口之下积乘BaseMapper父类,这个父类就是mybatis-plus写的,实现此父类后会有很多CRUD方法,直接调用就可以操作数据库了
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.cqust.testmybatisplus.pojo.User;public interface UserDao extends BaseMapper<User> { }
注意:当我们继承BaseMapper之后,并且传入一个操作的泛型,也就是要操作的实体类给它,我们就已经将此实体类对应的数据库表的CRUD方法写好了。
由于mybatis-plus可以自动取别名,传入User,那么它就会默认操作的表为user表
完成接口继承之后,需要在启动器中使用MapperScan扫描dao下面的包,用于注入到spring容器中,一定要定位到持久层的包也就是dao
@MapperScan("org.cqust.testmybatisplus.dao")
@SpringBootApplication
public class TestMybatisPlusApplication {public static void main(String[] args) {SpringApplication.run(TestMybatisPlusApplication.class, args);}}
7.测试BaseMapper中的方法
简单测试一个查询全部信息的程序:
@Autowiredprivate UserDao userDao;@Testpublic void testSelect(){List<User> users = userDao.selectList(null);users.forEach(System.out::println);}
selectList需要传入条件选择器,为null就是无条件查询,也就是全表查询:
最后查询出的结果就是创建数据库表的那些数据:
8.配置log日志,方便调试mybatis-plus
默认的控制台只会输出打印结果,我们并不知道,究竟执行了什么sql语句,这里推荐在application.properties文件中打开log日志功能,方便调试
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
再次运行测试程序: