今天处理一个生产环境报NullPointerException的问题,根据查询的对象,获得对象中的一个字段,结果为空。
报错位置:int partnerCode = servicefeeRecord.getPartnerCode().intValue();
(注:本身这直接取字段不判断是否为空,就获得它的int值。写法本身就有点问题,虽然业务上这个字段一定存在。)
定位问题步骤:
1、查看生产数据库,对象对应的数据改字段是有值的。
为啥没查出来?继续找问题。
2、从源头定位起,从查询对象的service方法,找到dao方法,再找到mapper文件里面的查询sql。
sql查询字段中并没有包括需要的字段。
原来问题在此,那怎么会有这个坑呢?
3、根据最近了解的其他人做相关需求的变动,原来在于有同事做需求拓展时,只在数据库表增加该字段、在实体bean增加该字段,mapper文件中的sql查询,没有增加改字段导致。
总结:
1、原本很简单的问题,却花费大半个小时来处理问题,以及帮别人填坑,实属无奈。
2、开发人员工作的严谨性,相当重要,如果考虑不全,不单单影响到自己,甚至影响到其他人。
3、基于Mybatis的应用:数据库表增加一个字段,还要改哪些地方?
a、写sql脚本修改表结构
b、实体bean增加对象
c、mapper中所有涉及查询整个对象字段的sql,都需一一添加对应的新增字段
d、mapper配置中涉及整个对象的查询尽量采用以下方式:
<sql id="queryColumns">
Column1,Column2,Column3,....
</sql>
<select id="查询方法名称" resultMap="返回结果对象">
SELECT
<include refid="queryColumns" />
FROM
...
</select>
这样很多类似查询,都是引用queryColumns,到时只需改一个地方即可。
相关推荐
Tk MyBatis提供了更简洁的接口设计和更强大的功能,而MyBatis Plus则是一个对MyBatis的扩展,简化了基本的 CRUD 操作,无需编写大量的Mapper和Service代码。 在MyBatis中,我们通常使用XML映射文件或注解来定义SQL...
在MyBatis测试环境中,我们通常会创建一个或多个数据库表,这些表的设计应符合业务需求,并且与MyBatis的Mapper接口和XML配置文件相对应。 1. **MyBatis与数据库连接**:MyBatis通过JDBC驱动与数据库建立连接。在...
MyBatis是一个基于Java的持久层框架,提供了一个简洁的方式来访问数据库。它提供了一个灵活的方式来映射Java对象到数据库表,并提供了一个强大的SQL映射语言来定义SQL语句。在本实例中,使用了MyBatis来实现数据库...
在本项目中,`MpGenerator.java`很可能是一个基于Mybatis-Plus的代码生成工具。Mybatis-Plus是Mybatis的一个扩展,提供了更多的便捷功能,如自动填充字段、条件构造器等。使用这个工具,开发者可以快速生成实体类...
Mybatis-plus是一个基于Mybatis和Spring的轻量级框架,主要目标是简化对数据库的常规操作,例如增、删、改、查(CRUD),它提供了更为方便的API,使得开发者能够更高效地进行数据库操作。这个框架在Mybatis的基础上...
MyBatis Generator(MBG)是一款强大的工具,它允许开发者基于数据库中的表自动创建Java模型类、Mapper接口以及对应的XML映射文件。这款插件极大地简化了开发过程,避免了手动编写这些重复性的代码,提高了开发效率...
【C#代码生成器源码-基于MyBatis.NET】是一个专为开发人员设计的工具,主要用于自动化C#代码的生成工作,特别是针对SQLServer数据库的项目。它利用了MyBatis.NET框架的强大功能,帮助开发者快速构建常规的三层架构...
基于MyBatis的留言本是一个简单的Web应用程序,它允许用户添加、查看、编辑和删除留言。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。使用MyBatis可以避免几乎所有的JDBC代码和手动设置...
在Java开发中,尤其在基于Oracle或MySQL数据库的项目中,使用MyBatis作为持久层框架时,手动编写数据库表的实体类、MyBatis接口和对应的XML文件是一项耗时且容易出错的工作。为了解决这个问题,开发者通常会利用代码...
在本项目中,"springMVC+mybatis实现登录和增删改查"是一个典型的Web应用程序,它结合了SpringMVC、MyBatis两大主流框架,以及Bootstrap前端库,来构建一个用户友好的数据管理平台。以下是这个项目涉及到的主要知识...
但如果我们要实现更复杂的逻辑,比如基于数据库字段本身的值进行查询,`<if>`标签就显得有些局限了。 对于某些场景,我们可能需要在不依赖传递参数的情况下,根据数据库字段的值进行查询。比如,查询定时显示的轮播...
【标题】"一个小的jsf+mybatis的项目"揭示了这是一个基于Java Server Faces (JSF) 和 MyBatis 框架构建的轻量级Web应用。JSF是Java平台上的一个用于构建用户界面的MVC(模型-视图-控制器)框架,而MyBatis则是一个...
基于 Java 的企业级应用开发:MyBatis 的核心配置 ...本资源详细介绍了 MyBatis 框架的核心配置,包括 SqlSessionFactory、SqlSession、映射文件等内容,为开发者提供了一个基于 Java 的企业级应用开发的解决方案。
在数据库层面上,这通常通过为每个租户创建独立的表或视图,或者通过在公共表中添加一个租户标识字段来实现。 在基于Mybatis-Plus的项目中实现多租户,我们需要考虑以下几个关键步骤: 1. **租户标识**:确定用于...
Mybatis逆向工程是开发过程中一个非常实用的工具,它能帮助开发者自动生成与数据库表对应的Java实体类(POJO)、Model以及Mapper接口和XML配置文件,极大地提高了开发效率。这个插件包专为MySQL数据库设计,使得在...
"基于单表的增删改查(jsp+servlet版)"是一个典型的Java Web应用实践,主要用于理解和掌握如何通过JSP(JavaServer Pages)和Servlet来实现数据库中的数据操作。在这个项目中,我们将深入探讨JSP和Servlet在实现...
MyBatis是一个强大的Java持久层框架,它允许开发者将SQL语句与Java代码分离,以更灵活的方式处理数据库操作。关联映射是MyBatis中处理对象与对象间关联关系的关键特性,尤其在企业级应用开发中,面对复杂的数据库表...
2. **自定义插件**:通过创建一个 MyBatis 插件,我们可以拦截 SQL 语句,并在执行时动态修改 SQL,对敏感字段进行脱敏处理。这样,无论何时执行涉及敏感数据的 SQL,都可以自动应用脱敏规则。 二、实现步骤 1. **...
### MyBatis应用技术知识点详解 #### 一、MyBatis简介 - **定义**: MyBatis 是一个优秀的持久层框架,它简化了 JDBC 的操作流程,使开发者能够更专注于 SQL 语句的编写,而无需关注底层的数据库连接、预处理及结果...
【标题】"mybatis逆向工程(通过数据库生成java实体类)"所涉及的知识点主要集中在MyBatis框架的逆向工程(Reverse Engineering)上,这是一个强大的功能,它可以帮助开发者快速生成基于数据库表的Java实体类、Mapper...