MyBatis-Plus

MyBatis-Plus

1、简介

1.1MyBatisPlus介绍

MyBatis-Plus(简称MP),是一个MyBatis的增强工具包,只做增强不做改变,为简化开发工作、提高生产效率而生。

1.2代码及文档发布地址

官方地址:

http://mp.baomidou.com

代码发布地址:

Github:http://github.com/baomidou/mybatis-plus

Gitee:https://gitee.com/baomidou/mybatis-plus

文档发布地址:

http://mp.baomidou.com/#/?id=%E7%AE%80%E4%BB%8B

2、注解

1、@TableId注解:

​ 1)value:指定表中的主键列的列名,如果实体属性名与列名一致,可以省略不指定

​ 2)type:指定主键策略(自增,用户输入,全局唯一ID,UUID)

2、@TableName注解:

​ 1)value:指定数据库中的表名,如果实体类名与表名一致,可以省略不指定

3、@TableField注解:

​ 1)value:指定数据库中的列名,当数据库中的列名与实体类属性名不一致时使用

​ 2)exist:默认为true,数据库中是否存在此字段,如果设置为false,插入时,此字段不插入

3、CRUD通用

3.1CURD函数

1、只需要继承BaseMapper接口

2、插入

​ 1)insert()方法

insert方法在插入时,会根据实体类的每个属性进行非空判断,只有非空的属性对应的字段才会出现到SQL语句中

​ 2)insertAllColumn()方法

insertAllColumn 方法在插入时,不管属性是否为空,属性所对应的字段都会出现到SQL语句中

3、修改

​ 3)updateById()方法

updateById 方法在修改时,会根据实体类的每个属性进行非空判断,只有非空的属性对应的字段才会出现在SQL语句中

​ 4)updateAllColumnById()方法

updateAllColumnById 方法在修改时,不管属性是否为空,属性所对应的字段都会出现到SQL语句中

4、查询

​ 5)selectById()方法

通过id进行查询

​ 6)selectOne(@Param(“ew”)T entity)方法

通过传入一个对象进行查询,将需要查询的条件封装到对象中

​ 7)selectBatchIds(idList) 方法

通过多个id进行查询,List IdList

​ 8)selectByMap(@Param(“cm”) Map<String,Object> columnMap)

通过columnMap中的条件进行查询,columnMap.put(“列名”,“值”);String类型key应该是列名,而不是对象属性名

​ 9)selectPage(RowBounds rowBounds,@Param(“ew”) Wrapper warpper)

分页查询

RowBounds :mybatisplus自带的分页查询对象,我们也可以传一个page(分页辅助类)对象

selectPage(new Page<>(int current,int size),null),current 第几页;size 每页显示几条

5、删除

​ 1)deleteById();

通过id进行删除。

​ 2)deleteByMap(@Param(“cm”) Map<String,Object> columnMap)

通过columnMap中的条件进行删除

​ 3)deleteBatchIds(List<? extends Serializable> idList)

批量删除,通过idList中的id进行批量删除

3.2 MP启动注入SQL原理分析

1、问题:xxxxMapper继承了BaseMapper,BaseMapper中提供了通用的CRUD方法,方法来源于BaseMapper,有方法就必须有SQL,因为mybatis最终还是需要通过SQL语句操作数据。

2、前置知识:mybatis源码中比较重要的一些对象,mybatis框架的执行流程

3、通过现象看到本质

​ 1)xxxMapper的本质org.apache.ibatis.binding.MapperProxy;

​ 2)MapperProxy中SqlSession—>SqlSessionFactory

​ 3)SqlSessionFactory中configuration(全局配置)对象—>MappedStatements,每一个mapperedStatement都表示Mapper接口中的一个方法与Mapper映射文件中的一个SQL。

MP在启动就会挨个分析xxxMapper中的方法,并将对应的sql语句处理好,保存到configuration对象中的mapperStatements中。

​ 4)本质:在启动的时候,把每一个方法构造成MapperStatement。

​ a.SqlMethod:枚举对象,MP支持的SQL语句

​ b.TableInfo:数据库表的反射信息,可以获取到数据库表相关的信息

​ c.SqlSource:sql语句处理对象

​ d.MapperBuilderAssistant:用于缓存、SQL参数、查询方法结果集处理等。通过MapperBuilderAssistant将每一个mapperedStatement添加到configuration中的mappedstatments中

3.3 通用CRUD小结

1、以上是基本的CRUD操作,如您所见,我们仅仅需要继承一个BaseMappper即可实现大部分单标CRUD操作。BaseMapper提供了多达17个方法给大家使用,可以极其方便的实现单一、批量、分页等操作。极大的减少开发负担,难道这就是泗MP的强大之处了吗?

2、提出需求:

现有一个需求,我们需要分页查询Employee表中,年龄在18~50之间性别为男且姓名为xx的所有用户,这时候我们该如何实现上述需求呢?

MyBatis:需要在SQL映射文件中编写带条件查询的SQL,并基于PageHelper插件完成分页,实现以上需求,往往需要我们做很多重复单调的工作。普通的Mapper能够解决这类痛点吗?

MP:依旧不用编写SQL语句,MP提供了功能强大的条件构造器EntityWrapper

4、条件构造器EntityWrapper

4.1 EntityWrapper简介

1、MyBatis-Plus通过EntityWrapper(简称EW,MP封装的一个查询条件构造器)或者Condition(和EW类似)来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率。

2、实体类包装器,主要用于处理sql拼接,排序,实体类参数查询等

3、注意:使用的是数据库字段,不是java属性!

4、条件参数说明

查询方式说明
setSqlSelect设置SELECT查询字段
whereWHERE语句,拼接 + WHERE 条件
andAND语句,拼接 + AND 字段=值
andNewAND语句,拼接 + AND (字段=值)
orOR语句,拼接 + OR 字段=值
orNewOR语句,拼接 + OR (字段=值)
eq等于=
alleq基于map内容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询LIKE
notLike模糊查询NOTLIKE
inin查询
notinNOT IN 查询
isNullNULL值查询
isNotNullIS NOT NULL
groupBy分组GROUP BY
havingHAVING关键词
orderBy排序ORDER BY
orderASCASC排序 ORDER BY
orderDescDESC排序 ORDER BY
existsEXISTS 条件语句
notExistsNOT EXISTS条件语句
betweenBETWEEN条件语句
notBetweenNOT BETWEEN条件语句
addFilter自由拼接SQL
last拼接在最后,例如:{“LIMIT 1”}
4.2 带条件的查询

1、List selectList(@Param(“ew”) T entity,@Param(“ew”) Wrapper wrapper);

2、List selectPage();

List<Employee> userListCondition = employeeMapper.selectPage(new Page<Employee>(2,3),
        new EntityWrapper<Employee>()
         .eq("gender",1) 
         .eq("last_name","MyBatisPlus")
         .between("age",18,50));
4.3 带条件的修改

1、Integer update(@Param(“et”) T entity,@Param(“ew”) Wrapper warpper);

4.4 带条件的删除

1、Integer delete(@Param(“ew”) Wrapper wrapper);

4.5 使用Condition的方式打开如上需求
List<Employee> userListCondition = employeeMapper.selectPage(new Page<Employee>(2,3),
         Condition.create()
         .eq("gender",1) 
         .eq("last_name","MyBatisPlus")
         .between("age",18,50));
4.6 小结

MP:EntityWrapper Condition 条件构造器

MyBatis MBG: xxxExample–>Criteria:QBC(Query By Criteria)QBC风格的查询

Hibernate、通用Mapper

5、ActiveRecord(活动记录)

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。

ActiveRecord一致广受动态语言(php、Ruby等)的喜爱,而Java作为准静态语言,对于ActiveRecord往往只能感叹其优雅,所以MP也在AR道路上进行了一定的探索

5.1 如何使用AR模式

1、仅仅需要让实体类集成Model类且实现主键指定方法,即可开启AR之旅。

@TableName("tbl_employee")
public class Employee extends Model<Employee>{
    //  ... fields
    //  ... getter  and   setter 
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值