当前滚动:使用Mybatis-Plus问题解答 - 行业资讯 -

当前位置:首页  >  行业资讯  > 正文

当前滚动:使用Mybatis-Plus问题解答

当前滚动:使用Mybatis-Plus问题解答
2023-06-06 13:49:24 来源:博客园

我们使用一个新的框架难免会遇到各种问题,当然使用这款国产的优秀的Mybatis-Plus框架也不例外,下面我就给大家列举一下使用Mybatis-Plus可能遇到的一些问题,并做一下一一的解答。


【资料图】

1:如何排除非表的字段(这个问题一定要注意,我们Java中写的Entity类的属性是和表的字段一一对应的,如果属性在数据库中没有对应字段程序就会出错。当然表中可以有多的字段)。

使用一些三种方法都可以:(开发中我们经常使用第三者方式)

使用 transient 修饰:

privatetransientStringnoColumn;

使用 static 修饰 :

privatestaticStringnoColumn;

使用 TableField 注解:

@TableField(exist=false)

privateStringnoColumn;

2:出现 Invalid bound statement (not found)异常(这种一般是写的mapper接口找不到对应的xml中的mapper中写的sql)

不要怀疑,正视自己,这个异常肯定是你插入的姿势不对……

检查是不是引入 jar 冲突

检查 Mapper.java 的扫描路径

方法一:在 Configuration 类上使用注解 MapperScan

@Configuration@MapperScan("com.yourpackage.*.mapper")public class YourConfigClass{  ...}

方法二:在Configuration类里面,配置MapperScannerConfigurer

@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){    MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();    //可以通过环境变量获取你的mapper路径,这样mapper扫描可以通过配置文件配置了    scannerConfigurer.setBasePackage("com.yourpackage.*.mapper");    return scannerConfigurer;}

检查是否指定了主键?如未指定,则会导致 selectById 相关 ID 无法操作,请用注解@TableId 注解表 ID 主键。当然@TableId 注解可以没有!但是你的主键必须叫 id(忽略大小写)

SqlSessionFactory不要使用原生的,请使用MybatisSqlSessionFactory

检查是否自定义了SqlInjector,是否复写了getMethodList()方法,该方法里是否注入了你需要的方法(可参考DefaultSqlInjector)

IDEA 默认的 build 步骤可能会引起 mapper 文件无法正常编译到对应的 resources 文件夹中,请检查 build 之后相关资源文件夹是否有对应的 xml 文件,如果没有,请调整 IDEA 的 build 设置,推荐调整为 Maven 或 Gradle 的 build。

3:自定义 SQL 无法执行

问题描述:指在 XML 中里面自定义 SQL,却无法调用。本功能同 MyBatis 一样需要配置 XML 扫描路径:

Spring MVC 配置

                ...

Spring Boot 配置

mybatis-plus:  mapper-locations: classpath*:/mapper/**/*.xml

对于IDEA系列编辑器,XML 文件是不能放在 java 文件夹中的,IDEA 默认不会编译源码文件夹中的 XML 文件,可以参照以下方式解决:

1:将配置文件放在 resource 文件夹中

2:对于 Maven 项目,可指定 POM 文件的 resource

                            src/main/java                        **/*.xml                                      src/main/resources        

提示注意!

Maven 多模块项目的扫描路径需以 classpath*:开头(即加载多个 jar 包下的 XML 文件)

4:关于 Long 型主键填充不生效的问题

检查是不是用了long而不是Long!

提示

long类型默认值为0,而MP只会判断是否为null

JavaScript 无法处理 Java 的长整型 Long 导致精度丢失,具体表现为主键最后两位永远为 0,解决思路:Long 转为 String 返回。

FastJson 处理方式

@Overridepublic void configureMessageConverters(List> converters) {    FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter();    FastJsonConfig fjc = new FastJsonConfig();    // 配置序列化策略    fjc.setSerializerFeatures(SerializerFeature.BrowserCompatible);    fastJsonConverter.setFastJsonConfig(fjc);    converters.add(fastJsonConverter);}

JackJson 处理方式

方式一

/ 注解处理,这里可以配置公共 baseEntity 处理@JsonSerialize(using=ToStringSerializer.class)public long getId() {    return id;}

方式二

/ 全局配置序列化返回 JSON 处理final ObjectMapper objectMapper = new ObjectMapper();SimpleModule simpleModule = new SimpleModule();simpleModule.addSerializer(Long.class, ToStringSerializer.instance);objectMapper.registerModule(simpleModule);
5:插入或更新的字段有 空字符串 或者 null

FieldStrategy 有以下策略:

方式一:调整字段验证注解

根据具体情况,在需要更新的字段中调整验证注解,如验证非空:

@TableField(strategy=FieldStrategy.NOT_EMPTY)

方式二:使用 UpdateWrapper (3.x)

使用以下方法来进行更新或插入操作:

//updateAllColumnById(entity) // 全部字段更新: 3.0已经移除mapper.update(   new User().setName("mp").setAge(3),   Wrappers.lambdaUpdate()           .set(User::getEmail, null) //把email设置成null           .eq(User::getId, 2));//也可以参考下面这种写法mapper.update(    null,    Wrappers.lambdaUpdate()       .set(User::getAge, 3)       .set(User::getName, "mp")       .set(User::getEmail, null) //把email设置成null       .eq(User::getId, 2));
6:字段类型为 bit、tinyint(1)时映射为 boolean 类型

默认mysql驱动会把tinyint(1)字段映射为boolean: 0=false, 非0=true。MyBatis 是不会自动处理该映射,如果不想把tinyint(1)映射为boolean类型:

修改类型tinyint(1)为tinyint(2)或者int。

需要修改请求连接添加参数 tinyInt1isBit=false,如下:

jdbc:mysql://127.0.0.1:3306/mp?tinyInt1isBit=false

7:MP 如何查指定的几个字段

EntityWrapper.sqlSelect 配置你想要查询的字段

//2.xEntityWrapper ew = new EntityWrapper<>();ew.setSqlSelect("test_id as id, name, age");//只查询3个字段List list = userService.selectList(ew);for(H2User u:list){    Assert.assertNotNull(u.getId());    Assert.assertNotNull(u.getName());    Assert.assertNull(u.getPrice()); // 这个字段没有查询出来}//3.xmapper.selectList(    Wrappers.lambdaQuery()    .select(User::getId, User::getName));//或者使用QueryWrappermapper.selectList(    new QueryWrapper()    .select("id","name"));
8:Cause: org.apache.ibatis.type.TypeException:Error setting null for parameter #1 with JdbcType OTHER

配置 jdbcTypeForNull=NULL Spring Bean 配置方式:

MybatisConfiguration configuration = new MybatisConfiguration();configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);//开启下划线转驼峰sqlSessionFactory.setConfiguration(configuration);

yml配置

mybatis-plus:  configuration:    jdbc-type-for-null: "null"
9:通用 insertBatch 为什么放在 service 层处理

SQL 长度有限制海量数据量单条 SQL 无法执行,就算可执行也容易引起内存泄露 JDBC 连接超时等

不同数据库对于单条 SQL 批量语法不一样不利于通用

目前的解决方案:循环预处理批量提交,虽然性能比单 SQL 慢但是可以解决以上问题。

10:启动 mybatis 本身的 log 日志

# 方式一mybatis-plus:  configuration:    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 方式二 application.yml 中增加配置,指定 mapper 文件所在的包logging:  level:    com.baomidou.example.mapper: debug

这些问题都是摘自Mybatis-Plus的官方网站地址如下:

https://www.baomidou.com/pages/f84a74/

如果想看更多的问题请访问上面的网址,当然更多的问题也可以访问Mybatis-Plus的github地址那里面有很多人提的issue。很多开发中遇到的问题都可以在issue里面找到答案,我也是常常去看那里的issue从里面获取答案获取灵感。欢迎大家关注我的微信公众号,继续为大家推出好的文章。

晚霞和微风是真的很美。

标签:

(责任编辑:news01)

南京智慧工厂赋能,深蓝S7会成为爆款吗?|当前快看

作为深蓝汽车首款中型SUV,深蓝S7自5月20日开启预定以来受到很多消费者的关注,特别是订单火爆远超预期。11
06-03 19:01:24

上交所:2023年6月5日上市交易科创50ETF期权

上交所:2023年6月5日上市交易科创50ETF期权,期权,科创,上交所,易方达基金,50etf,转融资费率,上海证券交易所
06-03 18:06:33

视点!印度奥迪沙邦列车相撞事故已致超300人死亡

每经AI快讯,6月3日,据印度NDTV公布的数据,2日发生的奥迪沙邦列车相撞事故已造成300多人死亡,1000多人受伤,
06-03 16:59:41

中学生报教研周刊怎么样_中学生报教研周刊 世界时快讯

1、是。2、《中学生报》是中国教育界最富影响力的校园主流媒体之一,创刊于1981年。3、2006年被国家新闻出
06-03 16:19:23

东方2023“健康人生·绿色无毒”“防毒护苗”全民禁毒宣传月启动

东方2023“健康人生·绿色无毒”“防毒护苗”全民禁毒宣传月启动新海南客户端、南海网、南国都市报6月3...
06-03 15:20:11

最新快讯!刺身拼盘有哪些食材

刺身拼盘的食材有:鳕鱼、真鲷、黄立鲳、赤贝、金枪鱼、章鱼、三文鱼、海胆(木盒装)、大叶、白萝卜丝、红海
06-03 14:40:14
海南的红薯为什么好吃?

海南的红薯为什么好吃?

海南的红薯为什么好吃?这个问题也要一分为二地看待。红薯好不好吃,关键在于土壤和品种。记得今年我出岛旅
06-03 14:02:29
赫内斯:曾告知萨利谨慎出售莱万 新中锋?穆阿尼&奥斯梅恩都很棒|环球看热讯

赫内斯:曾告知萨利谨慎出售莱万 新中锋?穆阿尼&奥斯梅恩都很棒|环球看热讯

直播吧6月3日讯拜仁今夏的补强重点将是9号位,在日前的采访中赫内斯也确认这一点并谈到了一些绯闻对象,他
06-03 12:37:07
雪峰山森林公园_雪峰山|全球播资讯

雪峰山森林公园_雪峰山|全球播资讯

1、雪峰山(Hsueh-feng亦作Xuefeng)因山顶长年积雪而得名。2、雪峰山脉主体位于湖南中部和西部,是湖南境内
06-03 11:52:01
兴城菊花岛民宿多少钱_兴城菊花岛

兴城菊花岛民宿多少钱_兴城菊花岛

1、从兴城市内打车最多就15元到海滨公园了,海滨公园在岸边,从正门进去,你就会看到菊花女的石像,走到菊
06-03 10:59:40
西平县召开碳汇开发合作项目洽谈会_当前快看

西平县召开碳汇开发合作项目洽谈会_当前快看

西平县召开碳汇开发合作项目洽谈会6月1日下午,西平县召开碳汇开发合作项目洽谈会。县政府党组成员黄广有出
06-03 10:08:21
焦点热门:节食减肥怎样防止反弹 节食减肥怎样防止反弹的方法

焦点热门:节食减肥怎样防止反弹 节食减肥怎样防止反弹的方法

1、节食减肥想要不反弹可以在减肥期间多做有氧运动,并辅以一定的低热量饮食,饱腹才可达到最佳减肥效果。
06-03 09:31:15
环球精选!什么是普通话100字

环球精选!什么是普通话100字

1、“普通话”这一词对每一个人都不陌生。2、其实,“普通话”这个词早在清末就出现了。3、普通话对于每...
06-03 08:35:14
汇成股份:连续3日融资净买入累计452.19万元(06-02)

汇成股份:连续3日融资净买入累计452.19万元(06-02)

2023年6月2日汇成股份连续3日融资净买入累计452 19万元
06-03 07:50:04
全球观焦点:确权之诉怎么操作_确权之诉

全球观焦点:确权之诉怎么操作_确权之诉

1、第三方可以提出确权之诉,主张房屋系家庭共有财产要求分割。2、具体的证据证明事宜需联系律师面谈。本文
06-03 06:54:38
给孩子一个“明亮”的未来 世界新要闻

给孩子一个“明亮”的未来 世界新要闻

央视网消息:近年来,近视在低龄群体中多发,2020年我国儿童青少年总体近视率52 7%,防控近视刻不容缓。一
06-03 06:42:10
不黑不吹,CX-50行也真的是15-20万级别无对手的存在

不黑不吹,CX-50行也真的是15-20万级别无对手的存在

在SUV占绝对主导的国内车市,虽然每年都有大量的新款SUV诞生,但在销量和认可度上看,传统大厂依旧是中流砥
06-03 05:40:44
新资讯:华润水泥控股(01313.HK):6月2日南向资金增持27.2万股

新资讯:华润水泥控股(01313.HK):6月2日南向资金增持27.2万股

6月2日北向资金增持27 2万股华润水泥控股(01313 HK)。近5个交易日中,获南向资金增持的有5天,累计净增持
06-03 04:21:21
每日精选:湖北省高考志愿查询入口_湖北省高考志愿查询

每日精选:湖北省高考志愿查询入口_湖北省高考志愿查询

1、买一张查询卡就行了,激活以后不限次数。2、很方便的。3、或者打10000问电信的,好像现在还开通了状态查
06-03 03:16:34
内江发布一批人事任免|天天观天下

内江发布一批人事任免|天天观天下

川观新闻记者陈宇日前,内江市人民政府发布关于李焰等同志职务任免的通知。内江市人民政府决定:李焰同志为
06-03 02:16:28
电脑老掉线_电脑老掉线 世界观天下

电脑老掉线_电脑老掉线 世界观天下

1、现在人们的生活水平不断提高,电脑已经成为生活中必不可少的电子产品。用电脑上网办公、学习、娱乐,既
06-03 01:05:28
6月2日龙虎榜解析:创维数字当日净买入额最多 天天简讯

6月2日龙虎榜解析:创维数字当日净买入额最多 天天简讯

经传多赢股票讯6月2日最新龙虎出炉,创维数字(000810)、旗滨集团(601636)、融捷股份(002192)为当日龙
06-03 00:57:05
如何使用U盘重装联想拯救者R7000P?联想拯救者R7000最新U盘重装教程

如何使用U盘重装联想拯救者R7000P?联想拯救者R7000最新U盘重装教程

拯救者R7000P是联想旗下一款高性价比型号笔记本,该笔记本不仅核显模式下续航较好,且支持140W充电,还标配
06-03 00:48:13
人民银行营管部发文加强征信合规管理 要求对高发征信合规问题开展自查和整改_全球观点

人民银行营管部发文加强征信合规管理 要求对高发征信合规问题开展自查和整改_全球观点

上证报近日获悉,中国人民银行营业管理部(北京)征信管理处下发了《关于加强征信管理合规的通知》,要求各
06-02 22:41:55
全球视点!北京水立方端午节参观门票多少钱?

全球视点!北京水立方端午节参观门票多少钱?

北京水立方端午节参观门票多少钱?1 散客:票价全价30元;半价15元2 旅行社团队:全价21元;半价15元3 预约购
06-02 22:33:23
当前消息!擎天柱、擎天圣打卡三里屯!《变形金刚》全球巡展登陆北京

当前消息!擎天柱、擎天圣打卡三里屯!《变形金刚》全球巡展登陆北京

擎天柱、擎天圣穿越银幕,走进现实!《变形金刚:超能勇士崛起》全球雕像巡展登陆北京三里屯太古里!
06-02 21:24:30
一位付费API工程师如何制造了推特今年第七次崩溃?-世界聚看点

一位付费API工程师如何制造了推特今年第七次崩溃?-世界聚看点

大数据文摘出品作者:Caleb推特的“闹剧”还在继续。3月6日,当推特用户像平常那样打开APP后,却发现很...
06-02 20:56:11
全球热门:“AI换脸”软件公开网售,几百至上千元不等!法律边界在哪?

全球热门:“AI换脸”软件公开网售,几百至上千元不等!法律边界在哪?

”专家:有效的标识监管体系能提前厘清“AI换脸”带来的模糊边界‍北京嘉维律师事务所律师、IT法律专家...
06-02 19:47:42
如何将歌曲下载到u盘_u盘如何下载歌曲

如何将歌曲下载到u盘_u盘如何下载歌曲

1、①首先插上我们的U盘,②我这里以酷狗音乐为例,一般酷狗下载的歌曲存放在D盘的KuGou文件夹里。2、点击
06-02 18:56:13
1.2万紫花苜蓿喜获丰收 “牧草之王”种植拓宽农户致富新渠道

1.2万紫花苜蓿喜获丰收 “牧草之王”种植拓宽农户致富新渠道

央视网消息:初夏时节,在新疆伊犁州伊宁县的1 2万亩草场上,人工种植的紫花苜蓿进入了收割期。据介绍,紫
06-02 18:19:23

为您推荐

精彩推送