java开发小细节(数据字段扩展,mybatis的灵活运用,I/O流——扫描文件(编码转换),switch,case的作用域)

(Notice:欢迎交流和沟通,Wx:IT_Ezra,QQ 654303408。仅个人观点和个人理解有问题讨论也可联系我。)
(PS:写这篇博客的原因是因为刚入行不久,第一次把自己的自己所学的东西应用在实际层面,更让我意识到,基础的重要性。)

为什么我们需要重视基础?

对于一个科班生,一定会学到很多很多专业的课程,还有最基本的语法课程。当我们去学习某些语法,某些结构的时候,我们要思考,这些基础而高效的结构在哪里可以用到。对于java开发而言,现在更多的是框架开发,模块化开发,大公司里面,一个架构师帮你把框架搭好,自己填空就行了。这样对自己的成长并不是很友好。如果自己不主动去学习和思考“为什么这样做”的话,很容易迷失自己。

点题

下面我想说三个场景,运用到的基本语法和知识。

一:选择结构之判断——“数据字段扩展,mybatis的灵活运用”。

在我们真正从事开发工作的时候,我们会遇到常见问题之一。数据库的改动。随着时间的推移,业务的增加,我们会去增加一些字段,一些属性。这是可以理解的。(PS:当然,这容易出现在小厂,大厂基本稳定,并且兼容性也很强。但是这也是一个实际问题,无可避免)
当然,首先我们能做到的就是尽量多想,多留一些预留字段,一个优秀的技术经理级别以上的大佬,都会在设计数据库的时候想的很远很远,这是一个非常好的习惯和素养,值得我们学习,不然一天加一个字段,兄弟,这谁扛得住啊。>。<!
这篇文章讲述的是一个很基础的Mybatis的应用,如下图:

base_column_list

这是mybatis的XX.XML文件的一个配置,通常是在一个表定义好之后,在sql语言中替代*的作用的,里面有所有字段。这是第一步,我们需要自己手动写的。那么我们在写sql语句中里面就会出现如下语句:

sql_base_column_list

我们可以看到,通过这样一句话就可以省略把所有的字段罗列上去。

那么问题来了:分类套路

一.添加的属性为主要属性,非常必要的字段,可能以前没有考虑周全,需要添加上去,那么,这种情况只需要在实体类里面添加属性,然后在XML中映射上去,然后把该字段添加到这个base_column_list即可。那么所有的sql都会被修改,而不用一个一个sql去修改。(只适用于select,update和insert只有1个。所以修改起来不会很多,但是我相信select会有很多。)
二.添加的属性为附加属性,非必要字段,这也属于当初考虑的不够长远,现在多了一个业务,需要这个字段了,但是对以前的查找又没有什么关系,那么咋办呢?类似于上一种情况,我们可以再写一个语句,类似于第一种情况。

XXX,XXX为附加字段。

然后在需要扩展的sql里面添加上这一句,这样就可以在扩展到sql里面返回需要的字段了。

Extend

三.级联查找,当我们需要去级联查表的时候,我们会需要用到不同的几个表,然后这个时候需要返回的对象就不是单表的数据了,那么肯定不能进行单表关联,这个时候怎么办呢?
我们一般将需要级联的结果集整理出来,创建一个实体类来专门存放这个级联对象。这个时候,我们可以在xml文件里面去进行关系映射,当然我们也可以直接使用resultType=“实体类”来进行返回。当然,这个实体类是需要跟目录下来写,用"."区分。如下图所示:

从根目录往下写

通过这种方式,我们可以返回任意级联好的结果,非常方便。这就是mybatis的灵活之处,相对于hibernate。

二:I/O流——扫描文件(编码转换)

作为一个后端工程师,本来只需要去了解高端大气上档次的后台技术栈(瞎BB的),结果由于工作需要,我变成了一个兼职写脚本的工程师 - -,我擦嘞。
我们是一个AI项目,所以需要很多数据,那么在这个时候,我的DB同事们只负责收集数据,入库操作一概不管(我们已经实现后台的添加功能)。但是他们嫌一个一个输入很麻烦,这里我想吐槽一下下哎。所以我就得帮助他们批量入库。如何实现 。世界上有一个东西叫做脚本——script。
心路历程:首先是,一层文件夹扫描。接着是两层文件夹扫描。接着是文件编码转码,接着是不同文件编码判断。真的。我要抓狂了,他们要求一次比一次高。自己啥都不干,就复制粘贴,其他一概不管。那么引用微博老哥的一句话:程序员永远不能说NO。 没错,我的脚本一次比一次只能。我都好佩服我自己。
不吹比了。我代码都放在github上了。就单纯扫描文件夹的话,还是比较简单的。导入JAVA自带的IO包。然后File类有封装好的方法叫做。listFiles(),这个方法可以扫描该文件下所有的文件并返回文件数组,所以要使用一个文件数组来接。像这样:

获取文件夹下的所有文件

然后遍历所有的文件就OK了,一般这种情况下可以定位到你的文件,但是如果你想获取文件名,就有多种方法:
1.用分割符。Windows的分割符如下。然后你可以答应path,看取具体的下标哪个是你需要的。
String[] path = filelist[i].getAbsolutePath().split("\\\\");
2.通过获取后缀名。然后把后缀名干掉。prefix_num表示后缀名的长度,包括".",因为我这次需要扫描都是的TXT文件,所以我就写死了。固定为4。当然,可以写活一点嘛。

在这里插入图片描述

这都不是最核心的。这只是一个基本操作。下面就是流的问题了。想详细了解IO架构的可以自行百度,然后查阅相应资料。(此处引入一个链接)https://blog.csdn.net/lijizhi19950123/article/details/78253210

输入流

先通过字节流FileinputStream获取到文件的数据,然后通过一个中转站。InputStreamReader,来过渡。最后用字符流容器BufferedReader来获取到read的字符数,然后转储。

输出流

通过同样先通过字节流建立连接,然后OutputStreamWriter作为桥梁,将数据写进去。
最后。插入一个片段,那就是对文件编码进行判断。通过bufferedInputStream字节流来获取文件的开头部分字节。然后判断其编码类型。这样,一整套完整的无脑文件读写脚本就完成了,具体要实现什么业务,就看你们个人了。

判断文件编码

三:switch,case的作用域

这个问题也是我今天在调试代码的时候偶然发现的。当我在switch外定义一个变量的时候,在case类是发现这个变量飘红。很明显,飘红是作用域的问题。当时我就在思考。我以前写case都不带花括号的。但是如果我加了花括号,那么这个问题就解决了。于是我查询了一下资料。证实了我的理论。作用域的问题。所以,以后写case的时候,应该加花括号,这样比较好一点。通过这篇文章可以具体了解下。https://www.cnblogs.com/tony-yang-flutter/p/3601056.html。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值