
入职了,在工作了。我不知道该写些什么才能表达此刻的心情,激情无限,有时候觉得写代码挺爽的,按照你的思想,意愿,写出自己的风格,性情。
有时心情十分平静,工作,什么都不用想,可有时又有许多忧愁,
没事的时候写写博客,虽然大多都是copy的,但还是对我有帮助的,写了一遍,就有了印象。

计算机也蛮好玩的,玩玩linux,看看那些底层,知晓下原理,玩玩服务器,累了就看看视频做做项目,

入职了,在工作了。我不知道该写些什么才能表达此刻的心情,激情无限,有时候觉得写代码挺爽的,按照你的思想,意愿,写出自己的风格,性情。
有时心情十分平静,工作,什么都不用想,可有时又有许多忧愁,
没事的时候写写博客,虽然大多都是copy的,但还是对我有帮助的,写了一遍,就有了印象。

计算机也蛮好玩的,玩玩linux,看看那些底层,知晓下原理,玩玩服务器,累了就看看视频做做项目,
走过不少路,
危机感,不思进取,安于现状而不去改变。
注意:DML语句不会自动提交事务!
注意:DLL语句会自动提交事务!所以:DML语句事务提交之前可以回滚,DDL语句不能回滚事务
注:DCL[Data Control language,数据控制语言] 一般包括事务控制语句(TCS)、会话控制语句(SCT)、系统控制语句(SCT)。
如果一个事务中包含了DML语句和DDL语句,那么该事务会被分解成多个事务。首先在DDL之前的所有DML语句会被作为一个事务而一次性提交。然后Oracle会为这个DDL创建一个新的,单语句的事务。如果DDL语句执行失败了,那么DML事务依然成功。 每个DDL语句单独成为一个事务,也就是说DDL语句不能回退。
请注意:用户从Oracle服务器断开连接和用户进程强行中断的后果是不同的。
Oracle提交一个事务之前,必须做以下几件事情:
其中第一步是通过在undo表空间中记录undo日志来完成的。第二步、第三步是通过向SGA中的redo日志缓冲区写记录来完成的。这样当事务回滚时就可以从redo日志找到对应的undo日志,从而找回之前的数据
注意:只有在commit指令被发出后,才会将SGA中重做日志缓冲区的内容刷新到磁盘的redo日志文件。在LGWR进程执行前,重做日志一直存在于内存中,也被称为在线重做日志。
注意当Oracle事务回滚到某个savepoint时,在savepoint之后的所有后续savepoint将失效。但此时Transaction还是活跃且可继续的。这一点不同于整个事务的回滚。
从传统上来说,一个事务只有在完整执行成功或回滚之后,才会进行下一个事务。而自治事务允许在一个事务中调用运行另一个事务,被调用事务执行完成后,调用事务继续执行之前未完成的操作直至事务结束
自治事务在被调用后,将和外围事务完全独立。彼此之间并不共享任何资源或者锁,外围事务所有未提交的改变对自治事务来说都是不可见。自治事务提交后外围事务将可以看到改变。
本文来源于官方文档
- 面向切面编程(AOP)弥补面向对象编程(OOP)通过提供思考程序结构的另一种方式。在OOP中模块化的关键单元是类,而在AOP模块为单位的切面。面对关注点,如事务管理跨多个类型和对象切模块化。(这些关注经常被称为横切在AOP文学的关注。)
- Spring的一个关键组件就是AOP框架。虽然Spring IoC容器并不依赖于AOP,这意味着你不需要使用AOP,如果你不想,AOP补充Spring IoC容器提供了非常强大的中间件解决方案。
advice的类型 :
需导入 aop,aspects 相关jar包
AtithmeticCalculatorImpl.java实现类
package com.dream.apo.impl;
import org.springframework.stereotype.Component;
@Component("atithmeticCalculator1")
public class AtithmeticCalculatorImpl implements AtithmeticCalculator {
@Override
public int add(int i, int j) {
int result=i+j;
return result;
}
@Override
public int sub(int i, int j) {
int result=i-j;
return result;
}
@Override
public int mul(int i, int j) {
int result=i*j;
return result;
}
@Override
public int div(int i, int j) {
int result=i/j;
return result;
}
}
AOP实现代码 LoginAspect.java
package com.dream.apo.impl;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoginAspect {
@Before("execution(public int com.dream.apo.impl.AtithmeticCalculator.*(..) )")
public void beforeMethod(JoinPoint joinPoint){
String methodName=joinPoint.getSignature().getName();
Object []args=joinPoint.getArgs();
System.out.println("the method is "+methodName+"begin with "+Arrays.asList(args));
}
@After("execution(public int com.dream.apo.impl.AtithmeticCalculator.*(..) )")
public void after(JoinPoint joinPoint){
String methodName=joinPoint.getSignature().getName();
System.out.println("the method is "+methodName+" ends ");
}
@AfterReturning(value="execution(public int com.dream.apo.impl.AtithmeticCalculator.*(..) )",
returning="result")
public void afterReturning(JoinPoint joinPoint,Object result){
String methodName=joinPoint.getSignature().getName();
System.out.println("the method is "+methodName+" return ends "+result);
}
@AfterThrowing(value="execution(public int com.dream.apo.impl.AtithmeticCalculator.*(..) )",
throwing="ex")
public void afterThrowing(JoinPoint joinPoint,Exception ex){
String methodName=joinPoint.getSignature().getName();
System.out.println("the method is "+methodName+" occurs exception "+ex);
}
}
主方法
package com.dream.apo.impl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
AtithmeticCalculator act= (AtithmeticCalculator) ac.getBean("atithmeticCalculator1");
int result=act.add(3, 4);
System.out.println("result="+result);
result=act.div(6, 1);
System.out.println("result="+result);
}
}
applicationContext.xml 配置文件
<context:component-scan base-package="com.dream.apo.impl"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
需要导入以下jar 包
commons-logging.jar
spring-beans-4.2.1.RELEASE.jar
spring-context-4.2.1.RELEASE.jar
spring-core-4.2.1.RELEASE.jar
spring-expression-4.2.1.RELEASE.jar
加这么多就足够了,如果还需要其它功能,请加入其它的jar包
<!-- 通过全类名的方式配置bean -->
<bean id="dao" class="com.dream.hello.Dao"> </bean>
id:bean的名称,在 IOC 容器中必须是唯一的,若 id 没有指定,Spring 自动将权限定性类名作为 Bean 的名字
属性注入
属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象
属性注入使用
属性注入是实际应用中最常用的注入方式
构造方法注入
按索引匹配入参:
配置文件:
<bean id="dao" class="com.dream.hello.Dao">
<constructor-arg value="zhangsan" index="0"></constructor-arg>
<constructor-arg value="12" index="1"></constructor-arg>
</bean>
实体类:要有相对应的构造器和set get方法
public Dao(String name, int age) {
this.name = name;
this.age = age;
}
按类型匹配入参
配置文件:
<bean id="dao" class="com.dream.hello.Dao">
<constructor-arg value="zhangsan" type="java.lang.String"></constructor-arg>
<constructor-arg value="12" type="java.lang.Integer"></constructor-arg>
</bean>
实体类:把int改成Integer,
public Dao(String name, Integer age) {
this.name = name;
this.age = age;
}
- 为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架.
- 作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.
Spring提供了3个模板类
JdbcTemplate主要提供以下4类方法
实现代码:
db.properties
url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
driver=oracle.jdbc.driver.OracleDriver
user=test
password=ztt123456
application.xml
<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置 C3P0 数据源 -->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="jdbcUrl" value="${url}"></property>
<property name="driverClass" value="${driver}"></property>
</bean>
<!-- 配置 Spirng 的 JdbcTemplate -->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
Test.java
测试代码
public class Main extends JdbcDaoSupport{
@Test
public void Test1() {
ApplicationContext context=new ClassPathXmlApplicationContext("application.xml");
Dao bean = (Dao) context.getBean("dao");
bean.method();
}
@Test
public void test1(){
ApplicationContext context=new ClassPathXmlApplicationContext("application.xml");
JdbcTemplate bean = (JdbcTemplate) context.getBean("jdbcTemplate");
System.out.println(bean.toString());
}
@Test
public void test2(){
JdbcTemplate jdbcTemplate2 = getJdbcTemplate();
System.out.println(jdbcTemplate2.toString());
}
}
请自行添加所需jar包和相关配置文件
用于切换当前目录,参数是要切换的目录的路径,可以是绝对路径,也可以是相对路径
cd /root/Docements # 切换到目录 /root/Documents
cd ./path # 切换到当前目录下的path目录中 .表示当前目录
cd ../path # 切换到上层目录中的path目录中 ..表示上一层目录
1. -l :列出长数据串,包含文件的属性与权限数据等
2. -a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
3. -d :仅列出目录本身,而不是列出目录的文件数据
4. -h :将文件容量以较易读的方式(GB,kB等)列出来
5. -R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来
上面的命令也可以组合使用
1. ls -l #以长数据串的形式列出当前目录下的数据文件和目录
2. ls -lR #以长数据串的形式列出当前目录下的所有文件
创建一文件夹的话可以用mkdir 命令
mkdir /tmp/test
创建文件
touch /tmp/a.txt
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件 ,-f 就是直接强行删除
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
注意
使用这个rm -rf的时候一定要格外小心,linux没有回收站的
shutdown -h now
halt
halt -p
-r 表示重启
-h 表示关机
halt命令的"-p" 选项表示终止系统后中断电源(需主板硬件支持)
shutdown -r now
shutdown -r +15 系统将于15分钟后重启
reboot