“修真院”修行九九八十一难(3)

只有掌握了基础知识,才是真正的拥有自己的技术。


有一说一,修真院的模式不适合无基础纯小白去做,这些任务跨度太大且要求又不是很深,如果盲目的根据任务步骤去百度“XXX功能应该如何实现?”“如何做到XXX?”这样子做完任务之后根本没有起到作用,你不生产代码,你只是代码的搬运工~

上次我挣扎了一周后还是决定先不做了,好好学习基础知识才是王道,只有知道自己这一步为什么这样做,做的是什么功能,才会有1+1>2的效果,废话不说少了,上正题!


首先重新看一下任务,划分一下任务节点:

👆前期配置

 

👆创建数据库、熟悉数据库基本操作

 

👆Maven的使用(Maven没有要求,我是用来快速导入jar包的哈哈哈哈)

 

👆使用JDBC连接数据库(Mybatis需要学习SSM框架,但是为了操作一下数据库学习框架有点本末倒置)

编写DAO、使用Junit单元测试实现增删改查(当然还有Spring也是SSM框架中需要学习的一个,所以建议一起学)

 

 👆调试,这个就不说了,基操

 

 👆服务器的简单部署(远程连接数据库使用Navicat就可以实现、在服务器上跑一遍程序

建议没有服务器的同学也不用着急,想做的话可以去阿里云或者腾讯云用学生优惠买,偶尔还会有免费送的情况;但是这个任务中对于服务器的操作要求就是理解,并没有什么骚操作就是简单的连接一下数据库以及跑通程序,所以没有服务器或者以后没有在服务器上操作需求的小伙伴可以跳过这步

 

👆这些步骤是为了规范代码,合理使用TryCatch就可以达到目的

 

👆骚操作,不过也是为了让大家熟悉数据库的性能以及批处理的作用,想深入的同学可以以此来学习数据库的性能优化

 

👆最后应该提交的是一个可以展示的成果(看了一下已经提交大神的代码没有展示功能所以就先不考虑web项目的事,只提交代码就可以了,注意代码中要有测试类)


任务节点划分好之后相信大家心里也有数了,就是一些基本的Java与数据库的操作,有的步骤可以使用多种方式实现,所以建议不要一股脑的将里面的名词全部找出教程去学习,最好不要理会浪费时间不说用一次就忘记了也没有什么作用,等学到那里了就会发现这些操作都很简单。

我首先将我的操作贴出来,这也是我在修真院的日报中的内容,具体的思路会在下面详细说明。

首先建DB,这里找到了一个月前的DB:

 

然后插入一条数据:

 

这里就随便找了一条回复,使用sql命令列插入:

 

看一下有没有问题:

 

找到我之前的那个Maven项目:

 

首先我们需要一个domain来匹配数据库:

 

接下来写DAO接口:

 

连接MySQL直接使用C3P0连接池来做一下:

 

然后来写一个JDBCUtils来配置一下连接:

 

还有自己写的一个工具类TxQueryRunner,主要是将QueryRunner中的所有需要传入Connection的方法做一下修改,使其不需要每次调用都输入connection对象,避免重复调用:

 

这时候基本配置完毕,可以开始写DAO实现类了:

这是add()方法,后面的delete()、update()、query()与这个方法的实现差不多

 

然后编写一个测试类看一下可不可以实现:

 

然后做一下小小的修饰,完善一下DAO:

这时我发现一个问题就是我的表和项目都是之前的了,所以不太规范,需要严格遵守JavaBean规范,所以改了一下:

 

测试之后没有问题,增删改查可以全部实现

 

接下来我们来做一下批处理插入3000万条数据

首先删除所有数据:

 

修改c3p0的配置文件使myql开启批处理:

然后编写测试代码:

 

经过测试,插入100万:

插入三千万会报内存溢出的错,所以我采用一次插入300万,分十次插入:

差不多0.4个小时,感觉有点慢,不知道有没有什么方法优化一下,这就是后话了

 

最后是插入2亿:emmmm这个就没弄了,有点费时间,主要是理解批处理以及内存的问题就可以了,所以这个就不做了。

 

最后放上代码链接,任务一就基本做完了。


这里简单说一下我的思路:

首先建立数据库表,主要的列就是图中的那些列;

然后插入数据测试,看一下插入后的效果怎么样;

全部没有问题后开始做Java部分,首先是Maven,Maven是一个很好的项目管理工具,但在这个任务中它的角色就是用来导包的【无奈~】,所以配置好Maven并创建一个Maven项目就可以了;

接下来是建立与数据库之间的连接,这里涉及到三层架构,不知道的小伙伴可以去了解一下,简单来说就是使用多个层面的相互配合来处理一些功能的实现,这样做的好处就是清晰明了的各层处理各层的事务,减少代码的耦合度;

首先建立一个domain层,用来关联数据库,这里我们就只写一个People类,属性要与数据库中的列相同,这里要注意的是必须要遵守JavaBean规范

然后是DAO层,用来操作数据库,这里有一个思想就是面向接口编程,所以我们首先来编写一个DAO接口,接口中有增删改查四个方法用于实现类来实现;

然后我们需要连接数据库,这里要使用JDBC来连接,当然可以有一些方便的做法,我用的是C3P0连接池连接,使用配置文件连接;

还有上面说到的两个工具类:JDBCUtils,作用是连接数据库、生成Connection连接对象;TxQueryRunner继承QueryRunner类,主要是将QueryRunner类中的需要Connection连接对象的方法简化,避免重复实现Connection对象的调用;

这两个类确保DAO类的实现,add()、delete()、update()、query()方法流程都是先给出sql语句,再给出参数prams,最后使用QueryRunner的方法就可以实现操作;

增删改查使用测试类来测试,没有问题的话再开一个测试类实现批处理插入数据,这里因为想插入的内容有些变化,所以用了PreparedStatement的手动插入,没有使用QueryRunner的自动插入;

插入一百万条可以直接插,使用时间47000毫秒,大概47秒就实现了;

插入三千万条的时候如果直接插入,就会报内存溢出的错误,所以每次插入三百万条,分十次插入,每次都要进行事务的开启与提交,如果某一次批提交报错就会回滚,不会影响之前已经插入成功的数据,大概用了0.4个小时也就是二十多分钟成功;

至于2亿hhhhhhh,算了吧,电脑CPU还是要歇歇的,原理一样的,分批次处理就可以了,至于建立索引检索,在三千万数据的时候,查找速度是100多秒,建立索引的话可以提高十几秒,依旧是原理问题,立即原理就不用试验了,对自己的电脑好一些啊哈哈哈哈哈~

最后附上我的任务提交链接https://github.com/zijundidu/TaskOne.git这个任务就算完成了!


很久没写CSDN了,因为一直在学习其他的东西,现在已经学习到框架了,但是觉得之前的Web基础不是很牢固,所以这几天会给我爸爸写一个商品管理系统,做完后也会发在我的“Puzzle”系列中,我们下次见👋

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值