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

xxls0lw8  于 2023-06-04  发布在  Mysql
关注(0)|答案(7)|浏览(991)

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

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

有没有可能,以及如何编写SELECT SQL?(可以使用现有的?)

esyap4oy

esyap4oy1#

是的,您可以使用EXISTS

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

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

fcy6dtqo

fcy6dtqo2#

我终于找到了解决办法:

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);
}
kxeu7u2r

kxeu7u2r3#

当我重新辨认正确或错误时,请选择0或1,以便使用COALESCE。求你恢复你的勇力,当你的勇力无效,你的勇力也无效,你的勇力也无效。保证你的咨询回复一定要登记。
为了让mybatis识别true或false,select应该返回0或1,为此我们使用COALESCE。查询返回值1,当它返回null时,合并返回0。确保查询只返回一条记录。

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

xoefb8l84#

这里是:

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

2eafrhcq5#

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

kknvjkwl

kknvjkwl6#

@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)
xzabzqsa

xzabzqsa7#

与Zach的回答类似,对于DB2,您必须使用CASE。代码是旧的,使用的是mapper.xml文件,而不是注解。

<select id="isBenefitPatternAReviewGroup" resultType="boolean">

SELECT   Distinct
                CASE
                WHEN VAL > 0 THEN 'true'
                ELSE 'false'
                END
        FROM (
            SELECT  count(*) AS VAL
            FROM table_user 
            WHERE email=#{email}
;

</select>

相关问题