day_05

Spring第五天

2016年11月4日

9:33

1:切面的执行顺序

说明:当在切面中执行环绕通知中的proceed方法时,它有两个作用。

1.让目标方法执行。

2.执行下一个通知

当执行时如果还有下一个通知 就会先去执行该通知。直到所有的通知执行完毕。最后执行目标方法。并且程序按照递归(嵌套)的方式执行。

2.Spring和JDBC整合

1.第一步导入jar包

2.配置数据源

<!--spring和JDBC进行整合  -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="${c3p0.driver}"></property>

<property name="jdbcUrl" value="${c3p0.url}"></property>

<property name="user" value="${c3p0.user}"></property>

<property name="password" value="${c3p0.password}"></property>

</bean>

3.配置JDBCTemplate

这个是jdbc模板类,可以通过Spring为我们提供的版本进行快速的增删改操作。不需要像原生的jdbc那样复杂的代码。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<!--配置数据源  -->

<property name="dataSource" ref="dataSource"></property>

</bean>

4.模板类的使用

JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");

String sql = "insert into user values(null,?,?)";

int row = jdbcTemplate.update(sql, "白骨精",5000);

System.out.println("影响的行数"+row);

说明:模板类自动的会使用预编译的方式。保证数据的安全。

使用预编译时 参数用“?”代替。具体的参数赋值 在执行模板方法时指定

jdbcTemplate.update(sql, "白骨精",5000);

所有的增删改操作 都用jdbcTemplate.update(sql,arg0,arg1);

5.JDBC模板类中的查询方法

通常情况下 查询的结果结通过List进行封装。每一个list中的元素都是一个对象(实体类对象),而原始的模板对象方法jdbcTemplate.queryForList(sql);返回一个List<Map<key,value>>的形式 这样不符合我们的习惯。并且处理起来很麻烦。

5.1转化方法

5.2

两种转化方式的区别:

第二种转化方法比较浪费时间。因为底层通过各种反射调用。对象的属性判断才能进行赋值。。

所有建议使用接口的形式进行转化。

6:说明

虽然jdbcTemplate在使用上比jdbc原生的简单。可是在现实的开发中几乎不用。

7:Spring的声明式的事务处理

1.可以指定具体的方法来控制事务。例如增删改 添加事务,而查询方法和其他方法都不需要事务。

2.只要在Spring中使用了声明式的事务处理,将来所有的事务都不需要程序员自己维护。spring会非常智能帮你维护数据库事务。

分析:

问题:如果控制事务。

专门的事务管理器。专门负责数据源的管理。

步骤:

1.修改配置文件的头

2.配置事务管理器

<!--事务管理器的id 默认都叫 transactionManager  -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"></property>

</bean>

3.配置事务通知

<!-- method  name="事务指定的方法"

propagation = REQUIRED (必须的)    将来执行addUser方法的时候就是添加事务。

propagation="SUPPORTS" 事务可有可无。

read-only="true"  spring会自动优化 查询效率更高

-->

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>

<tx:method name="*" propagation="SUPPORTS"/>

4.配置切面

<aop:config>

<aop:pointcut expression="execution(* service..*(..))" id="pc"/>

<aop:advisor advice-ref="tx" pointcut-ref="pc"/>

</aop:config>

8:传播属性

propagation="REQUIRED"

propagation="SUPPORTS"

实现事务的传播属性REQUIRED,可以做到多表操作时事务的一致性。

propagation="SUPPORTS"

如果一直操作有事务。那么当执行find()时,这个方法也会添加事务。

9:事务的回滚策略

1.当程序执行遇到运行时异常时 事务会回滚。

2当程序执行遇到检查异常时 事务不会回滚

3.修改回滚策略

rollback-for="java.sql.SQLException"  遇到那种异常 事务回滚

no-rollback-for="java.la1:切面的执行顺序

说明:当在切面中执行环绕通知中的proceed方法时,它有两个作用。

1.让目标方法执行。

2.执行下一个通知

当执行时如果还有下一个通知 就会先去执行该通知。直到所有的通知执行完毕。最后执行目标方法。并且程序按照递归(嵌套)的方式执行。

2.Spring和JDBC整合

1.第一步导入jar包

2.配置数据源

<!--spring和JDBC进行整合  -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="${c3p0.driver}"></property>

<property name="jdbcUrl" value="${c3p0.url}"></property>

<property name="user" value="${c3p0.user}"></property>

<property name="password" value="${c3p0.password}"></property>

</bean>

3.配置JDBCTemplate

这个是jdbc模板类,可以通过Spring为我们提供的版本进行快速的增删改操作。不需要像原生的jdbc那样复杂的代码。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<!--配置数据源  -->

<property name="dataSource" ref="dataSource"></property>

</bean>

4.模板类的使用

JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");

String sql = "insert into user values(null,?,?)";

int row = jdbcTemplate.update(sql, "白骨精",5000);

System.out.println("影响的行数"+row);

说明:模板类自动的会使用预编译的方式。保证数据的安全。

使用预编译时 参数用“?”代替。具体的参数赋值 在执行模板方法时指定

jdbcTemplate.update(sql, "白骨精",5000);

所有的增删改操作 都用jdbcTemplate.update(sql,arg0,arg1);

5.JDBC模板类中的查询方法

通常情况下 查询的结果结通过List进行封装。每一个list中的元素都是一个对象(实体类对象),而原始的模板对象方法jdbcTemplate.queryForList(sql);返回一个List<Map<key,value>>的形式 这样不符合我们的习惯。并且处理起来很麻烦。

5.1转化方法

5.2

两种转化方式的区别:

第二种转化方法比较浪费时间。因为底层通过各种反射调用。对象的属性判断才能进行赋值。。

所有建议使用接口的形式进行转化。

6:说明

虽然jdbcTemplate在使用上比jdbc原生的简单。可是在现实的开发中几乎不用。

7:Spring的声明式的事务处理

1.可以指定具体的方法来控制事务。例如增删改 添加事务,而查询方法和其他方法都不需要事务。

2.只要在Spring中使用了声明式的事务处理,将来所有的事务都不需要程序员自己维护。spring会非常智能帮你维护数据库事务。

分析:

问题:如果控制事务。

专门的事务管理器。专门负责数据源的管理。

步骤:

1.修改配置文件的头

2.配置事务管理器

<!--事务管理器的id 默认都叫 transactionManager  -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"></property>

</bean>

3.配置事务通知

<!-- method  name="事务指定的方法"

propagation = REQUIRED (必须的)    将来执行addUser方法的时候就是添加事务。

propagation="SUPPORTS" 事务可有可无。

read-only="true"  spring会自动优化 查询效率更高

-->

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>

<tx:method name="*" propagation="SUPPORTS"/>

4.配置切面

<aop:config>

<aop:pointcut expression="execution(* service..*(..))" id="pc"/>

<aop:advisor advice-ref="tx" pointcut-ref="pc"/>

</aop:config>

8:传播属性

propagation="REQUIRED"

propagation="SUPPORTS"

实现事务的传播属性REQUIRED,可以做到多表操作时事务的一致性。

propagation="SUPPORTS"

如果一直操作有事务。那么当执行find()时,这个方法也会添加事务。

9:事务的回滚策略

1.当程序执行遇到运行时异常时 事务会回滚。

2当程序执行遇到检查异常时 事务不会回滚

3.修改回滚策略

rollback-for="java.sql.SQLException"  遇到那种异常 事务回滚

no-rollback-for="java.lang.Exception" 遇到所有的异常都不回滚

时间: 2024-09-30 06:34:16

day_05的相关文章

python - day06

本节课内容(___大纲___) 模块[常用模块的学习] os . sys json . pickle time . datetime random. string . join shutil shelve xml configparser hashlib [md5 .sha1 .sha256 .sha384 .sha512] logging re subprocess 模块介绍: 模块的分类: 1.标准模块 --系统自带的模块叫标准模块 2.自建模块 --自己写的模块 3.第三方模块 --别人写

&lt;05day&gt;_

上节课内容回顾: 一.闭包函数 1.定义在函数内部的函数 2.该内部函数包含对外部作用域而不是对全局作用域的引用[f2()就是闭包函数] def fi(): x = 1 def f2(): print(x) reyurn f2 f = f1() f() 二.装饰器 1.为什么要有装饰器: 开发封闭原则,对扩展开发的,对修改是封闭的. 2.什么是装饰器: 装饰器本身-->可以是任意可调用对象(列如:函数) 被装饰的对象-->也是任意可调用对象 3.装饰器要遵循的原则: 不修改被装饰器对象的源代码

随机生成登录时的验证码图片

生成随机验证码的代码: 1 package servlet; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.Graphics2D; 7 import java.awt.image.BufferedImage; 8 import java.io.IOException; 9 import java.io.OutputStream; 10 import

C3P0数据库连接池使用中的问题

java.io.FileNotFoundException: D:\javaStudy\javaee\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\day_05\WEB-INF\lib\mchange-commons-java-0.2.3.4.jar (系统找不到指定的文件.) 出现上述异常,很容易想到导入mchange-commons-java-0.2.3.4.jar包,但是仍然无法解决问题.此时会出现 "五月 1