欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis-Plus 全局配置无效的解决方案

程序员文章站 2022-06-14 23:19:44
目录全局配置无效mybatis-plus简单配置及应用mybatis-plus条件构造mybatis generator条件构造全局配置无效依赖         ...

全局配置无效

依赖

        <dependency>
            <groupid>com.baomidou</groupid>
            <artifactid>mybatis-plus-boot-starter</artifactid>
            <version>3.1.0</version>
        </dependency>

配置文件修改

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typealiasespackage: com.hz.waste.entity.model
  global-config:
     #id-type: 3    #这种配置是不生效的
     #field-strategy: 2 #这种配置是不生效的
    db-config:
      #主键类型 auto:"数据库id自增" input:"用户输入id",id_worker:"全局唯一id (数字类型唯一id)", uuid:"全局唯一id uuid";
      id-type: id_worker  #改为这种可以
      #字段策略 ignored:"忽略判断"  not_null:"非 null 判断")  not_empty:"非空判断"
      field-strategy: not_empty #改为这种可以
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置jdbctypefornull
    jdbc-type-for-null: 'null'
    call-setters-on-nulls: true
    #打印语句
    log-impl: org.apache.ibatis.logging.stdout.stdoutimpl

mybatis-plus简单配置及应用

mybatis-plus是由中国大神写的mybatis增强版,可以自动生成代码。

配置过程比较简单。首先引入两个maven依赖

    <dependency>
            <groupid>com.baomidou</groupid>
            <artifactid>mybatis-plus</artifactid>
            <version>2.0.6</version>
        </dependency>
        <dependency>
            <groupid>org.apache.velocity</groupid>
            <artifactid>velocity</artifactid>
            <version>1.7</version>
        </dependency>

一个是mybatis-plus,另一个是它自动成成代码所依赖的模板引擎velocity。

然后将mybatis的sqlseassionfactorybean替换成plus增强版的,插件可以选择性配置

    <bean id="sqlsessionfactory" class="com.baomidou.mybatisplus.spring.mybatissqlsessionfactorybean">
        <property name="datasource" ref="datasource" />
        <property value="classpath:/mybatis-config.xml" name="configlocation" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperlocations" value="classpath:mapper/*.xml"></property>
        <!-- mp 全局配置注入 -->
        <property name="globalconfig" ref="globalconfig" />
        <!-- 插件配置 -->
        <property name="plugins">
            <array>
                <bean class="com.baomidou.mybatisplus.plugins.optimisticlockerinterceptor" />
            </array>
        </property>
    </bean>

mybatis-plus全局配置,主要是配置id生成策略,依赖数据库类型,

<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" />
        <!-- 数据库类型配置 -->
        <property name="dbtype" value="mysql" />
        <!-- 全局表为下划线命名设置 true -->
        <property name="dbcolumnunderline" value="true" />
    </bean>

生成代码

public class mpgenerator {
    /**
     * <p>
     * mysql 生成演示
     * </p>
     */
    public static void main(string[] args) {
        autogenerator mpg = new autogenerator();
        // 全局配置\\begin\\src\\main\\java
        globalconfig gc = new globalconfig();
        gc.setoutputdir("g:\\workspace");
        gc.setfileoverride(true);
        gc.setactiverecord(true);
        gc.setenablecache(false);// xml 二级缓存
        gc.setbaseresultmap(true);// xml resultmap
        gc.setbasecolumnlist(true);// xml columlist
        gc.setopen(false);
        gc.setauthor("xuwei");
        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setmappername("%sdao");
        gc.setxmlname("%smapper");
        gc.setservicename("%sservice");
        gc.setserviceimplname("%sserviceimpl");
        gc.setcontrollername("%scontroller");
        mpg.setglobalconfig(gc);
        // 数据源配置
        datasourceconfig dsc = new datasourceconfig();
        dsc.setdbtype(dbtype.mysql);
        dsc.setdrivername("com.mysql.jdbc.driver");
        dsc.seturl("jdbc:mysql://localhost:3306/begin?useunicode=true&amp;characterencoding=utf-8&amp;generatesimpleparametermetadata=true");
        dsc.setusername("root");
        dsc.setpassword("123");
        mpg.setdatasource(dsc);
        // 策略配置
        strategyconfig strategy = new strategyconfig();
        // strategy.setcapitalmode(true);// 全局大写命名 oracle 注意
        strategy.settableprefix(new string[] { "t_", "tsys_" });// 此处可以修改为您的表前缀
        strategy.setnaming(namingstrategy.underline_to_camel);// 表名生成策略
        strategy.setinclude(new string[] { "dept" }); // 需要生成的表
        // strategy.setexclude(new string[]{"test"}); // 排除生成的表
        mpg.setstrategy(strategy);
        //默认是service、serviceimpl、controller都生成。在这里关闭他们
        templateconfig tc = new templateconfig();
        tc.setcontroller(null);
        mpg.settemplate(tc);
        // 生成文件路径
//      packageconfig pc = new packageconfig();
//      pc.setparent("com.xu");
//      pc.setentity("entity.plus");
//      pc.setmapper("dao.plus");
//      pc.setxml("mapper.plus");
//      pc.setservice("service.plus");
//      pc.setserviceimpl("service.plus.impl");
//      mpg.setpackageinfo(pc);
        // 执行生成
        mpg.execute();
    }

这样代码生成到g:\workspace目录下面

和mybayis generator相比plus生成的代码映射文件xml,和dao层更加干净,通用的crud都通过dao类继承的basemapper来实现。

但是缺点也很明显,条件构造器不能像generator那样直接将表中的字段名称和pojo映射,所以需要自己写查询条件对应的字段名称。

如果要拼接这样一个查询条件( user_name = ? and password = ? ) or( id = ? and state = ? )

mybatis-plus条件构造

        entitywrapper<user> ew = new entitywrapper<>();
        ew.eq("user_name", "向问天").eq("password", "sde");
        ew.ornew("id", 3).eq("state", 2);

mybatis generator条件构造

        userexample userexample = new userexample();
        userexample.createcriteria()
        .andusernameequalto("向问天")
        .andpasswordequalto("sde");
        userexample.or()
        .andidequalto(3)
        .andstateequalto(2);
        userexample.isdistinct();

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。