发表于: 2017-12-06 22:47:47
1 611
一;继续总结任务一剩下的5个技能
------------------------------5;我学到的第五个技能点,是关于mybatis的知识----------------------------------
5.1 mybatis简直释放了自己我
java的一个持久层框架,类似于一种固定的框,框里面封装了jdbc,这样就可以只操作sql语句,而不需要花费精力去处理加载驱
动、创建连接、创建statement等繁杂的过程。而具体过程就是靠对象关系映射,因为之前操作数据库,是使用JDBC不是直接面向
对象,而映射之后就可以通过操纵对象来操纵数据库了【术语:mybatis通过xml或注解的方式将要执行的各种statement配置起
来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射
为java对象并返回】
5.2 学习mybatis很重的一点就是理解映射orm
ORM=Object Relationship Database Mapping:对象和关系数据库的映射
简单说,一个对象,对应数据库里的一条记录
mybatis连接数据库主要利用orm工具的基本思想从配置文件(通常是XML配置文件中)得到 sessionfactory,由sessionfactory
产生 sessio在session 中完成对数据的增删改查和事务提交等(在用完之后关闭session )而且在java 对象和数据库之间也
通常有mapping 的xml配置文件。
关于映射再说一点就是dao接口; DAO-------Data Access Object数据库访问对象
实际上就是运用了ORM,也算是一种映射,只不过把把数据库相关的操作都映射封装在这个类里面,这样其他地方看不到JDBC的代
码,很简洁.
5.3 关于事务的知识点
这一部分知识点,我并没有深入学习了解,只是简单的学习概念以及特性ACDI,百度一下……
原子性(Atomicity);原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency);事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
隔离性(Isolation);事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数
据所干扰,多个并发事务之间要相互隔离。
持久性(Durability);持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也
不应该对其有任何影响。
代码简单应用………..
小结;技能之5之mybatis……….
虽然说了事物映射这些概念………实际上,我只学到了皮毛,真正感觉方便的也只是省去了jdbc那些繁杂的操作,映射的话也是简单理
解为Model层映射到数据库的表,这样在代码里操作的时候直接反映到数据库的表格;也就对应了操作java对象,实际就是操作数据
库的一条记录,而一条记录实际上抽象逻辑的来源就是现实世界的东西了.
然后简单理解操作一下,事务实际上也是必备的,主要记住一点就是要么同时成功,要么同时失败;这样保证一致性就可以了;没有事
务的话后果很严重,简单来说就像转账如果没有保证事务,那么或许就会出现账户扣款与实际逻辑不一致的问题.
-------------------------------6;我学到的第6个技能点,是关于log4j的知识------------------------------------
6.1 log4j之前
Sout; 直观有效,但是有一系列的缺点;最主要的就是, 只能输出到控制台,其他再列出三个
a:不知道这句话是在哪个类,哪个线程里出来的
b:不知道什么时候前后两句输出间隔了多少时间
c:无法关闭调试信息,一旦System.out.println多了之后,到处都是输出,增加定位自己需要信息的难度
6.2 log4j的构成以及相关
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)
创建日志实例对象;为什么不能用new,这取决于Logge类;它不允许实例化一个新的记录器实例,但它提供了两个静态方法获得一个
Logger 对象;其中一个就是上面的,另外一个没用过,暂时不说了……
//基于类名获取日志对象
private static Logger logger =Logger.getLogger(Test.class);
然后是Logging方法; 得到了一个名为记录器的实例之后,可以使用记录的几种方法来记录消息;Logger类有专门
用于打印日志信息的方法,
logger.debug("调试");
logger.info("输出");
然后配置文件信息参数没什么好说的,自己挨个试一遍就知道;忘了就查…就试………..
6.3 怎么输出到文件
配置文件里的另一个最重要的信息;怎么输出到文件…那就是必须使用org.apache.log4j.FileAppender;而实际运用
中,我们通常用的是其扩展类;并且继承了属性的RollingFileAppender类;这是因为我们的日志需要根据大小一定的
阈值;来把日志分开为多个文件……
log4j.appender.R=org.apache.log4j.RollingFileAppender
这里的滚动输出也很好理解,操作一下就明白了……
6.4 log4j的xml形式
这个也是简单操作一下,没有深入学习,知道有这个方式,感觉不如properties灵活方便
小结;技能之log4j………..
这个技能点很直接,很直观;不再细说了,就是一个替代sout的工具类,一是灵活,二是方便;不过实际上这个是到后期才学会使用,而
且是简单使用;并没有运用的很灵活,尤其是配置文件的配置,这里也没有详细说明,自己摸索吧,怎么输出到控制台,怎么输出到文
件,怎么输出不同级别的日志到不同的文件…………等等,大体方向就是这样,再配合后面的aop,以及脚本抓取,灵活使用就算是达到要
求了.
--------------------------------7;我学到的第7个技能点,是关于spring的知识----------------------------------
7.1 spring
Spring是一个基于IOC和AOP结构的开源轻量级开发应用框架,J2EE系统的框架;然后就是重要的两点。IOC 反转控制是Spring
的基础,Inversion Of Control简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象,DI
依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。
具体说一下概念;
反转概念; 对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系; 所有的类的创建、销毁都由spring
来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现
在是所有对象都被spring控制,所以这叫控制反转。
DI (Dependency Injection),依赖注入概念; 比如对象A需要操作数据库,以前要A自己编写代码来获得一个Connection对象,有
了spring我们就只需要告诉spring,A中需要一个Connection,在系统运行时,spring会在适当的时候制造一个Connection,注射
到A中,这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常运行,Connection是由spring注入到A中的,依
赖注入的名字就这么来的。
7.2 代码这一块applicationContext.xml是Spring的核心配置文件
然后了解一下注解的几个关键字;简单介绍一下…
spring的主要构件及作用,简单说一点,自己摸索
<context:component-scan base-package="com.jnshu.service" />
注入bean,Spring 容器初始化的时候,会扫描package下的所有,标有
(@Component,@Service,@Controller,@Repository后三个继承了com) 注解的类,也就是说在类上使用上面四
种注解,会声明他们是bean,然后会被纳入spring容器管理
再对比一下用到的实例,简单说一下四个注解
@Component 泛指组件,当组件不好归类的时候,用这个注解标注,比如这个仅仅是简单的测试,这个类没有业务
逻辑,就可以用component
@Service用于标注业务层组件;
@Controller用于标注控制层组件;
@Repository 用于标注数据访问组件,即DAO组件
小结;技能之spring............
就任务一来说,实际上spring只需要掌握怎么忘记new,而去灵活使用ioc通过配置文件,ref注入所需要的属性,autowired所需要
的依赖;后期的话用的会越来越多,尤其是springmvc,这里只是浅显的说一下它的主要特点,要明白方便灵活之处;随着学习的深
入,慢慢理解各种配置文件,熟练使用吧.
--------------------------------8;我学到的第8个技能点,是关于junit的知识-----------------------------------
8.1 单元测试junit
junit做测试目的是尽量早的发现程序的bug,一个bug隐藏的时间越久,修复他的代价就越大。
8.2 说点简单的扩展
Junit4与Junit3简单了解一点,一个大的更新;官方原话, Junit4是Junit框架有史以来的最大改进,其主要目标是利用java5的
Annotation特性来简化测试用例的编写;实际上就是引入了java 5.0的注释技术;然后简单了解一下, 在JUnit3.x中测试必须继
承 TestCase,并且每个方法名必须以test开头;而junit4在测试的方法上加上注解@Test就可以了;而且不必再遵循以前的一些
显式约定和反射定位测试等等什么复杂的东西…….
8.3 常用注解;记着执行顺序
一个测试用例执行顺序为:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass;
一个测试方法的调用顺序为:@Before –> @Test –> @After。
代码简单示例一下;
小结;技能8之junit……..
这也可以看成一个工具类,不难使用,很方便,最难的应该是怎么写出测试代码,刚开始的话,感觉无从下手,慢慢练,用的多了,就知
道什么样的方法怎么写了,因为没有参数返回值,实际上也能很快入手,还有就是断言的使用………痛点,用的少……陌生,还是要慢慢学
积累………
-----------------------------------9;我学到的第9个技能点,是关于DAL的知识----------------------------------
9.1 纯概念知识,百度百科强行加上………
dal是数据访问层的英文缩写,即为数据访问层(Data Access Layer)。
主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。
9.2 这个点还是放到任务二的三层架构来说吧……………
小结;.............................
-----------------------------------------------分割线---------------------------------------------------
二,关于代码的几个点
1;prepare statement和statement关系联系
/*
*1.Statement 需要进行字符串拼接,可读性和维护性比较差
*2.PreparedStatement有预编译机制,性能比Statement更快
*3.防止SQL注入式攻击
*/
2; execute与executeUpdate的关系
/*
不同1:
execute可以执行查询语句
然后通过getResultSet,把结果集取出来
executeUpdate不能执行查询语句
不同2:
execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
executeUpdate返回的是int,表示有多少条数据受到了影响
*/
明日计划的事情:
1;继续总结,抓紧时间过一遍
2;完成任务一的ppt
3;完善小课堂
遇到的问题及解决方法:
基础总结暂无
收获:
简单总结回顾知识技能点,尽量查漏补缺,尽量为复盘弥补一点基础不足
评论