Mysql 尝试理解Kotlin中的SQL查询,以便在数据库查询返回空集时返回null

Mysql 尝试理解Kotlin中的SQL查询,以便在数据库查询返回空集时返回null,mysql,kotlin,mybatis,Mysql,Kotlin,Mybatis,我正在阅读一个现有的私有项目代码,但是我不理解一些关于SQL查询的Kotlin代码 以下是DAO声明: interface UserMapper { @Select("SELECT userId, phoneNumber FROM users WHERE phoneNumber=#{number} LIMIT 1") fun getUserByPhoneNumber(number: String?): User } 用户的定义如下: public class User {

我正在阅读一个现有的私有项目代码,但是我不理解一些关于SQL查询的Kotlin代码

以下是DAO声明:

interface UserMapper {

    @Select("SELECT userId, phoneNumber FROM users WHERE phoneNumber=#{number} LIMIT 1")
    fun getUserByPhoneNumber(number: String?): User
}
用户的定义如下:

public class User {

        private int userId;
        private String phoneNumber;
}
那么我就这样称呼它:

val user = userMapper!!.getUserByPhoneNumber(phonenumber)
if (user != null) {
    doSomething()
} else {
    doOtherthing()
}
第一个问题是关于函数getUserByPhoneNumber,它只是返回用户对象吗

第二个是关于构建警告:

[WARNING] Condition 'user != null' is always 'true'
当查询数据库中不存在的用户时,如何解决此问题以处理这种情况

[更新]:

这是mybatis spring的用户映射用法,参考文档是,第一个问题是关于函数getUserByPhoneNumber的,它只是返回用户对象吗

Yes getUserByPhoneNumber只返回一个对象。实际上,这取决于您的Select查询

第二个是关于构建警告

您正在从getUserByPhoneNumber返回不可为null的用户,并且正在检查null,这就是此警告的原因

要删除警告,只需添加?返回类型用户,如下所示:

interface UserMapper {

    @Select("SELECT userId, phoneNumber FROM users WHERE phoneNumber=#{number} LIMIT 1")
    fun getUserByPhoneNumber(number: String?): User?

}

希望能有帮助。如果您还有其他问题,请告诉我。

1。我们不知道您使用哪个框架/API来执行这些查询。2.number参数的类型应为String,而不是String?,因为传递null没有意义。3.如果框架/API在结果集为空时返回null,则返回类型应为User?,而不是User。这是springframework。数字是字符串。它不是Spring框架。请参阅:它没有任何选择类。不,数字不是字符串类型。它的类型是String?。阅读您的代码。谢谢,用户?请务必删除生成警告。当查询返回空集时,我将检查返回的用户对象是否为null。仍然对getUserByPhoneNumber函数返回对象感到困惑,它如何知道它是一个用户对象?如果我的类用户定义与select查询不同,会发生什么?例如,如果我从phoneNumber={number}限制的用户中将select更改为@SelectSELECT userId1@gary要知道这一点,您需要知道正在使用哪个SQL对象映射器,然后阅读它的文档。我猜是MyBatis:。你的队友们能给你介绍一下这个项目吗?是的,我在pom.xml中找到了mybatis 3.3.0,谢谢你的提示,这是一个很长的依赖列表,很难找到。不幸的是,作者已经离开了公司,所以没有队友知道这段代码。@gary无论您在select查询中选择了什么值,同名变量都应该在类中或使用@ColumnInfo注释。若Room编译器发现任何不一致的地方,我想可能会出现编译时错误。查看谷歌开发者网站上的官方文档,它非常简单,有几个例子。