【 MyBatis-Plus 】:快速入门

1、什么是 MyBatis-Plus

MyBatis-Plus 简称 MP,是由国内人员开发的 MyBatis 增强工具,在 MyBatis 的基础上简化开发、提高效率。

MyBatis-Plus 不能单独使用,必须配合 MyBatis 一起使用,就像 魂斗罗 中的 1P、2P 一样

Mybatis-Plus 是由 baomidou(苞米豆)组织开发并且开源的。Mybatis-Plus 只是 苞米豆 组织开发了其中一个插件。

2、MyBatis-Plus 的优点

MyBatis-Plus 的优点:

  • 无侵入:只在 MyBatis 的基础上使用,但是不会对 MyBatis 产生任何影响
  • 损耗小 :内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用 :通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 内置代码生成器 :采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎
  • 内置多种插件 :内置了分页插件、性能分析插件和全局拦截插件 等多种插件
  • 支持多种数据库 :支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库

3、快速入门

因为 MyBatis-Plus 不能单独使用,必须配合 MyBatis 一起使用,而 MyBatis 也很少单独使用,所以对于 Mybatis 整合 MP 有常常有三种用法,分别是Mybatis+MP、Spring+Mybatis+MP、Spring Boot+Mybatis+MP

在进行如下整合时,需要自行准备数据库、java实体类。

3.1、Mybatis + MP

在学习 MyBatis 的时候,需要定义 Mapper 接口、定义映射文件和配置文件。而 MyBatis-Plus 则是在它们的基础上改进的,首先引入 MyBatis-Plus 坐标,如果使用 MyBatis-Plus ,那么 MyBatis 的坐标最好省略,避免造成版本冲突:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.1.0</version>
</dependency>

具体的使用方式 Mapper 接口继承BaseMapper<实体类名称>接口:

public interface OrderMapper extends BaseMapper<Order> {

    //根据 id 查询订单信息
    Order selectByID(int id);

    //根据 时间 查询订单信息
    List<Order> selectByDate(String date);

    //根据 uid 查询订单信息
    List<Order> selectByUid(int uid);

    //根据 id 查询订单且查询出该订单对应的用户信息
    Order selectOrderAndUser(int id);

    //添加订单信息
    int insert(Order order);

    //修改订单信息
    int update(Order order);

    //删除订单信息
    int delete(int id);
}

在实例化 SqlSessionFactory 对象的方式有所差别:

//MyBatis 实例化方式
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

//MyBatis-Plus 实例化方式
SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(resourceAsStream);

MyBatis-Plus 使用的是有自身定义的 MybatisSqlSessionFactoryBuilder 类进行实例化。

3.2、Spring + Mybatis + MP

使用 Spring 进行整合 MP 时与之前的步骤差不多,第一步导入依赖,第二步是继承接口,第三步是修改实例化 SqlSessionFactory 对象。

第三步有点差别,在 Spring 中 Mybatis 的使用的 SqlSessionFactory 对象是通过 XML 实例化的,所以我们要进行如下修改:

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:conf/mybatis.xml"/>
    <property name="mapperLocations" value="classpath:com.itlong/Mapper/OrderMapper.xml"/>
</bean>

3.3、SpringBoot + Mybatis + MP

SpringBoot 整合 MP 就与上面两种有所差别了, Mapper 接口还是继承BaseMapper<实体类名称>接口。

  • 导入依赖:因为 SpringBoot 有起步依赖,所以我们直接导入 MP 的起步依赖
    <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.1.0</version>
    </dependency>
    
  • 修改配置文件:在只使用 MyBatis 时配置文件是通过 mybatis 进行设置的,但 MyBatis-Plus 要以 mybatis-plus 为前缀
    #使用 MyBatis-Plus 时的配置方式
    mybatis-plus:
        mapper-locations: classpath:mapper/*Mapper.xml
    	type-aliases-package: com.itlong.spring_boot.domain
    	
    #使用 MyBatis 时的配置方式,在确定使用 MP 时不用配置
    mybatis:
        mapper-locations: classpath:mapper/*Mapper.xml
        type-aliases-package: com.itlong.spring_boot.domain
    

3.4、BaseMapper 接口

其实在使用 MP 的过程中,最主要的还是Mapper 接口还是继承BaseMapper<实体类名称>接口。BaseMapper 接口中定义了很多方法:
在这里插入图片描述
这些方法都对应了一种 SQL 语句,这些方法 MyBatis-Plus 已经帮我们实现了。在这些方法中,形参部分都有一个 T ,这个 T 表示当前需要对那个实体类进行 CURD 操作,实体又与数据库表映射。这些具体方法在后面再去深入了解。

3.5、具体调用

虽然整合方法很多,但是具体的使用都是通过 Mapper 接口:

//省略了接口的定义
@Service("orderService")
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Override
    public Order selectByID(int id) throws IOException {
        List<Order> orderList = orderMapper.selectList(null);
        if (orderList != null && orderList .getId() != 0) {
            return orderList ;
        }
        return null;
    }
}

4、注解

因为 BaseMapper 类的方法基本上都要使用实体类,所以实体类的定义不可能想使用 MyBatis 那么不规范了,所以 MP 提供了一些注解在实体类上使用。

  • @TableName:表名注解,作用在类上。

    属性类型必须指定默认值描述
    valueString" "定义表名,如果实体类名和数据库表名相同可省略
    resultMapString" "如果没有这省略,如果存在则填写xml 中 resultMap 的 id
    autoResultMapbooleanfalse用于自动构建 resultMap,如果 resultMap 舒心指定了 id,那么无论如何都不生效。
  • @TableId:主键注解,作用在主键映射的字段上。

    属性类型必须指定默认值描述
    valueString" "主键字段名,如果主键字段和对应的属性名不同时使用
    typeEnumIdType.NONE主键类型,可选项有 IdType.AUTO(自增)、IdType.INPUT(insert前自行set主键值)等
  • @TableField:字段注解,作用在非主键映射的字段上。

    属性类型必须指定默认值描述
    valueString" "数据库字段名,只在非主键字段和对应的属性名不同时使用
    existbooleantrue是否为数据库表字段( 默认 true 存在,false 不存在 )
    conditionString" "预处理 WHERE 实体条件自定义运算规则
    updateString" "预处理 set 字段自定义注入
    selectbooleantrue是否进行 select 查询(默认 true 进行)
    fillEnumFieldFill.DEFAULT具体详解见(传送门
  • @Version:乐观锁注解,具体详解见(传送门

  • @TableLogic:字段逻辑处理注解,具体详解见(传送门

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值