学习使用第三方组件心得:
导入相应的依赖:这里很简单只要在pom文件中粘贴即可
研究依赖如何配置:这里主要就是编写插件特定的config类
代码如何编写:这里主要可以参考官网教程或B站上的视频或csdn上的一些博客
提高扩展技术能力:不能仅仅满足在官网上的快速入门,一定要多尝试,多写bug,因为出了bug解决bug的过程才能让你更加有印象
1. 前言
因为公司的技术主管推荐我使用mybatis-plus插件之后,自己就跟着网上的教程学习了一下,学完之后,我尼玛是真的香
这里我就先粘贴官网上面说的那些优点
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
之后我就说一下 我自己的切身体会 吧
方便!方便!方便!..
真的太尼玛方便了,之前我们使用mybatis的时候就需要自己手动的去编写各种各样的SQL语句,并且还需要编写 pojo-dao-service-controller 这样的层级结构,使得我们的开发有一大部分的时间都是浪费在了这样的 重复性劳动 中,这就会严重打击我们的积极性,但是使用了mybatis-plus插件之后,是真的解放双手.
我自己的理解就是导入依赖,编写mapper接口继承BaseMapper之后,基本上大部分的数据库操作就已经结束了,真的是太方便了.
操作非常的简单
这里我本来以为也要像其他插件配置各种各样的bean,config之类的文件,但是实际配置之后发现真的非常简单.
我们只需要添加依赖
<!-- mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency>
创建我们的mapper接口继承BaseMapper
@Repository public interface UserMapper extends BaseMapper<User> { // 所有的crud已经完全写好,不需要配置一大堆文件 }
最后只需要创建一个config类去扫描我们的mapper接口的包就行了
//扫描我们的mapper文件夹 @MapperScan("com.rang.mapper") @EnableTransactionManagement //开启事务支持 @Configuration//配置类 public class MyBatisPlusConfig { }
就上述加起来都不到15行的代码就帮我们把之前我们那么繁琐的工作就完成了,你说这简不简单,我尼玛真的太简单了
内置的组件多
这里就说我自己平常最需要用到的一些组件吧.
乐观锁 : 当多个用户进行操作时,加锁就显得非常重要
分页组件 : 这个只要你的数据量还可以,分页显示,你就少不了吧
最后就是博主学习的教程就是 狂神说java 的教程,这是视频的地址:https://www.bilibili.com/video/BV17E411N7KN
以下的笔记中既有狂神的理念,同时也包含了我自己的一些思考.
并且我已经将整个项目上传到了我自己的GitHub上( 主要是为了练习一下如何把项目放到GitHub上面托管 )
这是链接地址:https://github.com/haha143/mybatis-plus
2. 创建表,连接数据库
创建数据库mybatis-plus
创建user表:
DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) ); --真实开发中,version(乐观锁),deleted(逻辑删除),gmt_create,gmt_modified
插入数据:
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');
编写项目,初始化项目
依赖:
<!-- 数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency>
mybatis-plus可以节省大量的代码,尽量不要同时导入mybatis和mybatis-plus
#这里我主要是针对的mysql5.7的版本 spring.datasource.username=root spring.datasource.password=mysqladmin spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #mysql8的话就需要将驱动改成com.mysql.cj.jdbc.Driver,并且一定要在url里面添加时区serverTimezone这个属性,否则一定会报错
传统方式pojo-dao(连接mybatis,配置mapper.xml文件)-service-controller
使用mybatis-plus之后:
- pojo
@Data @AllArgsConstructor @NoArgsConstructor public class User { private Long id; private String name; private Integer age; private String email; }
这里我使用了lombok插件,只要idea中下载一下lombok插件然后倒入依赖就能正常使用了
<!-- lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
mapper接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.rang.pojo.User; import org.springframework.stereotype.Repository; @Repository public interface UserMapper extends BaseMapper<User> { // 所有的crud已经完全写好,不需要配置一大堆文件 }
我么需要在mybatis-plus主启动类上来扫描我们的mapper接口
//扫描我们的mapper文件夹 @MapperScan("com.rang.mapper") @SpringBootApplication public class MybatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusApplication.class, args); } }
测试类中测试
@SpringBootTest class MybatisPlusApplicationTests { // 继承了BaseMapper.所有的方法都来自于父类 // 也可以编写自己的扩展方法 @Autowired private UserMapper userMapper; @Test void contextLoads() { // 参数是一个Wrapper,条件构造器,这里暂时用不到,先填null // 查询全部用户 List<User>users=userMapper.selectList(null); users.forEach(System.out::println); } }

