写公众号说实话挺久了,也因此认识了很多的朋友,咨询什么的都有,总之,或多或少的帮助到过一些人。最近想了好久,我往后应该写一些什么类型的文章?
感觉在一篇文章里面去概述一些比较复杂的理论,说不说的完暂且不说,作为一个读者大部分肯定是没有耐心看下去的,而且看完吸收的也不会很多,这种东西还是得通过啃书的方式可能会更好。
之前也写过几篇文章里面代码很多,但是其实很少有人认认真真的研究过那些代码,也没有验证过,因为大家有可能是在上班的路上,或者吃饭期间再看,所以只是一眼看过。
那么我就在想,我们可以分享一些什么东西,可以让大家在零碎的时间中学的可以落实的东西,我觉得这些东西得从涉及面小、落实快等方面入手,看了某个东西之后,可以快速的消化,并且可以落实到代码中的,我觉得才是最好的。
废话不多说,几天分享几个平时开发中遇到的小问题;
这是我看了几篇文章,然后结合自己项目中的代码后所理解的,这个东西首先 肯定是有用的 。我们来看一段代码。
// 伪代码 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; }复制代码
这是我今天早上碰到的一个问题,我们之前的批量修改是将一批数据的某个字段改为同一个值,比如批量逻辑删除,其实就是把需要删除的数据的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 即可