Mybatis-Plus(一)

Mybatis-Plus(一)

 

最近在项目当中学习到了一种新的构建sql查询的技术—mybatis-plus  相交与之前使用的example即先创建一个example对象 再根据这个对象创建一个criteria对象来说,这种方式更为简洁方便,他为我们提供了基础的增删改查操作,以至于 如若你只是想写增删该查的话,你的mapper.xml文件以及相应的dao service文件当中是一个方法都不用去写的,下面我们就来学习这种简便的构建方法;
首先,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生成器),可自由配置,完美解决主键问题
  • 支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持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 操作我们需要做什么呢?

/** User 对应的 Mapper 接口 */
public interface UserMapper extends BaseMapper<User> { }

//如果没有什么特殊的操作,那么这个mapper文件当中是什么都不用写的

基本CRUD

// 初始化 影响行数
int result = 0;
// 初始化 User 对象
User user = new User();

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

// 更新 User,用到的就是刚刚插入的user
user.setAge(18);
result = userMapper.updateById(user);

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

// 查询姓名为‘张三’的所有用户记录
//这里new EntityWrapper<>() 就是用来构建查询条件的
//具体你查询的是哪个类 里面泛型就写那个类
//当然条件的拼接不止有eq还有许多,后面的文章当中会提到
//具体EntityWrapper的用法后面再进行介绍
List<User> userList = userMapper.selectList(
        new EntityWrapper<User>().eq("name", "张三")
);

再如以下的例子:

List<User> userList = userMapper.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "张三")
                .eq("sex", 0)
                .between("age", "18", "50")
);
New page就是用来创建分页条件的,相当于的sql就是:
SELECT *
FROM sys_user
WHERE (name='张三' AND sex=0 AND age BETWEEN '18' AND '50')
LIMIT 0,10


// 删除 User
result = userMapper.deleteById(user.getId());
正如上所示:我们仅仅需要的是继承一个BaseMapper即可实现大部分表单的增删改查,极大的减少了开发的负担。

  当然我们也可以使用AR模式 即注解指定表明,指定主键名称的形式来进行操作:

下面我们就来说一下他和spring,springBoot的集成:

相对于springBoot来说Spring的集成会复杂一些,但也仅限于去更换一些使用后的包:

Mybatis 自带的MybatisSqlSessionFactoryBean替换为 MP 自带的即可。
也就是将xml配置文件当中Factory的包替换为下面的包:具体的配置如下
com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean,当然还有相应的包也应该替换;
具体的配置大家可以去官网查看,下面主要说一下springBoot的配置
官网地址:https://baomidou.gitee.io/mybatis-plus-doc/#/install

SprintBoot的集成:

spring boot 项目集成mp可以使用starter
下面是pom文件当中加入的依赖和配置:
<dependencies>
  <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>最新版本号</version>
  </dependency>
</dependencies>
<!-- 如果mapper.xml是放在src/main/java目录下,需配置以下-->
<build>
  <resources>
      <resource>
          <directory>src/main/java</directory>
          <filtering>false</filtering>
          <includes>
              <include>**/mapper/*.xml</include>
          </includes>
      </resource>
  </resources>
</build>
application.yml配置文件:
mybatis-plus:
  # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
  # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
  mapper-locations: classpath:/mapper/*Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.yourpackage.*.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 3
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
    #驼峰下划线转换
    db-column-underline: true
    #mp2.3+ 全局表前缀 mp_
    #table-prefix: mp_
    #刷新mapper 调试神器
    #refresh-mapper: true
    #数据库大写下划线转换
    #capital-mode: true
    # Sequence序列接口实现类配置
    key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
    #逻辑删除配置(下面3个配置)
    logic-delete-value: 1
    logic-not-delete-value: 0
    sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
    #自定义填充策略接口实现
    meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
  configuration:
    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId) 
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置JdbcTypeForNull, oracle数据库必须配置
jdbc-type-for-null: 'null'
启动类Java Configuration配置:
@Configuration
@MapperScan("com.yourpackage.*.mapper*")
public class MybatisPlusConfig {
   /*
    * 分页插件,自动识别数据库类型
    * 多租户,请参考官网【插件扩展】
    */
   @Bean
   public PaginationInterceptor paginationInterceptor() {
      return new PaginationInterceptor();
   }

   /*
    * oracle数据库配置JdbcTypeForNull
    * 参考:https://gitee.com/baomidou/mybatisplus-boot-starter/issues/IHS8X
    不需要这样配置了,参考 yml:
    mybatis-plus:
      confuguration
        dbc-type-for-null: 'null' 
   @Bean
   public ConfigurationCustomizer configurationCustomizer(){
       return new MybatisPlusCustomizers();
   }

   class MybatisPlusCustomizers implements ConfigurationCustomizer {

       @Override
       public void customize(org.apache.ibatis.session.Configuration configuration) {
           configuration.setJdbcTypeForNull(JdbcType.NULL);
       }
   }
   */
}
以上就是基本的使用以及与springspringBoot的集成,下一篇将分析以下它的单个核心特性,代码生成器,条件构造器,以及通用的CRUD.
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/qq_42112846/article/details/88085525