繁体   English   中英

Mybatis:如何检查一行是否存在并返回一个布尔值?

[英]Mybatis: how to check if a row exists and return a boolean?

数据库是 MySQL。 代码应如下所示:

public interface UserMapper {
    @Select("....")
    boolean checkUserExists(@Param("email") String email);
}

是否有可能,以及如何编写 SELECT SQL? (可以使用 Exists 吗?)

是的,您可以使用EXISTS

@Select("SELECT EXISTS(SELECT 1 FROM my_table WHERE email=#{email})")
boolean checkUserExists(@Param("email") String email);

请注意,“SELECT 1”是有原因的,您不需要选择任何实际列

我终于找到了解决方案:

public interface UserMapper {
    @Select("SELECT " 
           + " CASE WHEN Count(email)>0 THEN 1 " 
           + " ELSE 0 END Result "
           + " FROM TUser "
           +"  WHERE email=#{email}")
    boolean checkUserExists(@Param("email") String email);
}

这是:

 SELECT * 
    FROM information_schema.COLUMNS 
    WHERE 
        TABLE_SCHEMA = 'db_name' 
    AND TABLE_NAME = 'table_name' 
    AND COLUMN_NAME = 'column_name'

您可以在Mapper中返回用户列表,并检查List的大小是否大于0。

Para o mybatis reconhecer verdadeiro ou falsa,Este select deve retornar 0 ou 1,para isso usamos COALESCE。 a consulta restorna o valor 1 e quando retorna null o coalesce retorna 0. Garanta que sua consulta retorno somente um registro。

对于mybatis识别true或false,此select应返回0或1,为此我们使用COALESCE。 查询返回值1,当它返回null时,coalesce返回0.确保查询只返回一条记录。

public interface UserMapper {
    @Select("SELECT COALESCE ((SELECT 1 FROM TUser WHERE email=#{email}), 0) ")
    boolean checkUserExists(@Param("email") String email);
}

@Select("SELECT EXISTS(SELECT 1 FROM my_table WHERE email=#{email})") boolean checkUserExists(@Param("email") String email);

没有必要使用 FUNC "EXSITS(...)"。

通常,我喜欢这样。

@Select("select 1 from my_table where email = #{email} limit 1")
Optional<Boolean> checkUserExists(@Param("email") String email)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM