Spring control de transacciones integrado de mybatis

1. Control de transacciones de mybatis

  1. Transacción Mybatis: JDBC | Manage no se confirmará automáticamente de forma predeterminada.
  2. Transacción mybatis integrada en Spring : la transacción se envía automáticamente de forma predeterminada.
    Paquete requerido: paquete mybatis-spring-xxx.jar; paquete spring-tx-xxxx.jar

Esencia: entregar los asuntos a la gerencia de primavera

2. Control de transacciones

2.1 Asuntos
2.1.1 Concepto de transacción

Transacción : un conjunto de operaciones lógicamente, todas tienen éxito o todas fallan.

El propósito de las cosas es resolver el problema de [inconsistencia de datos].

2.1.2 Características de la transacción: (ACID)

Atomicidad (A): Transacción indivisible
Consistencia (C): La integridad de los datos permanece consistente antes y después de que se ejecuta la transacción.
Aislamiento (I): Cuando se ejecuta una transacción, no debe ser perturbada por otras transacciones
Persistencia (D) : Una vez finalizado, los datos se guardarán permanentemente en la base de datos.

2.1.3 Tres tipos de problemas de lectura de transacciones

Si no se considera el aislamiento, la transacción consta de tres tipos de problemas de lectura:
Lectura sucia : una transacción lee datos no confirmados de otra transacción.
Lectura no repetible : la lectura de una transacción a otra transacción ha confirmado datos (actualización), lo que da como resultado resultados inconsistentes de múltiples consultas de una transacción.
Lectura ficticia : una transacción lee los datos enviados por otra transacción (insertar), lo que da como resultado resultados inconsistentes de múltiples consultas de una transacción.
Nota: Problema de actualización de pérdida de acceso concurrente: Java (bloqueo) / base de datos (bloqueo)

2.1.4 Nivel de aislamiento de transacciones:

Establecer el nivel de aislamiento de la transacción puede resolver eficazmente los tres tipos de problemas de lectura causados ​​por las características de la transacción hasta cierto punto:

  1. Lectura no comprometida: todas las situaciones anteriores pueden suceder.
  2. Lecturas enviadas: Evite las lecturas sucias, pero no repita las lecturas. Las lecturas virtuales son posibles.
  3. Lectura repetible: evite lecturas sucias, lecturas no repetibles, pero pueden ocurrir lecturas virtuales.
  1. Serializable: Evite todas las situaciones anteriores. El rendimiento del sistema es muy bajo.

2.2 Gestión de transacciones en Spring

Arquitectura de tres niveles: capa web: Servlet / jsp ----> capa de servicio—> capa dao / mapeador
Desarrollo por capas: el negocio está en la capa de servicio.

2.2.1. Spring proporciona una API de gestión de transacciones
2.2.1.1.PlatformTransactionManager: Administrador de transacciones de la plataforma.
  1. commit (estado de TransactionStatus)
  2. getTransaction (definición de TransactionDefinition)
  3. rollback (estado de TransactionStatus)
2.2.1.2. TransactionDefinition: Definición de transacción
  1. ISOLation_XXX: nivel de aislamiento de transacciones.
  2. PROPAGATION_XXX: Comportamiento de propagación de transacciones (no en JDBC, para resolver problemas de desarrollo reales).
  3. Timeout: tiempo de vencimiento
2.2.1.3. TransactionStatus: estado de la transacción
  1. ¿Hay un punto de guardado?
  2. ¿Es una nueva transacción?
  3. Si la transacción se ha comprometido
2.2.1.4. Relación entre los tres

PlatformTransactionManager establece transacciones de administración de información relacionada con transacciones a través de TransactionDefinition. Durante el proceso de administración de transacciones, se generan algunos estados de transacción: el estado es registrado por TransactionStatus.

2.2.2 API detallada:

Spring proporciona diferentes implementaciones de la interfaz PlatformTransactionManager para diferentes marcos de persistencia


  1. Se usa cuando org.springframework.jdbc.datasource.DataSourceTransactionManager usa Spring JDBC o iBatis para datos persistentes

  2. Se usa cuando org.springframework.orm.hibernate3.HibernateTransactionManager usa la versión Hibernate3.0 para datos persistentes

  3. Se usa cuando org.springframework.orm.jpa.JpaTransactionManager usa JPA para la persistencia
  4. org.springframework.jdo.JdoTransactionManager se usa
    cuando el mecanismo de persistencia es Jdo
  5. org.springframework.transaction.jta.JtaTransactionManager
    usa una implementación JTA para administrar transacciones, que debe usarse cuando una transacción abarca varios recursos

2. Implementación de la transacción de primavera

1) Transacción manual (programación) (comprensión de demostración)

Paso 1: Qué métodos de la capa empresarial requieren transacciones (piratería).
UserInfoServiceImpl1.zz (int from, int to, int money);
Paso 2: Configure el administrador de transacciones en xml (los diferentes métodos de administración de transacciones de orm framework son diferentes)

            (orm框架:mybatis,hibernate,jpa,jdbcTemplate......)
        <bean  id="txTransaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager  ">
            <property name="dataSource" ref="dataSource"/>
        </bean>

Paso 3: Defina la plantilla de transacción TransatcionTemplate class
new TransatcionTemplate (administrador de transacciones) en la clase empresarial ;

Paso 4: en el método que requiere la gestión de transacciones

                transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    
    

                protected void doInTransactionWithoutResult(TransactionStatus status) {
    
    
                    try {
    
    
                        updateOperation1();//持久层操作1   扣二狗子的300
                        updateOperation2();//持久层操作2   增加付自强300
                    } catch (SomeBusinessException ex) {
    
    
                        status.setRollbackOnly();
                    }
                }
            });

Paso 5: prueba, llama al método de la clase empresarial

    @Autowired
    
    private IUserInfoService iUserInfoService;
    @Test
    public void testZZ() {
    
    
        iUserInfoService.zz(1, 200, 300);//没有代理  调用的就是目标对象的目标方法
    }
2) Asuntos declarativos (desarrollo)
第1步:业务的层的哪些方法需要事务(黑客)。
UserInfoServiceImpl1.zz(int from ,int to ,int money);

Paso 2: Configure el administrador de transacciones en xml (los diferentes métodos de administración de transacciones del marco de orm son diferentes)

       (orm框架:mybatis,hibernate,jpa,jdbcTemplate......)
        <bean  id="txTransaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager  ">
            <property name="dataSource" ref="dataSource"/>
        </bean>
  第3步:xml配置中定义切面
    <!-- 1.切面 -->
    <tx:advice id="ndAdvice"  transaction-manager="txTransaction">
            <tx:attributes>
                <!-- 哪个方法需要使用什么事务:哪个屁眼需要插入黑板刷
                zz*:所有以zz开始的方法名的所有方法
                *zz: 所有以zz结束的方法名的所有方法
                -->
                <tx:method name="zz*" />
                <!-- *  其他方法使用默认事务   事务是只读的,就表名事务内不能对数据进行更新。-->
                <tx:method name="*"  read-only="true"/>
        </tx:attributes>
    </tx:advice>

Paso 4: la configuración xml genera automáticamente el objeto proxy del método comercial de acuerdo con el punto de corte + mejora

3) Gestión de transacciones basada en anotaciones de primavera

Paso 1: habilitar la transacción de anotación

<tx:annotation-driven transaction-manager="transactionManager"/> 

Paso 2: use @Transactional para indicar el método que necesita transacción

Paso 3: prueba

Supongo que te gusta

Origin blog.csdn.net/weixin_46822085/article/details/108877231
Recomendado
Clasificación