哪里有建设网站东莞seo排名收费
一、MybatisPlus是什么?
MybatisPlus官网:https://baomidou.com/
由官网定义可知:
1、MP不是为了取代Mybatis,是Mybatis的搭档,是协作完成需求;
2、MP是为了简化Mybatis的开发,提高效率。
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
二、快速入门
(一)创建一个SpringBoot项目MPDemo
(二)导入MP的起步依赖
注:引入MP的起步依赖,实则已经包含了Mybatis的起步依赖。
<!-- 导入MybatisPlus的起步依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.10.1</version></dependency><!-- 导入lombook起步依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</scope></dependency><!-- 导入mysql的起步依赖--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>
(三)创建测试数据库
数据库脚本如下:
# 创建数据库mpdemo
create database mpdemo;# 使用数据库mpdemo
use mpdemo;DROP TABLE IF EXISTS `user`;# 创建表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)
);# 为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');
(四)配置application.yml
数据库连接配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mpdemousername: rootpassword: root
(五)创建实体类User
@Data
@TableName("`user`")
public class User {private Long id;private String name;private Integer age;private String email;
}
(六)创建数据访问层UserMapper
@Mapper
public interface UserMapper extends BaseMapper<User> {}
(七)创建测试类SampleTest
@SpringBootTest
public class SampleTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testSelect() {System.out.println(("----- selectAll method test ------"));List<User> userList = userMapper.selectList(null);Assert.isTrue(5 == userList.size(), "");userList.forEach(System.out::println);}}
(八)MP结果验证
三、MP常见注解
MP的原理:MP通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。
(1)实体类名驼峰转下划线作为表名;
(2)名为id的字段作为主键;
(3)变量名驼峰转下划线作为表的字段名。
(一)@TableName注解
@TableName注解,用来指定表名。
(二)@TableId注解
@TableId注解,用来指定表中的主键字段信息。
@TableId(value = "id", type = ""),value为命名,type的类型有:
(1)IdType.AUTO:数据库自增长。
(2)IdType.INPUT:通过set方法自定输入。
(3)IdType.ASSIGN_ID:分配ID,接口IdentifierGenerator的方法nextId来生成id,默认实现类为DefaultIndentifierGenerator雪花算法。
(三)@TableFiled注解
@TableFiled注解,用来指定表中的普通字段信息。
常见的场景有:
(1)成员变量名与数据库字段名不一致;
(2)成员变量名以is开头,且是布尔值;
(3)成员变量名与数据库关键字冲突;
(4)成员变量不是数据库字段。
(四)示例
数据库表信息
实体类信息
/*** MP常用注解示例*/
@TableName("tb_user")
public class User {@TableId(value = "id", type = IdType.AUTO)private Long id;@TableField("username")private String name;@TableField("is_married")private Boolean isMarried;@TableField("'order'")private Integer order;@TableField(exist = false)private String address;}
(五)常见配置
MP的配置项继承了Mybatis原生配置,当然也有自身的新特性配置,例如:
# myabtis-plus信息配置
mybatis-plus:type-aliases-package: com.yassels.mpdemo.pojo # 别名扫描包mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值configuration:map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射cache-enabled: false # 是否开启二级缓存global-config:db-config:id-type: assign_id # id为雪花算法生成update-strategy: not_null # 更新策略,值更新非空字段
四、MP使用的基本流程
(1)导入MP的地步依赖;
(2)Mapper继承BaseMapper<User>;
(3)通过注解处理实体类与数据库表信息保持一致;
(4)Application.yml配置MP信息。
五、核心功能
(一)条件构造器
MP支持各种复杂的where条件:
条件构造器的用法:
(1)QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分;
(2)UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊时才使用;
(3)尽量使用LambdaUpdateWrapper和LambdaQueryWrapper,避免硬编码。
(二)自定义SQL
利用MP的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。