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&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();
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。