sql判断是否存在新思路

sql判断是否存在新思路

参考网址:

https://mp.weixin.qq.com/s?__biz=MzUxOTc4NjEyMw==&mid=2247498609&idx=2&sn=6cf9167490171278bfa2ddab8285f232&chksm=f9f6e095ce816983da219836d9c637be330f84dfd300e06ad5b5e5f45e72f7943bb8cbdb90d2&mpshare=1&scene=23&srcid=1224G1UwGWcxpfF7nbmPnrsH&sharer_sharetime=1608823361666&sharer_shareid=9d1e76e919cc0b2f3ca23ed1f5ef67a8%23rd

1.之前的写法

  • sql写法
SELECT count(*) FROM table WHERE a = 1 AND b = 2

  • java代码
int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
  //当存在时,执行这里的代码
} else {
  //当不存在时,执行这里的代码
}

2.第一种写法(select 常量)

  • sql写法
SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1

  • java代码
Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
  //当存在时,执行这里的代码
} else {
  //当不存在时,执行这里的代码
}

说明:

SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了

业务代码中直接判断是否非空即可

3.第二种写法(使用exists)

这个是参考帖子自己补充的一种方法

建表的语句

CREATE TABLE `demo` (
`id` int(11) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
-- 表中的测试数据

MariaDB [test]> select * from demo;
+------+------+
| id   | name |
+------+------+
|    1 | root |
|    1 | NULL |
| NULL | root |
+------+------+
3 rows in set (0.000 sec)
  • sql写法
select exists (select name from demo where name = 'roo1111');

MariaDB [test]> select exists (select name from demo where name = 'roo1111');
+-------------------------------------------------------+
| exists (select name from demo where name = 'roo1111') |
+-------------------------------------------------------+
|                                                     0 |
+-------------------------------------------------------+
1 row in set (0.001 sec)


select exists (select name from demo where name = 'root');
MariaDB [test]> select exists (select name from demo where name = 'root');
+----------------------------------------------------+
| exists (select name from demo where name = 'root') |
+----------------------------------------------------+
|                                                  1 |
+----------------------------------------------------+
1 row in set (0.000 sec)

  • java代码

mapper的方法

    /**
     * 测试exists
     * @return
     */
    @Select("select exists (select name from demo where name = #{name1}) as existsuser")
    Integer existsUser(@Param("name1") String name);

说明:

exists的结果只有0和1

假设没有的name的值

@Test
    public void test(){
        System.out.println(demoMapper.existsUser("root111").getClass());
        System.out.println(demoMapper.existsUser("root111"));
        Integer exist = demoMapper.existsUser("root111");
        if ( exist ==1 ) {
            //当存在时,执行这里的代码
            System.out.println("当前用户已存在,不能再或者添加");
        } else if(exist==0){
            //当不存在时,执行这里的代码
            System.out.println("该用户不存在可以添加");
        }else{
            System.out.println("这种情况不会发生");
        }
    }
/**
控制台打印:
class java.lang.Integer
0
该用户不存在可以添加
*/

假设有name的值

@Test
    public void test(){
        System.out.println(demoMapper.existsUser("root").getClass());
        System.out.println(demoMapper.existsUser("root"));
        Integer exist = demoMapper.existsUser("root");
        if ( exist ==1 ) {
            //当存在时,执行这里的代码
            System.out.println("当前用户已存在,不能再或者添加");
        } else if(exist==0){
            //当不存在时,执行这里的代码
            System.out.println("该用户不存在可以添加");
        }else{
            System.out.println("这种情况不会发生");
        }
    }
/**
控制台打印:
class java.lang.Integer
1
当前用户已存在,不能再或者添加
*/

4.总结

1.以上两种方法都可以判断条件判断是否存在某条记录

2.自我第二种方法比较好,因为不会存在空指针异常

3.第一种如果直接数据方法返回值结果,如果为null,会报空指针异常

4.这两种方法都不能按条件判断出表中有几条记录,如果查记录数,还是需要count()函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值