A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小江哥 黑马粉丝团   /  2018-7-28 15:53  /  1103 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

简介Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性

  • 无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
  • 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring
  • 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
  • 预防Sql注入:内置Sql注入剥离器,有效预防Sql注入攻击
  • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
  • 支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
  • 支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key……)自动转义,还可自定义关键词
  • 内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询
  • 内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作
入门

  • 假设我们已存在一张 User 表,且已有对应的实体类 User,实现 User 表的 CRUD 操作我们需要做什么呢?
  • 创建对应的mapper接口
[Java] 纯文本查看 复制代码
/** User 对应的 Mapper 接口 */
public interface UserMapper extends BaseMapper<User> { }


  • 以上就是您所需的所有操作,甚至不需要您创建XML文件,我们如何使用它呢?
  • 基本CRUD
[Java] 纯文本查看 复制代码
// 初始化 影响行数
int result = 0;
// 初始化 User 对象
User user = new User();

// 插入 User (插入成功会自动回写主键到实体类)
user.setName("Tom");
result = userMapper.insert(user);

// 更新 User
user.setAge(18);
result = userMapper.updateById(user);

// 查询 User
User exampleUser = userMapper.selectById(user.getId());

// 查询姓名为‘张三’的所有用户记录
List<User> userList = userMapper.selectList(
        new EntityWrapper<User>().eq("name", "张三")
);

// 删除 User
result = userMapper.deleteById(user.getId());


  • 以上是基本的 CRUD 操作,当然我们可用的 API 远不止这几个,mybatis plus提供了多达 17 个方法给大家使用,可以极其方便的实现单一、批量、分页等操作,接下来我们就来看看 MP 是如何使用分页的。
[Java] 纯文本查看 复制代码
// 分页查询 10 条姓名为‘张三’的用户记录
List<User> userList = userMapper.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "张三")
);


  • 如您所见,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作,极大的减少的开发负担。
  • 有人也许会质疑:这难道不是通用 Mapper 么?别急,咱们接着往下看。
  • 现有一个需求,我们需要分页查询 User 表中,年龄在18~50之间性别为男且姓名为张三的所有用户,这时候我们该如何实现上述需求呢?
  • 传统做法是 Mapper 中定义一个方法,然后在 Mapper 对应的 XML 中填写对应的 SELECT 语句,且我们还要集成分页,实现以上一个简单的需求,往往需要我们做很多重复单调的工作,普通的通用 Mapper 能够解决这类痛点么?
[Java] 纯文本查看 复制代码
// 分页查询 10 条姓名为‘张三’、性别为男,且年龄在18至50之间的用户记录
List<User> userList = userMapper.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "张三")
                .eq("sex", 0)
                .between("age", "18", "50")
);


  • 以上操作,等价于
[Java] 纯文本查看 复制代码
SELECT *
FROM sys_user
WHERE (name='张三' AND sex=0 AND age BETWEEN '18' AND '50')
LIMIT 0,10


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

  • mybatis-plus依赖
  • [XML] 纯文本查看 复制代码
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.3</version>
    </dependency>
  • 如何集成
Mybatis-Plus 的集成非常简单,对于 Spring,我们仅仅需要把 Mybatis 自带的MybatisSqlSessionFactoryBean替换为 MP 自带的即可。

试例工程
XML配置
[XML] 纯文本查看 复制代码
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
    <!-- 配置数据源 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 自动扫描 Xml 文件位置 -->
    <property name="mapperLocations" value="classpath:mybatis/*/*.xml"/>
    <!-- 配置 Mybatis 配置文件(可无) -->
    <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
    <!-- 配置包别名,支持通配符 * 或者 ; 分割 -->
    <property name="typeAliasesPackage" value="com.baomidou.springmvc.model"/>
    <!-- 枚举属性配置扫描,支持通配符 * 或者 ; 分割 -->
    <property name="typeEnumsPackage" value="com.baomidou.springmvc.entity.*.enums"/>

    <!-- 以上配置和传统 Mybatis 一致 -->

    <!-- 插件配置 -->
    <property name="plugins">
        <array>
            <!-- 分页插件配置, 参考文档分页插件部分!! -->
            <!-- 如需要开启其他插件,可配置于此 -->
        </array>
    </property>

    <!-- MP 全局配置注入 -->
    <property name="globalConfig" ref="globalConfig"/>
</bean>

<!-- 定义 MP 全局策略 -->
<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
    <!-- 主键策略配置 -->
    <!-- 可选参数
        AUTO->`0`("数据库ID自增")
        INPUT->`1`(用户输入ID")
        ID_WORKER->`2`("全局唯一ID")
        UUID->`3`("全局唯一ID")
    -->
    <property name="idType" value="2"/>

    <!-- 数据库类型配置 -->
    <!-- 可选参数(默认mysql)
        MYSQL->`mysql`
        ORACLE->`oracle`
        DB2->`db2`
        H2->`h2`
        HSQL->`hsql`
        SQLITE->`sqlite`
        POSTGRE->`postgresql`
        SQLSERVER2005->`sqlserver2005`
        SQLSERVER->`sqlserver`
    -->
    <property name="dbType" value="oracle"/>

    <!-- 全局表为下划线命名设置 true -->
    <property name="dbColumnUnderline" value="true"/>
</bean>

详细配置可参考MybatisSqlSessionFactoryBeanGlobalConfiguration

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马