发表于: 2018-09-10 21:41:00

1 471


今天完成的事情:

完成任务一的总结:

环境变量:一般是指在操作系统中用来指定操作系统的运行环境的一些参数。

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所用到的参数,如path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还应到path中指定的路径去寻找,用户通过配合环境变量,来更好地运行进程。

常见的环境变量;

%ALLUSERSPROFILE% 局部 返回所有用户配置文件的位置。

%APPDATA% 局部 返回默认情况下应用程序存储数据的位置。

局部 返回当前目录字符串。

%CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行。

%CMDEXTVERSION% 系统 返回当前的命令处理程序扩展的版本号。

%COMPUTERNAME% 系统 返回计算机的名称。

%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。

E% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息请参阅 Date

%ERRORLEVEL% 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。

%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在本地用户和组中指定的。

%HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在本地用户和组中指定的。

%HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在本地用户和组中指定的。

%LOGONSEVER% 局部 返回验证当前登录会话的域控制器的名称。

%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。

%OS% 系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT

%PATH% 系统 指定可执行文件的搜索路径。

%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。

%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值: x86IA64

%PROCESSOR_IDENTFIER% 系统 返回处理器说明。

%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。

%PROCESSOR_REVISION% 系统 返回处理器修订号的系统变量。

%PROMPT% 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。

%RANDOM% 系统 返回 0 32767 之间的任意十进制数字。由 Cmd.exe 生成。

%SYSTEMDRIVE% 系统 返回包含 Windows XP 根目录即系统根目录的驱动器。

%SYSTEMROOT% 系统 返回 Windows XP 根目录的位置。

%TEMP% and %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP而其它应用程序则需要 TMP

%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息请参阅 Time

%USERDOMAIN% 局部 返回包含用户帐户的域的名称。

%USERNAME% 局部 返回当前登录的用户的名称。

%UserProfile% 局部 返回当前用户的配置文件的位置。

%WINDIR% 系统 返回操作系统目录的位置。 

环境变量修改:在注册表对应位置修改;右键我的电脑,设置环境变量;使用命令行修改环境变量。 

Java配置环境变量的原因:因为java必须经过编译(由.java文件编译为.class文件)才能运行,编译时就需要通过常用命令(如Javac),而这些常用的编译命令就存放在jdkjdkjava开发工具,jrejava运行环境)的bin目录下面。而Windows运行java编译命令时,本地查找不到某个命令或文件,回到Path中查找,我们不可能在每个java文件所在的目录防止jdk,故在path中设置jdk的路径,这样每个java文件都可以通过path中设置的路径找到编译命令进行编译。编译后的.Class文件就需要通过jre运行环境进行实现。

一般设定java的时候,为了在任何目录下都能运行jdkbin目录下的命令,就在path中设路径。 


Hosts文件:hosts文件是根据TCP/IPforWindows的标准来工作的,他的作用是包含ip地址和hostname(主机名)的映射关系。是一个映射ip地址和hostname(主机名)的规定。规定要求每段只能包括一个映射关系,IP地址要放在每段的最前面,空格后再写上映射的Host name(主机名)。对于这段的映射说明用“#”分割后用文字说明。 

我们知道在网络上访问网站,要首先通过DNS服务器网络域名(www.XXXX.com)解析成61.XXX.XXX.XXXIP地址后,我们的计算机才能访问。要是对于每个域名请求我们都要等待域名服务器解析后返回IP信息,这样访问网络的效率就会降低,而Hosts文件就能提高解析效率。根据Windows系统规定,在进行DNS请求以前,Windows系统会先检查自己的Hosts文件中是否有这个地址映射关系,如果有则调用这个IP地址映射,如果没有再向已知的DNS 服务器提出域名解析。也就是说Hosts的请求级别比DNS高。

Hosts 的作用:加快域名解析(可设置经常访问的网站)

方便局域网用户(使用局域网服务器时,每次输入ip很麻烦,在hosts中建立映射关系,访问后只需输入服务器名字就行了)

屏蔽网站(将要屏蔽的网站映射到错误的ip或自己的ip127.0.0.1#屏蔽的网站
0.0.0.0#
屏蔽的网站)

顺利连接系统:有些服务器(lotus)直接输入ip是不能访问的,只能输入服务器名字才能访问。 

 

数据库的性能优化:索引和百万数据插入

索引是对数据库表的一列或者多列进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。相当于书本目录的作用,在数据量比较大(一般十万以上),可以提高查询效率。有普通缩影、唯一索引、单列索引、多列索引和全文索引。

索引缺点:占存储,数据更新时,索引也会随之更新,影响效率。

百万数据插入优化方法:mysql默认是关闭批量插入的,所以我们首先需要开启批量插入

使用PreparedStatementsql语句进行预编译,这样就不用重复编译SQL语句,插入时只需注入参数即可

使用AddBatch积攒Sql语句,调整最优的单次批量提交的条数,达到这个条数就提交一次,执行插入。

 

Jdbc四种实现方式的优缺点:

Jdbc全名为Java DataBase  Connection;使用Jdbc连接数据库,首先是通过反射机制加载驱动。通过数据库地址、用户和密码获取连接。创建Statement,编写SQL语句,使用excuteQueryexcuteUpdate方法执行SQL语句。历遍结果集,取出结果(查询时需要),关闭连接和事务。

Jdbctemplate就是Springjdbc封装的模板,相比于Jdbc,他帮我们处理了很多事情(连接数据库——XML文件中配置,关闭连接和事务——Spring的封装类JdbcTemplate解决),只需要别写SQL语句然后执行就是,而且PreparedStatement可以对SQL语句进行预编译,执行时只需注入参数即可(尤其是批量操作时,不用重复编译sql语句)

Mybatis是一种开源持久层框架。Mybatis之于JdbcTemplate,去掉了实现类,增加了接口映射文件,通过映射文件配置接口中方法,配置输入输出的参数属性。使用时需要在映射文件中定义唯一的命名空间。在全域配置文件中定义映射文件位置。但是在使用这个Mybatis时还是比较麻烦,要通过写一连串的代码,加载配置文件,创建SqlSessionFactory(会话工厂),SqlSession(会话),操作数据库需要通过会话来进行。

Spring+mybatis是在mybatis的基础上,在配置文件中用SqlSessionFactoryBean生成SqlSessionFactory,通过SqlSessionTemplate实现SqlSession。对mybatissqlsession这部分进行了一个封装。直接映射到接口文件中,最后通过注解方式直接调用Mapper


Spring容器,也称为是IOC容器,IOC就是控制反转一种思想,即将类的创建和管理交给了Spring容器处理,是控制权的反转。Spring容器可以称为IOC容器,但是IOC容器不仅仅只有Spring容器。Spring容器有两种类型:BeanFactoryApplicationcontext应用上下文两种。 

Bean的获取:配置文件中配置Bean,将放入Spring容器中,程序运行时首先加载ApplicationContext.XML文件,通过getBean()方法获取Spring 容器中的Bean,实例化对象。

注解是怎样实现:首先加载ApplicationContext,根据路径扫描注解所在的包(Componentcontrollerserviceresposity),将自定义的类放入Spring容器中。使用时通过Autowired取出并使用。

组件类注解的介绍:

@Component:标注一个普通Spring

@Repository:标注一个Dao组件类

@service:标注一个业务逻辑组件类

@Controller:标注一个控制器组件类

总结:1、被注解的java类当做是被注解的java类当做Bean实例,Bean实例的名称默认是Bean类的首字母小写,其他部分不变。@Service也可以自定义Bean名称,但是必须是唯一的! 
2
、尽量使用对应组件注解的类替换@Component注解,在spring未来的版本中,@Controller@Service@Repository会携带更多语义。并且便于开发和维护! 
3
、指定了某些类可作为Spring Bean类使用后,最好还需要让spring搜索指定路径,在Spring配置文件加入如下配置:自动扫描包及其子包下的所有Bean类型<context:component-scant  base-package=”包路径”>

装配Bean 是常用的注解:

@Autowired:属于Spring org.springframework.beans.factory.annotation包下,可用于为类的属性、构造器、方法进行注值 
@Resource
:不属于spring的注解,而是来自于JSR-250位于java.annotation包下,使用该annotation为目标bean指定协作者Bean 
@PostConstruct
@PreDestroy 方法 实现初始化和销毁bean之前进行的操作 

总结:1、相同点:均可标注在字段或者属性的的setter方法上。

2、不同:

a提供方 @AutowiredSpring的注解,@Resourcejavax.annotation注解,而是来自于JSR-250J2EE提供,需要JDK1.6及以上。 
b
注入方式 @Autowired只按照Type 注入;@Resource默认按Name自动注入,也提供按照Type 注入; 
c
属性 
@Autowired
注解可用于为类的属性、构造器、方法进行注值。默认情况下,其依赖的对象必须存在(bean可用),如果需要改变这种默认方式,可以设置其required属性为false 
还有一个比较重要的点就是,@Autowired注解默认按照类型装配,如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合@Qualified注解进行限定,指定注入的bean名称。 
@Resource
有两个中重要的属性:nametypename属性指定byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。 
需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。 

d
@Resource注解的使用性更为灵活,可指定名称,也可以指定类型 @Autowired注解进行装配容易抛出异常,特别是装配的bean类型有多个的时候,而解决的办法是需要在增加@Qualitied进行限定。

注意:使用@Resource也要注意添加配置文件到Spring<context:component-scan><!--<context:component-scan>的使用,是默认激活<context:annotation-config>功能-->

 

学习了自定义注解:自定义注解及其属性

//    先使用元注解对注解进行注解,定义注解支持的使用范围和保留时间长短。
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

public @interface Annotation {
//    定义注解的成员变量,成员变量必须以()结尾,使用default指定默认值,如果不设置默认值,使用注解时必须赋值。
   String name() default "guojing";
int id() default 113;
}

使用注解:

public class AnnotationTest {
//    对字段使用注解
   @Annotation(name="nihao")
public static int a;
//    对方法使用注解
   @Annotation(id=3)
public void test(){
System.out.println("testtest");
}
}

解析注解:

//这里是自定义注解的解析
public class AnnotationProcessor {
public static void main(String[] agrs) {
try {
//            加载AnnotationTest
           Class clazz = AnnotationProcessor.class.getClassLoader().loadClass("com.ptteng.AnnotationTest");
//           获取AnnotationTest类的属性
           Field[] fields = clazz.getDeclaredFields();
//            遍历AnnotationTest类的属性
           for (Field field : fields) {
//                获取AnnotationTest类里面使用了注解的地方的属性
               Annotation annotation = field.getAnnotation(Annotation.class)
System.out.println("name===" + annotation.name() + "有一个id===" + annotation.id());
}
Method[] methods = clazz.getMethods();
for (Method method : methods) {
//                判断AnnotationTest类中是否有方法(带有Annotation的注解的)
               if (method.isAnnotationPresent(Annotation.class)) {
Annotation annotation = method.getAnnotation(Annotation.class);
System.out.println("name===" + annotation.name() + "我是一盒id===" + annotation.id());
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}

明天计划的事情:开始任务2

遇到的问题;

收获:学到了一些自定义注解的知识,对任务一的知识有加强了理解。


返回列表 返回列表
评论

    分享到