day_05

Spring第五天java

2016年11月4日程序员

9:33spring

 

1:切面的执行顺序sql

 

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

1.让目标方法执行。express

2.执行下一个通知安全

当执行时若是还有下一个通知 就会先去执行该通知。直到全部的通知执行完毕。最后执行目标方法。而且程序按照递归(嵌套)的方式执行。优化

 

2.Spring和JDBC整合 url

1.第一步导入jar包spa

 

 

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" 遇到全部的异常都不回滚

本站公众号
   欢迎关注本站公众号,获取更多信息