[SSM] Spring integra Mybatis

Por qué aprender a integrar el framework ORM de Mybatis

Aunque el módulo JDBCTemplate se proporciona en Spring, que ha resuelto en gran medida la complejidad del código JDBC, todavía se escribe junto con el código Java. Por el contrario, Mybatis escribe sentencias Sql en el archivo de configuración, lo que hace que las sentencias SQL y los programas estén poco acoplados. Además, se proporcionan algunas etiquetas para que SQL pueda ser dinámico. Sobre la base de ORM, si desea utilizar mejor DI, AOP, procesamiento de transacciones, soporte de Junit, etc. de Spring para lograr resultados, la tendencia general es aprender a usar el marco Spring para integrar Mybatis.

Pasos de implementación

  • Paso 1: preparar la tabla de la base de datos

inserte la descripción de la imagen aquí

  • Paso 2: Cree un módulo en IDEA e introduzca las siguientes dependencias
  1. contexto de primavera
  2. primavera-jdbc
  3. controlador mysql
  4. mi zapato
  5. mybatis-spring: mybatis提供的Dependencia integrada con spring framework
  6. druida: grupo de conexiones de druida
  7. junta
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.0.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.16</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • Paso 3: Realizar en base a la arquitectura de tres niveles, así que cree todos los paquetes por adelantado
  1. XXXX.mapper
  2. XXXX.servicio
  3. XXXX.servicio.impl
  4. xxx.bean

inserte la descripción de la imagen aquí

  • Paso 4: escriba la
    cuenta del bean y créela de acuerdo con la especificación del bean

inserte la descripción de la imagen aquí

  • Paso 5: Escriba la interfaz de Mapper
    Interfaz de AccountMapper para definir el método de interacción con la base de datos
package com.ncpowernode.spring.mappers;

import com.ncpowernode.spring.bean.Account;

import java.util.List;

public interface AccountMapper {
    
    

    List<Account> selectAll();
    
    Account selectByActno(String actno);

    int insert(Account account);

    int deleteByActno(String actno);

    int update(Account account);
}

  • Paso 6: Escriba el archivo de configuración del mapeador
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.ncpowernode.spring.mappers.AccountMapper">

    <select id="selectAll" resultType="account">
        select * from t_act;
    </select>

    <insert id="insert">
        insert into t_act values(#{actno},#{balance})
    </insert>

    <delete id="deleteByActno">
        delete from t_act where actno = #{actno};
    </delete>

    <select id="selectByActno" resultType="account">
        select * from t_act where actno = #{actno};
    </select>

    <update id="update">
        update t_act set balance = #{balance} where actno = #{actno};
    </update>

</mapper>
  • Paso 7: escriba la interfaz de servicio y la clase de implementación de la interfaz de servicio

interfaz de servicio

package com.ncpowernode.spring.service;

import com.ncpowernode.spring.bean.Account;

import java.util.List;

public interface AccountService {
    
    

    int save(Account act);

    int deleteByActno(String actno);

    List<Account> getAll();

    void transfer(String fromActno,String toActno,double money);

}

implementación del servicio

package com.ncpowernode.spring.service.impl;

import com.ncpowernode.spring.bean.Account;
import com.ncpowernode.spring.mappers.AccountMapper;
import com.ncpowernode.spring.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import java.util.List;

@Service("accountService")
@Transactional
public class AccountServiceImpl implements AccountService {
    
    

    @Autowired
    @Qualifier("accountMapper")
    private AccountMapper accountMapper;

    @Override
    public int save(Account act) {
    
    
        return accountMapper.insert(act);
    }

    @Override
    public int deleteByActno(String actno) {
    
    
        return accountMapper.deleteByActno(actno);
    }

    @Override
    public List<Account> getAll() {
    
    
        return accountMapper.selectAll();
    }

    @Override
    public void transfer(String fromActno, String toActno, double money) {
    
    
        // 判断余额
        Account fromAccount = accountMapper.selectByActno(fromActno);
        if (fromAccount.getBalance()<money) throw new RuntimeException("余额不足");
        // 更新数据库
        Account toAccount = accountMapper.selectByActno(toActno);
        fromAccount.setBalance(fromAccount.getBalance()-money);
        toAccount.setBalance(toAccount.getBalance()+money);
        int cnt = accountMapper.update(fromAccount);
        cnt += accountMapper.update(toAccount);
        // 判断业务是否实现成功
        if(cnt!=2) throw new RuntimeException("转账失败");
    }
}

  • Paso 8: Escriba
    la información relacionada con el grupo de conexiones de la base de datos del archivo de configuración jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/???
jdbc.username=???
jdbc.password=???
  • Paso 9: escribir el archivo de configuración principal mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <!--驼峰命名自动映射,默认false-->
        <setting name="mapUnderscoreToCamelCase" value="false"/>
        <!--设置懒加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--配置日志,可以帮助我们查看sql执行信息-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

</configuration>
  • Paso 10: Escriba el archivo de configuración spring.xml
    Escaneo de componentes
    Importe archivos de propiedades externos
    Fuente de datos
    Configuración de SqlSessionFactoryBean (inyecte la ruta del archivo de configuración principal de mybatis, especifique el paquete de alias, inyecte la fuente de datos)
    Configurador de escaneo de Mapper (especifique el paquete escaneado)
    administrador de transacciones (DataSourceTransactionManager, inyecte datos fuente)
    iniciar anotación de transacción (inyectar administrador de transacciones)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
                            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--组件扫描-->
    <context:component-scan base-package="com.ncpowernode.spring.service"/>
    <!--引入外部的属性文件-->
    <context:property-placeholder location="jdbc.properties"/>
    <!--数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--配置SqlSessionFactoryBean-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--指定别名包-->
        <property name="typeAliasesPackage" value="com.ncpowernode.spring.bean"/>
        <!--指定mybatis核心配置文件-->
        <property name="configLocation" value="mybatis-config.xml"/>
    </bean>
    
    <!--配置Mapper扫描配置器-->
    <!--主要扫描mapper接口,生成代理类-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ncpowernode.spring.mappers"/>
    </bean>
    
    <!--事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!--启动事务注解-->
    <tx:annotation-driven transaction-manager="txManager"/>
    

</beans>
  • Paso 11: escribir un programa de prueba, agregar transacciones y probar.
	@Test
    public void testSM(){
    
    
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        AccountService accountService = applicationContext.getBean("accountService", AccountServiceImpl.class);
        accountService.getAll().forEach(System.out::println);
        accountService.transfer("act-001","act-002",10000.0);
    }

Resultados de la prueba

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_63691275/article/details/129474765
Recomendado
Clasificación