转载

Java开发中那些不容忽略的小问题-1

写公众号说实话挺久了,也因此认识了很多的朋友,咨询什么的都有,总之,或多或少的帮助到过一些人。最近想了好久,我往后应该写一些什么类型的文章?

1、偏理论的?

感觉在一篇文章里面去概述一些比较复杂的理论,说不说的完暂且不说,作为一个读者大部分肯定是没有耐心看下去的,而且看完吸收的也不会很多,这种东西还是得通过啃书的方式可能会更好。

2、偏代码层次的?

之前也写过几篇文章里面代码很多,但是其实很少有人认认真真的研究过那些代码,也没有验证过,因为大家有可能是在上班的路上,或者吃饭期间再看,所以只是一眼看过。

那么我就在想,我们可以分享一些什么东西,可以让大家在零碎的时间中学的可以落实的东西,我觉得这些东西得从涉及面小、落实快等方面入手,看了某个东西之后,可以快速的消化,并且可以落实到代码中的,我觉得才是最好的。

废话不多说,几天分享几个平时开发中遇到的小问题;

一、Java中提供的空集合到底有用没有?

这是我看了几篇文章,然后结合自己项目中的代码后所理解的,这个东西首先 肯定是有用的 。我们来看一段代码。

// 伪代码
public List<MallProvincesPO> listProvincesAllDao() {

        // 从数据库获取省份信息
        List<MallProvincesPO> provincesPOList = provincesMapper.selectAll();

        if (provincesPOList == null || provincesPOList.size() <= 0) {
                return null;
        }
        return provincesPOList;
}复制代码

现在的接口基本都是基于RESTful风格的,如果将这个方法提供给别人,那么肯定会存在一个问题,可能会出现空指针异常,(真是经历)前端要去集合中取数据,如果前端没有做任何的非空判断,直接从集合中取,那么当返回null的时候,势必造成空指针异常。

所以查询不到数据的时候,我们应当判断该集合是不是为null,如果为null我们应该返回一个空的集合,如果我们直接new一个ArrayList其实是非常浪费资源的,这个时候Java中提供的 Collections.emptyList(); 就排上用场了,它创建的是一个不允许添加、删除、修改的空集合;

修改后的代码

public List<MallProvincesPO> listProvincesAllDao() {

        // 从数据库获取省份信息
        List<MallProvincesPO> provincesPOList = provincesMapper.selectAll();

        if (provincesPOList == null) {
                return Collections.emptyList();
        }
        return provincesPOList;
}复制代码

二、Mybatis批量修改语句

这是我今天早上碰到的一个问题,我们之前的批量修改是将一批数据的某个字段改为同一个值,比如批量逻辑删除,其实就是把需要删除的数据的status值改为0或者其他值,但是我们这个是这样的,编辑了好几条数据信息,然后每个数据信息的值是不一样的,为了减少数据库的连接次数,我们直接通过mybatis动态sql进行修改;

代码如下:

<update id="updateAll" parameterType="java.util.List">

    <foreach collection="list" separator=";" item="item">

            update product_specification

            <set>

                    <if test="item.status != null and item.status != ''">
                            status = #{item.status},
                    </if>

                    <if test="item.updateTime != null and item.updateTime != ''">
                            update_time = #{item.updateTime},
                    </if>
            </set>

            where id = #{item.id}
    </foreach>
</update>复制代码

但从语句上看,确实毫无问题,但是在我调试的过程中( 基于SpringBoot的项目 ),真的是白板艰难,一直报错。一直说语法存在问题,请查询手册。

报错信息:

### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update mall_product_specification复制代码

问题原因:这是因为mysql不支持此方式的批量修改操作,所以当我们修改批量数据的时候,就会报这个错,如果修改的是单条数据,不会出现该错误。

解决方法:在数据库的连接后面配置参数 &allowMultiQueries=true 即可

Java开发中那些不容忽略的小问题-1
原文  https://juejin.im/post/5dc55a17518825592c566851
正文到此结束
Loading...