MybatisPlus
MP介绍
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
MP的特点
1.无侵入:只做增强不做改变,引入他不会对现有工程产生影响
2.损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
3.强大的CRUD操作:内置通用mapper、通用service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求。
入门案例
1.导入jar包
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
2.编辑Pojo对象
说明:MP要求以面向对象的方式操作数据库.其中对象与表 属性与字段必须映射!!!
实现方式: 利用注解进行绑定.
数据库表:
3.编辑mapper接口对象
4.编辑yml配置文件
说明:MP增强了Mybatis,Mp内部包含了mybatis,所有两者的jar不能同时出现
5.编辑测试案例
MP核心原理
1.需求
说明:之前操作数据库采用sql(面向过程的语言)方法进行编辑,但是如果所有的单表操作都由程序员完成那太累了,所有能否开发一种机制可以实现以面向对象的方式操作数据库,MP就诞生了
2.原理说明
1.对象与数据表进行关联 @TableName
2.MP采用BaseMapper的方式 将公共的接口方法进行了抽取。采用泛型的方式进行约束
3.MP将用户操作的对象在底层自动的转化为sql语句
3.对象转化sql原理
对象方法: userMapper.insert(User对象);
Sql语句: insert into demo_user(id,name…) value(100,xxx…)
步骤:
1.根据userMapper找到对应的class类型
2.根据userMappe的类型通过反射机制获取父级接口类型BaseMapper
3.找到BaseMapper类型之后,获取泛型类型User.class
4.获取User.class之后,获取class的注解名@TableName注解,获取注解名称 至此表名获取成功
5.根据User.class获取其中的属性名称.之后获取属性上的@TableField 获取字段名称.
6.之后利用对象的get方法获取属性的值最终实现了sql语句的拼接过程
7.MP将整理好的Sql交给Mybatis(jdbc)去处理. 最终实现了以对象的方式操作数据库.
MP的调用过程
1.以新增用户为例
用户先新建一个对象,给对象赋值----》然后调用insertUser方法—》调用Mapper接口里的
转化为sql语句 insert into demo_user value (id,name,age,sex)
注意:对象的属性必须要有包装类型
必须保证对象的属性值默认为Null,当给某个属性赋值时,其他属性仍然为空,不影响该属性的转化为sql语句。
因为sql语句查询时默认以属性不为null的值查找
2.根据条件查询的语句,需要借助querywrapper条件构造器,他相当于sql语句的where.
原则:根据对象中不为null的属性拼接where条件
以select * from demo_user where name=‘白骨精’ sex="女"为例
1.封装条件的对象 name=‘白骨精’ sex=女
2.对条件构造器赋值 where name=‘白骨精’ sex=“女”
3.然后根据表查找 select * from demo_user where name=‘白骨精’ sex=“女”