`
朱秋旭
  • 浏览: 231056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mybatis中selectOne方法存在的坑

阅读更多

 

开门见上,先来看看selectOne方法的源代码 

 

 

通过源码我们清晰的看到,selectOne调用了selectList方法,当selectList方法返回值的size小于1 的时候,selectOne方法会返回null值。我们再来看一下mybatis的xml. 

 

 

 

如果你写了resultType为Integer,然后在业务代码中很自然的用一个变量int去接当前这个方法的返回值:int id = dao.methodName(param);如果按照你传入的条件在数据库中没有找到相关的值,此时selectOne方法的返回值会是一个null,当你使用Java的自动拆箱机制的时候会报出一个无情的NPE。
原因:Java在自动拆箱的时候会调用Integer类中的intValue方法,如果当前对象为null,则抛出NPE。
所以我们在使用mybatis的这个selectOne方法的时候一定要多加小心。不要踩到坑里。


怎么破: 用一个Integer去接一次返回值,然后判断是否为空,然后再进行具体的业务逻辑处理。但是!但是!但是!如果把resultType写成int,呵呵,恐怕无解了。

2
2
分享到:
评论
2 楼 朱秋旭 2014-09-19  
jeffsc 写道
最后一句话是什么意思

mybatis里面的select标签的xml ,如果里面的returnType写成了int,那么直接在selectOne方法返回的时候就已经做拆箱了,直接NPE了,你根本没有用变量去接一下,然后判断是不是null值的机会。
1 楼 jeffsc 2014-09-19  
最后一句话是什么意思

相关推荐

    MyBatisPlusselectById、selectOne、selectBatchIds、selectByMap、selectPage的使用示例代码

    在这个示例代码中,我们将深入探讨`selectById`、`selectOne`、`selectBatchIds`、`selectByMap`以及`selectPage`这五个查询方法的使用。 1. `selectById`方法: 这个方法用于根据主键ID获取单条数据。在...

    Mybatis中执行String类型的自己拼写的sql,不执行配置文件中的sql

    这时,我们可以使用`SqlSession`对象的`selectList`, `selectOne`, `insert`, `update`, `delete`等方法,配合`Statement`类型来执行自定义的SQL字符串: ```java String sql = "SELECT * FROM users WHERE name ...

    spring与mybatis三种整合方法

    - DAO接口和实现类中的方法可以直接调用`getSqlSession().selectOne()`等方法执行SQL。 这三种整合方法各有优缺点。注解方式简单快捷,但可能使得业务逻辑和数据访问混合;XML配置方式则更灵活,适合大型项目,但...

    MyBatis中文参考文档

    3. 执行SQL:调用SqlSession的方法,如selectOne、selectList、insert、update和delete,它们对应于SQL的CRUD操作。 4. 关闭资源:操作完成后,关闭SqlSession和SqlSessionFactory。 四、MyBatis注解使用 1. @...

    MyBatisDemo

    在Java代码中,可以通过`SqlSession.selectOne()`或`SqlSession.selectList()`执行查询。如果查询结果是唯一的,`selectOne()`会自动封装成对象返回。 3. **更新(UPDATE)**: 更新数据涉及到修改已存在记录。在...

    mybatis-plus getOne和逻辑删除问题详解

    这篇文章将详细讲解MyBatis-Plus中的`getOne`方法以及如何实现逻辑删除。 `getOne`方法是MyBatis-Plus提供的一种便捷的获取单个实体对象的方法。当我们在查询数据库时,如果预期结果只有一条记录,可以直接使用`get...

    Mybatis-plus相关操作.pdf

    Mybatis-plus的CRUD操作主要包括:insert、update、delete、select方法。insert方法用于添加数据,update方法用于更新数据,delete方法用于删除数据,select方法用于查询数据。 Mybatis-plus支持多种查询条件构造器...

    Mybatis3Demo

    例如,`@Select`, `@Insert`, `@Update`, `@Delete`这些注解可以直接在Mapper接口的方法上使用,简化了映射文件的编写。 3. **一对一关系映射**(mybatis03_one2one.rar) 在mybatis03_one2one.rar中,演示了一对...

    mybatis-plus案例 方法 一系列配置 增删改查

    - `selectOne()`:通过Wrapper构造查询条件,返回单条数据。 使用Lambda表达式可以进一步简化代码,例如: ```java User user = userMapper.selectOne(User::getId.eq(1)); List<User> userList = userMapper....

    求救!!mybatis Expected one result (or null) to be returned by selectOne(), but found:18

    Expected one result (or null) to be returned by selectOne(), but found:18 下面展示一些 mapper.xml。 SELECT st.title as titlest ,st.info_text as info_text , sbt.title as titlesbt,sbt.icon as icon...

    MyBatis(四)

    2. 调用Mapper接口方法:通过SqlSession的`selectOne`或`delete`方法执行删除操作。由于我们的操作是删除,所以应该调用`delete`方法。 ```java UserMapper mapper = sqlSession.getMapper(UserMapper.class); ...

    Mybatis执行SQL语句的方式

    Mybatis 执行 SQL 语句的方式 ...我们也可以使用 selectOne 方法和 selectList 方法来执行 SQL 语句。 Mybatis 提供了多种方式来执行 SQL 语句,开发者可以根据需要选择合适的方式来实现业务逻辑。

    mybatis-3.5.9 源码(mybatis-3-mybatis-3.5.9.zip)

    - SqlSession 提供了执行 SQL 语句和管理事务的方法,例如:selectOne、insert、update 和 delete。 2. **Mapper 接口与 XML 映射文件** - MyBatis 允许开发者定义自己的 Mapper 接口,每个方法对应一个 SQL 语句...

    mybatis运行Jar包

    SqlSession提供了与数据库交互的方法,如execute(用于执行SQL语句)、insert(用于插入数据)、update(用于更新数据)、delete(用于删除数据)以及selectList(用于查询列表)、selectOne(用于查询单个对象)等...

    MyBatis使用手册(中文版)3.4.4版

    9. **SQL执行**:使用SqlSession的selectOne、selectList、insert、update和delete方法执行SQL操作。注意,对于可能返回多条结果的selectOne,如果没有找到结果会抛出异常。 10. **MyBatis Generator**:这是一个...

    mybatis 基础代码(非spring)

    - `select`:查询操作可以是单个记录或多个记录,可以使用`selectOne`或`selectList`方法,同时可以利用MyBatis的动态SQL功能进行条件判断。 5. **关联查询**: - MyBatis支持一对一、一对多、多对多等关联查询。...

    mybatis基本例子的简单实现

    5. **使用SqlSession执行SQL**:在Java代码中,通过SqlSessionFactory创建SqlSession对象,然后调用SqlSession的selectOne()或selectList()方法执行SQL。例如: ```java SqlSession session = sqlSessionFactory....

    【免费】mybatis3.2.3所需的jar包+mybatis3.2.3中文帮助文档+mybatis-config.dtd

    Map, Object> person = session.selectOne("org.mybatis.example.PersonMapper.selectPerson", 101); System.out.println(person); } ``` MyBatis的强大之处在于它的灵活性和可扩展性,你可以根据项目需求自定义...

    springmybatis

    User user = (User) session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1); System.out.println(user.getUserAddress()); System.out.println(user.getUserName()); } finally { ...

Global site tag (gtag.js) - Google Analytics