Mybatis-Plus 全局配置无效的解决方案
作者:Fan 发布时间:2022-06-29 12:46:02
标签:MybatisPlus,全局,配置
全局配置无效
依赖
<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&characterEncoding=UTF-8&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();
来源:https://blog.csdn.net/weixin_43850799/article/details/107018243
0
投稿
猜你喜欢
- 1. 什么是静态内部类在Java中有静态代码块、静态变量、静态方法,当然也有静态类,但Java中的静态类只能是Java的内部类,也称为静态嵌
- Javaweb开发环境的配置也是比较繁琐的一件事情,虽然理论上使用记事本,完全可以写出一个Javaweb工程,但是在团队大型开发的Javaw
- 基于SMTP发送一个简单的邮件首先,需要一个认证器:package No001_基于SMTP的文本邮件;import javax.mail.
- 在学习操作系统这本书的时候,我们使用的是汤小丹老师的《计算机操作系统》接下来我将会使用java语言去实现内部代码。Swap指令最佳置换算法是
- 1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String n
- 1.委托delegate委托delegate也是一种类型,在任何可以声明类的地方都可以声明委托,它将方法当做另一个方法的参数进行传递,这样就
- 1. 什么是RESTREST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状
- 目录1,基本介绍2,HttpURLConnection实现3.HttpClient实现4.Spring的RestTemplate1,基本介绍
- maven依赖及一些配置这里主要是搭建项目常用到的maven依赖以及搭建项目会需要用到的一些配置文件,可能下面这些依赖还不是很全,但是应该会
- 说明本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时自动弹开页面(URL自己定义)。可以自定义监控持续分钟数,同时还可以通过多线程
- jcasbin简介:jcasbin 是一个用 Java 语言打造的轻量级开源访问控制框架https://github.com/casbin/
- 正文 #方法一:使用string.Contains方法string.Contains是大小写敏感的,如果要用该方法来判断一个str
- Memento定义:memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态。Memento模式相
- 前言本文主要介绍其具体的实现思路(视频仅有代码输入,并无过程介绍等),同时,在原本实现的基础上,进行了多处修改和优化,具体参见下面的内容。优
- 一、摘要这篇文章将介绍Spring整合Mybatis 如何完成SqlSessionFactory的动态切换的。并且会简单的介绍下MyBati
- 当我们需要与 NIO Channel 进行交互时, 我们就需要使用到 NIO Buffer, 即数据从 Buffer读取到 Channel
- JVM内部结构图Java虚拟机主要分为五个区域:方法区、堆、Java栈、PC寄存器、本地方法栈。下面来看一些关于JVM结构的重要问题。1.哪
- 定义一个对象应该对其他对象保持最少的了解。问题由来类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案尽
- 本文实例讲述了java生成随机数的方法。分享给大家供大家参考。具体实现方法如下:package com.tool.code; import
- 1. 为什么写这篇文章?事情是这样的,在 2021年6月10日早上我在CSDN上发布了文章《你真的懂Java怎么输出Hello World吗