mybatisplus

  • 配置
    • Mybatis-Plus 的集成非常简单,对于 Spring,我们仅仅需要把 Mybatis 自带的
    • MybatisSqlSessionFactoryBean 替换为 MP 自带的即可。</DI< div>

      <bean id="sqlSessionFactoryBean"

      class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">

      <!-- 数据源 --></DI< div>

  • 用法的区别
    • Mapper接口
      *    
      * 基于Mybatis:  在Mapper接口中编写CRUD相关的方法  提供Mapper接口所对应的SQL映射文件 以及 方法对应的SQL语句.
      *
      * 基于MP:  让XxxMapper接口继承 BaseMapper接口即可.
      *            BaseMapper<T> : 泛型指定的就是当前Mapper接口所操作的实体类类型
  • mybatisplus全局配置
    • 先配置
      • <bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
                 <!-- 在2.3版本以后,dbColumnUnderline 默认值就是true -->
                 <property name="dbColumnUnderline" value="true"></property>
                
                 <!-- 全局的主键策略 -->
                 <property name="idType" value="0"></property>
                
                 <!-- 全局的表前缀策略配置 -->
                 <property name="tablePrefix" value="tbl_"></property>
                
                
                
            
             </bean>

    • 再注入sqlsession
      • <bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
                 <!-- 数据源 -->
                 <property name="dataSource" ref="dataSource"></property>
                 <property name="configLocation" value="classpath:mybatis-config.xml"></property>
                 <!-- 别名处理 -->
                 <property name="typeAliasesPackage" value="com.atguigu.mp.beans"></property>       
                
                 <!-- 注入全局MP策略配置 -->
                 <property name="globalConfig" ref="globalConfiguration"></property>
             </bean>

  • 插入的时候mybatisplus会把自动生成id封装到实体类中
  • EntityWrapper

List<Employee> userList = employeeMapper.selectPage(

new Page<Employee>(2, 3),

new EntityWrapper<Employee>().eq("last_name",

"MybatisPlus")

.eq("gender", 1)

.between("age", 18, 50)

);

  • or()和orNew()
    • or().条件是sql语句后面条件不带括号的
    • orNew()是带括号的
  • AR 模式提供了一种更加便捷的方式实现 CRUD 操作,其本质还是调用的 Mybatis 对
  • 应的方法,类似于语法糖

    语法糖是指计算机语言中添加的某种语法,这种语法对原本语言的功能并没有影响.

    可以更方便开发者使用,可以避免出错的机会,让程序可读性更好.</DI< div>

  • 代码生成器
    • MP 的代码生成器可生成: 实体类(可以选择是否支持 AR)、Mapper 接口、Mapper 映射

      文件、 Service 层、Controller 层. </DI< div>

    • 坐标
      • <dependency>

        <groupId>org.apache.velocity</groupId>

        <artifactId>velocity-engine-core</artifactId>

        <version>2.0</version>

        </dependency>

        //加入 slf4j ,查看日志输出信息</DI< div>

        <dependency>

        <groupId>org.slf4j</groupId>

        <artifactId>slf4j-api</artifactId>

        <version>1.7.7</version>

        </dependency>

        <dependency>

        <groupId>org.slf4j</groupId>

        <artifactId>slf4j-log4j12</artifactId>

        <version>1.7.7</version>

        </dependency>

    • 模板代码

//可以去官方文档去查找

    //1. 全局配置
         GlobalConfig config = new GlobalConfig();
         config.setActiveRecord(true) // 是否支持AR模式
               .setAuthor("weiyunhui") // 作者
               .setOutputDir("D:\\workspace_mp\\mp03\\src\\main\\java") // 生成路径
               .setFileOverride(true)  // 文件覆盖
               .setIdType(IdType.AUTO) // 主键策略
               .setServiceName("%sService")  // 设置生成的service接口的名字的首字母是否为I
                                      // IEmployeeService
                .setBaseResultMap(true)
                .setBaseColumnList(true);
        
         //2. 数据源配置
         DataSourceConfig  dsConfig  = new DataSourceConfig();
         dsConfig.setDbType(DbType.MYSQL)  // 设置数据库类型
                 .setDriverName("com.mysql.jdbc.Driver")
                 .setUrl("jdbc:mysql://localhost:3306/mp")
                 .setUsername("root")
                 .setPassword("1234");
         
         //3. 策略配置
         StrategyConfig stConfig = new StrategyConfig();
         stConfig.setCapitalMode(true) //全局大写命名
                 .setDbColumnUnderline(true)  // 指定表名 字段名是否使用下划线
                 .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
                 .setTablePrefix("tbl_")
                 .setInclude("tbl_employee");  // 生成的表
        
         //4. 包名策略配置
         PackageConfig pkConfig = new PackageConfig();
         pkConfig.setParent("com.atguigu.mp")
                 .setMapper("mapper")
                 .setService("service")
                 .setController("controller")
                 .setEntity("beans")
                 .setXml("mapper");
        
         //5. 整合配置
         AutoGenerator  ag = new AutoGenerator();
        
         ag.setGlobalConfig(config)
           .setDataSource(dsConfig)
           .setStrategy(stConfig)
           .setPackageInfo(pkConfig);
        
         //6. 执行
         ag.execute();

  • 分页插件
 <property name="plugins">
<list>
<!-- 注册分页插件 -->
<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"></bean>

<!-- 注册执行分析插件 -->
<bean class="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor">
<property name="stopProceed" value="true"></property>
</bean>

<!-- 注册性能分析插件 -->
<bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
<property name="format" value="true"></property>
<!-- <property name="maxTime" value="5"></property> -->
</bean>

<!-- 注册乐观锁插件 -->
<bean class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor">
</bean>

</list>

</property>
</bean>
    • 示例代码
Page<Employ> employPage = new Page<Employ>(1, 5);
List<Employ> employs = employeeMapper.selectPage(employPage, null);
employPage.setRecords(employs);
System.out.println(employPage.getRecords());
System.out.println(employPage.getTotal());
  • 执行分析插件(官方文档查看)
  • 性能分析插件(官方文档查看)
  • 乐观锁插件(官方文档查看)
  • 逻辑删除
    • 配置
<!-- 定义MybatisPlus的全局策略配置-->
< bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
     <!-- 在2.3版本以后,dbColumnUnderline 默认值就是true -->
     <property name="dbColumnUnderline" value="true"></property>
    
     <!-- Mysql 全局的主键策略 -->
    <!-- <property name="idType" value="0"></property> -->
    
     <!-- Oracle全局主键策略 -->
     <property name="idType" value="1"></property>
    
     <!-- 全局的表前缀策略配置 -->
     <property name="tablePrefix" value="tbl_"></property>
    
     <!--注入自定义全局操作
    <property name="sqlInjector" ref="mySqlInjector"></property>
      -->
     <!-- 注入逻辑删除 -->
      <property name="sqlInjector" ref="logicSqlInjector"></property>
     
      <!-- 注入逻辑删除全局值 -->
      <property name="logicDeleteValue" value = "-1"></property>
      <property name="logicNotDeleteValue" value="1"></property>
    
      <!-- 注入公共字段填充处理器 -->
      <property name="metaObjectHandler" ref="myMetaObjectHandler"></property>
     
      <!-- 注入Oracle主键Sequence -->
      <property name="keyGenerator" ref="oracleKeyGenerator"></property>
< /bean>
< !-- 逻辑删除 -->
< bean id="logicSqlInjector" class="com.baomidou.mybatisplus.mapper.LogicSqlInjector"></bean>
    • 再逻辑删除字段加入注解@TableLogic

posted on 2020-07-17 05:16  赟麟  阅读(190)  评论(0编辑  收藏  举报

导航