发表于: 2017-03-02 00:11:12
2 5259
建了索引
没有索引
一.今天完成的:
1.解决昨天遇到的问题
2.收尾任务一
3.了解 Restful接口设计规范
4.创建maven web工程
5.任务一总结
二.今天的收获;
1.测试一下不关闭连接池的时候,在Main函数里写1000个循环调用会出现什么情况。
1000个循环的情况下不关闭连接池相比关闭连接池运行时间会稍慢一点,这个时候连接池的效率没有体现出来,当有足够多的并发需求的时候,连接池的优势才能发挥出来
2..测试一下连接DB中断后TryCatch是否能正常处理。
可以catch到:
3..检查一下自己的代码是否符合规范如果DB的表格有改动应该改哪些内容需要多久?
比如说,如果需要访问另一个DB表格,则需要修改sql语句里的表名需要修改
如果需要修改DB表格里的字段名,则相应第需要修改sql语句,还有student类中的变量也需要改,set get方法要改,
4.数据库里插入100万条数据,对比建索引和不建索引的效率查别。
左边为建索引查询时间0.004s,右边不建索引查询时间0.051s,效率提升显著;
当然这是在特定条件下的,因为以上是我查询name字段,里面10万条数据每条name字段都是数字+字母随机生成的;这个时候索引的效率是可以体现的;
如果我查询的是id,qq这类纯数字且有序的字段,那么索引的效率体现不出来,甚至反而会比不建索引查询要慢
三.明天计划
1. 定义Rest接口格式
2.创建maven web工程
3. 使用SpringMVC完成REST接口
四.今天遇到的问题
1.测试在连接池不关闭的情况1000次连接数据库,得到的执行时间反而比关闭连接池的更多,一直不明白为什么,后来经师兄和老大指点知道了连接池在并发需求足够多的时候才能体现优势,我这个测试环境不足以体现;
2.往数据库插入10万条数据,对比建不建立索引的查询效率,一开始我插入的是纯数字qq字段,建索引查询的效率优势体现不出来,后来经师兄指点给数据库插入随机数字+随机字母组成的name字段,再测试发现索引查询效率优势显著!
五.任务一总结&攻略
1.总结:
自己从一个只懂java基础语法的小白开始做任务一,到现在完成任务,感觉收获很多:
知识上的收获:①巩固了java基础语法
②学会数据库操作方法
③学会初步使用mybatis替换dao
④学会使用maven管理项目
⑤学会使用spring容器管理Bean以及整合mybatis
⑥学会使用log4j打日志(用了这个在调试bug寻找错误根源的时候很有用)
⑦学会了基本的ubuntu系统云服务器操作(上传下载,部署项目,更改ssh端口 等)
学习方法上的收获:①学会优化搜索关键字,查找适合自己的学习资料;
②如何学习和理解新知识?有不太理解的知识不要紧,先撸代码,写例子,也许例子代码写多了就理解了,实战代码永远比看书看资料死磕理解效率要高,没事多撸几十行代码,多写几个例子总是没错的!
③如何解决遇到的问题?有问题自己先百度或看书,独立解决问题的能力就是这样培养出来的,如果一直有个保姆在你身边手把手教你规范,给你排查问题,那你永远学不会查看日志,查看报错,以及用排除法寻找报错根源;
当然如果耗费了很长时间还是搞不定,就要把自己的问题整理清楚,表述清楚,去请教师兄;
2.学习攻略(基础前提是java基础语法,eclipse基本使用)
2.1学习顺序图:
这是总的大概的学习顺序,其中mybatis和spring是学习的重点,同时也是难点,接下来回 顾一下自己做任务时具体的过程;
2.2具体学习过程(将对应学习顺序图①到⑨步具体说明)
①首先是学习数据库(学习资料搜索关键字JDBC/连接数据库, DAO设计,数据库增删改查)
A.所需配置:任务一用的是mysql,首先配置好mysql,Navicat,eclipse
B.先花半天时间学会sql语句,学会在命令行和Navicat中新建表格(也就是任务中的报名贴业务表)
C然后学习在eclipse中创建数据库连接类,学会使用java代码连接数据库.连接数据库其实就这么几个步骤,加载驱动,传入数据库参数获得连接;
a.连接数据库步骤: 1.加载数据库驱动Class.forName(DRIVER)
2.加载数据库配置 DriverManager.getConnection(URL,USER,PASSWORD)
D建立Student类,DaoStudent类,DAOImpl实现类,以及Test类,可以不用去看工厂类,有这几个类能实现数据库增删改查就可以了
②学习使用maven管理项目(搜索关键字:eclipse配置maven,pom.xml模板)
A.所需配置:maven
B.现阶段需要知道maven是一个工具,最基本的功能是给我们的项目建立一个通用的骨架(目录),另外就是能够通过在配置文件中写好地址就实现自 动下载jar依赖包,
理解难点:a.配置文件中写依赖包是什么?可以先简单理解为依赖包是类中需要import的类的集合组成,比如说你在类中需要调用数据库连接的一些 方法,通常我们是使 用import相关类就可以引入,那么为什么你能够import这些类?这些类从哪里来的?他们在jar依赖包里面,通常一 个jar依赖包里包含了很多需要用到的类,当我们写代码越来越多的时候,需要import的类也越来越多,相应的就需要越来越多的依赖包;
b.什么是pom.xml?maven如何实现自动下载?简单形象地说就是,maven中有一个默认的文件叫pom.xml,它里面专门用来存放各类资源的种 子地址,把老司机分享的种子地址粘贴到这个文件里之后,maven就会自动下载你懂的资源
C.使用maven建立项目,把之前写的dao等类文件放在src/main/java目录下,学会使用mvn -clean,mvn -install等命令,学会查看jar包目录,查看jar 包是否成功下载,如果下载太慢,则直接使用下载工具下载到本地然后拖到本地仓库(jar依赖包本地存放的地方);
③配置junit(关键字:junit单元测试)
理解难点:junit是什么?有什么用?为什么不直接使用main方法测试?
a.junit是单元测试工具,可以简单理解为junit是一个包含多个main方法的函数.
b.junit单元测试可以一次性跑多个测试方法,这也是用junit测试代替main方法的原因,比如说项目中需要测试N个方法,如果没有junit,那 用main方法,我们知道一个类中只能有一个main方法,我们要测试N个方法,总不能写N个类吧?如果把所有方法都写进同一个main方法中结构上 又不够清晰,有了junit单元测试之后就简单多了,我们在一个类中把需要测试的方法写好,然后在需要测试的n个方法的每个方法的前面添 加@Test注解,运行单元测试,会一次性地测试所有注解了@Test的方法.并且不需要使用system.out.println,通过红绿进度条就能知道方法是 否通过测试,如果方法未通过,还能查看丰富的报错信息来判断问题的来源
④学习mybatis(搜索关键字mybatis, SqlSession, SqlSessionFactory;Annotation注解
参考网址http://blog.csdn.net/techbirds_bao/article/details/9233599/
http://computerdragon.blog.51cto.com/6235984/1399742)
A,mybatis是什么?mybatis是一款框架,可以替代之前我们在项目中写的DAO层,以及替换之前在类中预编译sql语句的工作,
B.实现mybatis替换dao的两种方式:通过配置文件或者Annotation注解方式
①mybatis通过配置文件方式替换dao步骤:
a.先新建两个拓展名为xml的文件,mybatis-config.xml和user.xml,
其中mybatis-config.xml里面需要配置数据库的相关信息:驱动,url,账号密码,这一步做好了可以把之前的数据库连接类替换掉!
user.xml是映射文件,里面需要把增删改查方法sql语句配置一下,这一步做好了可以替换掉dao实现类!
这样看来其实mybatis很简单,无非就是把原先在类中写的代码搬到xml中!
b.上面的步骤其实已经完成了mybatis替换dao以及预编译sql语句的所需要的配置,但你还需要知道在类中怎么调用这两个配置文件实现 替换工作;在这里我们需要先了解几个对象, SqlSessionFactory(会话工厂)SqlSession(会话),以及,怎么理解这两个对象呢, 在mybatis中连接数据库被看做是和数据库的一次会话,所以每个SqlSession对应着一次数据库连接,可以把SqlSession粗略类比为我 们之前数据库连接类里的connection对象,它俩都是负责数据库连接的而SqlSessionFactory就是负责创建SqlSession的, SqlSessionFactory调用openSession()方法即可创建出一个SqlSession对象来!
c.理解了SqlSessionFactory和SqlSession之后,我们发现连接数据库只需要创建SqlSession就可以了!:
SqlSession sqlSession = sqlSessionFactory.openSession();
上面这一行是mybatis连接数据库的核心内容!就是这么简单!只要理解了这段代码,会发现其他的东西都是为这一行代码服务的!
d.当然只写SqlSession sqlSession=sqlSessionFactory.openSession()这行代码编译时通不过的,因为我们还没有把数据库的配置信息 传入进去,也不难,
添加两行代码即可!:
//下面这行意思是读取mybatis-config.xml配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//下面这行意思是创建SqlSessionFactory对象!
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
至此我们已经完成mybatis替换数据库连接类所需的核心内容!就这么简单!
e.想要更简单的话!我们可以把上面三行代码封装在一个类的方法里面,这个方法的返回类型为SqlSession,也就是就说!以后我们只需要 调用这个方法即可获得数据库连接!
f.简单实现了mybatis替换数据库连接,那么mybatis替换sql相对就更加容易了!之前,在mybatis-config.xml中我们定义了
<mapper resource="User.xml"/>
这行表示mapper的路径,可以理解为sql语句具体实现的指向!有了这个它,我们就不需要在代码中显式声明读取user.xml配置信息了!
读取了mybatis-config.xml配置文件的同时也读取了user.xml里面的信息,
所以,我们直接用就行了!如何用?
直接用SqlSession对象调用user.xml里定义的方法!
sqlSession.insert(add,student)//括号内add是添加学员方法,student是要添加进去的学生对象!
我们甚至没有用到dao和dao实现类!
这说明我们已经成功用mybatis替换掉dao啦!
②通过MyBatis的Annotation注解方式替换预编译sql语句
连接数据库部分和上面一样
Annotation方式其实更简单!只需要在原来的DaoStudent中加几行注解即可!
a.步骤
1,可以直接找到学校mybatis之前用的DaoStudent接口,
2,在DaoStudent接口中,在每个抽象方法前面添加注解:
比如在删除学生delete方法上面加上注解,即:
@Select("select id,name,qq from student")
public List<Student> query();
仅仅这两行内容足以替换了之前实现类daoStudentImpl中如下代码:
3.如法炮制把其他方法也注解上
4.如何调用增删改查方法?三步走!
a. 注册该mapper接口
(即声明一下DaoStudent,
作用和之前mybatis-config.xml中声明<mapper resource="User.xml"/>类似)
在代码里添加这一段
sqlSessionFactory.getConfiguration().addMapper(DaoStudent.class)
b.调用方法之前时候需要添加一句
DaoStudent daoStudent= SqlSession.getMapper(DaoStudent.class)
c.接下来可以直接用daoStudent调用方法即:
daoStudent.delete(847)
总结:Annotation注解替换预编译sql语句只需要在接口的抽象方法上方添加相应注解即可替换掉实现类!所需多做的仅仅是添加上面两行代码!
未完待续…明天有空的话再更新spring的学习攻略….
评论