Spring3

Spring JdbcTemplate:
 Spring提供的jdbc模板,类似于dbutils
 使用:
   导入Spring相关jar包
   导入spring-jdbc-4.2.4.RELEASE.jar
   spring-tx-4.2.4.RELEASE.jar
   导入数据库驱动jar包
 入门:
   //1.创建一个数据库连接池-->Spring内置连接池
   DriverManagerDataSource dataSource = new DriverManagerDataSource();
   //2.设置dataSource相关属性
   dataSource.setDriverClassName("com.mysql.jdbc.Driver");
   dataSource.setUrl("jdbc:mysql:///数据库名");
   dataSource.serUsername("root");
   dataSource.setPassword("root");
   //3.创建一个JdbcTemplate
   JdbcTemplate jdbcTemplate = new JdbcTemplate();
   jdbcTemplate.setDataSource(dataSource);
   //4.执行操作
   jdbcTemplate.execute(sql);
 使用配置完成入门案例:
   <!-- 配置连接池,Spring内置连接池 -->
   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql:///数据库名"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
   </bean>
   <!-- 配置自定义连接池 -->
   <bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value=""/>
    <property name="jdbcUrl" value=""/>
    <property name="user" value=""/>
    <property name="password" value=""/>
   </bean>
   <!-- 配置JdbcTemplate -->
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
     <property name="dataSource" ref=""/>
   </bean>
   <!-- 引入外部properties配置文件 -->
   <context:property-placeholder location="classpath:xxx.properties"/>
   <!-- 外部配置文件在核心配置文件中的使用 -->
   <value="${key}"/>
   //外部配置文件在代码中的使用
   @Value(value="${key}")
   private String value;
 使用JdbcTemplate完成CRUD操作:
   insert,delete,update操作:
     jdbcTemplate.update(sql,params):
   select操作:
     1、简单数据返回:
       jdbcTemplate.queryForObject(sql,返回值类型.class,params);
     2、返回单个对象:
       jdbcTemplate.queryForObject(sql,new RowMapper<T>(){
         @Override
         public T maprow(Result rs, int rowNum) throws SQLException{
           数据封装操作
         }
       },params);
     3、返回对象的集合:
       jdbcTemplate.query(sql,new RowMapper<T>(){
       @Override
         public T maprow(Result rs, int rowNum) throws SQLException{
         数据封装操作
         }
       },params);
     4、返回单个对象(简化):
       jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<T>(T.class),params);
     5、返回对象的集合(简化):
       jdbcTemplate.query(sql,new BeanPropertyRowMapper<T>(T.class),params);

Spring的事务管理:【*****】
 dao层的配置:
   让dao继承JdbcDaoSupport类,这个类创建了JdbcTemplate,只需注入一个dataSource即可.
 Spring事务管理的优点:
   1、提供一致的对于不同事务管理的API
   2、支持声明式事务管理【****】
   3、编程事务管理(了解)
   4、优秀的整合与Spring的数据访问
 Spring事务管理的注意功能-->三个接口
   1、PlatformTransactionManager
     -->事务管理器,选择相关平台管理事务(jdbc hibernare jpa...)
   2、TransactionDefinition
     -->定义事务的相关信息(隔离,传播,超时,只读)
   3、TransactionStatus
     -->描述事务的具体状态
 PlatformTransactionManager:
   -->平台事务管理器
   -->DataSourceTransactionManager 主要针对jdbcTemplate开发,MyBatis开发
   -->HibernateTransactionManager 主要针对Hibernate开发
   -->JpaTransactionManager 主要针对JPA开发
 TransactionDefinition
   -->事务的定义信息
   -->隔离:
     事物的隔离级别.
   -->超时:
     默认值是-1,代表使用数据库默认的超时时间
   -->只读:
     true/false,如果选true一般是在select操作
   -->传播:
     propagation_required 默认值,两个操作处于同一个事务,如果之前没有事务,新建一个事务
     propagation_requires_new 两个操作处于不同的事务
     propagation_nested 嵌套事务,使用SavePoint来实现,事务回滚到指定的savepoint,【只对                  DataSourceTransactionManager有作用】
     propagation_supports 支持当前事务,如果不存在,就不使用事务
     propagation_mandatory 支持当前事务,如果不存在,抛出异常
     propagation_not_supported 非事务运行,如果事务存在,挂起当前事务
     propagation_never 非事务运行,如果有事务存在,抛出异常
 TransactionStatus:
   -->事务的状态:
   --> boolean isNewTransaction();
   --> boolean hasSavepoint();
   --> void setRollbackOnly();
   --> boolean isRollbackOnly();
   --> void flush();
   --> boolean isCompleted();
 声明式事务管理:
   事务管理方式:
     1、编码方案 --> 不建议使用,具有侵入性;
     2、声明式事务控制 --> 基于AOP对目标进行代理,添加around环绕通知,不具有侵入性;
   基于XML配置声明式事务管理:
     1、引入aop和tx的名称空间
     2、核心文件的配置
       <!-- 配置数据源(连接池) -->

       <!-- 配置事务管理器 -->
       <bean id="事务管理器"                                         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="数据源"/>
       </bean>
       <!-- 配置通知 -->
       <tx:advice id="通知" transaction-manager="事务管理器">
         <tx:attributes>
           <tx:method name="要进行事务管理的方法名"/>
             <!--
             name 必须 要进行事务管理的方法名
             isolation 可选 设置事务隔离级别,默认default
             propagation 可选 设置事务传播,默认required
             timeout 可选 超时时间,默认-1
             read-only 可选 默认false
             rollback-for 可选 设置一个异常,如果产生该异常,事务回滚
        no-rollback-for 可选 设置一个异常,如果产生该异常,事务部回滚
             -->
       </tx:attributes>
     </tx:advice>
     <!-- 配置切面 -->
     <aop:config>
       <aop:poincut exepression="切点表达式" id="切点"/>
       <aop:advisor advice-ref="通知" point-ref="切点"/>
     </aop:config>
 基于Annotation声明式事务管理:
   1、在核心配置文件
     配置是注解生效的配置
     <!-- 开启注解事务控制 -->
     <tx:annotation-driven transaction-manager="transactionManager"/>
   2、在需要事务管理的类或方法上添加注解:
     @Transactional
   对于xml方式和annotation方式的优缺点:
     xml:便于维护
     annotaion:方便
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值