当前位置: 首页 > news >正文

org.apache.ibatis.ognl.OgnlException

org.apache.ibatis.ognl.OgnlException异常出在mybatis框架执行动态SQL时的场景,常见的情况是mapper接口的对象参数为空,或是mapper接口参数对象没有指定的属性,构建测试代码和数据

一 测试数据

CREATE TABLE `book` (`id` int NOT NULL,`book_name` varchar(32) DEFAULT NULL,`book_type` varchar(32) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

二 测试代码

@PostMapping("/queryBookListOne")
public List<Book> queryBookListOne(@RequestBody BookReq bookReq) {return bookService.queryBookListOne(bookReq);
}
public interface IBookService extends IService<Book> {List<Book> queryBookListOne(BookReq bookReq);
}@Service
public class BookServiceImpl extends ServiceImpl<BootBookMapper, Book> implements IBookService {@Autowiredprivate BootBookMapper bookMapper;@Overridepublic List<Book> queryBookListOne(BookReq bookReq) {return bookMapper.queryBookListOne(bookReq);}}
@Mapper
public interface BootBookMapper extends BaseMapper<Book> {List<Book> queryBookListOne(@Param("bookReq") BookReq bookReq);
}<select id="queryBookListOne" resultType="com.unique.domain.Book">select * from bookwhere 1=1<if test="bookReq.bookType != null and bookReq.bookType != null">and book_type = #{bookReq.bookType}</if>
</select>
@TableName("book")
public class Book {private Integer id;private String bookName;private String bookType;
}@Data
public class BookReq {private String bookName;
}

2.1 mapper接口参数对象没有指定的属性

在动态SQL的if标签中有判断BookReq类的bookType属性,但是在BookReq类中却没有bookType属性,那么就会报org.apache.ibatis.ognl.OgnlException异常

org.apache.ibatis.ognl.NoSuchPropertyException: com.unique.vo.BookReq.bookTypeat org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164) ~[mybatis-3.5.7.jar:3.5.7]at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3373) ~[mybatis-3.5.7.jar:3.5.7]

在BookReq类中加上bookType属性,则接口就会调用正常

@Data
public class BookReq {private String bookName;private String bookType;
}

2.2 mapper接口调用参数为空

@Override
public List<Book> queryBookListOne(BookReq bookReq) {return bookMapper.queryBookListOne(null);
}
org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "bookType")at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3366) ~[mybatis-3.5.7.jar:3.5.7]

在调用mapper接口时,传入的参数是null值就会报org.apache.ibatis.ognl.OgnlException,可以根据业务逻辑,适当的再加上mapper接口参数对象不等于空的校验

<select id="queryBookListOne" resultType="com.unique.domain.Book">select * from bookwhere 1=1<if test="bookReq != null and bookReq.bookType != null and bookReq.bookType != null">and book_type = #{bookReq.bookType}</if>
</select>

2.3 小结

在业务代码中,完善非空校验,并且确保mapper接口参数和动态SQL中使用到的属性保持一致

http://www.dtcms.com/a/590756.html

相关文章:

  • 电子商务网站建设计划书如何推广我的网站
  • 成功案例 品牌网站宣传推广方案怎么写
  • 响应式网站和普通网站不同广告制作行业
  • 线程相关知识(java)
  • 我用python+C++写了个密码检测引擎,学完这个项目理解底层算法
  • 网站设计宁波苏州那家公司做网站比较好
  • 天津网站快速排名提升网络推广外包哪家好
  • 网站定制开发四大基本原则北京品牌网站建设公司排名
  • 青岛开发区建网站公司街道网站建设
  • 泉州app网站开发价格网上购物系统源码
  • 宜兴做阿里巴巴网站医学ppt模板免费下载网站
  • 做公司简介网站营销100个引流方案
  • wordpress建站什么意思网站建设概念
  • 怎样把网站做的更好品牌建设模型
  • 宠物网站 模板发视频的网址网址是什么?
  • 什么网站可以帮人做ppt赚钱wordpress分享QQ插件
  • C# 接口隔离的一个案例
  • 云台全景监控智能安防系统
  • vps架设好网站访问不了漳州手工外发加工网
  • 专业购物网站成都推广运营公司
  • IB与RoCE:谁是AI智算中心内更好的“桥梁”?
  • 门户网站建设和管理情况自查企业查询系统官网天眼查
  • 网站的排版好看晋州 网站建设 网络推广
  • pc网站开发微信支付微信电影网站怎么做
  • 海北州网站建设公司wordpress 吃cpu
  • 深入解析gRPC C++动态反射:实现Proto消息的智能字段映射
  • 龙华区城市建设局网站wordpress标签大全文档
  • 做汽车价格的网站建设成都营销策划公司排行榜
  • Redis分布式锁:从理论到实践的全方位解析
  • MySQL索引优化实战:原则速查与踩坑案例(实战篇)