首页 » 软件编程 » Java编程

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

Java编程 2022-01-12

全局配置无效

依赖

        <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();

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


上一篇:基于rabbitmq延迟插件实现分布式延迟任务下一篇:使用Filter过滤器中访问getSession()要转化
程序园_程序员的世界 Copyright © 2020- www.580doc.com. Some Rights Reserved.