configuración del complemento mybatis

Un prólogo

La configuración del complemento Mybatis sigue siendo muy importante, ya sea la mejora de SQL, el registro, el manejo de excepciones es una muy buena opción, los ejemplos en este artículo mejoran los parámetros de los datos insertados;

Implementación de dos complementos mybatis

2.1 Crear declaración de tabla

CREATE TABLE `order` (
  `id` int(11) NOT NULL COMMENT '订单编号',
  `order_name` varchar(255) DEFAULT NULL COMMENT '订单名称',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码

Entidad

public class Order {

    // 主键
    private Long id;
    // 订单名称
    private String order_name;
    // 创建时间
    private LocalDateTime create_time;
    // 省略set get
}    
复制代码

2.2 mapeador

archivo de mapa sql

<?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.zszxz.plugin.mapper.OrderMapper">
    <insert id="addOrder">
        insert into `order` (
        order_name
        ,create_time)
        values (
        #{order_name},
        #{create_time}
        )

    </insert>
</mapper>
复制代码

interfaz de mapeador

public interface OrderMapper {

    int addOrder(Order order);
}
复制代码

2.3 complemento

La idea de implementación es implementar la Interceptorinterfaz, luego obtener los parámetros, mejorar los parámetros, continuar ejecutando el método y finalmente inyectar el interceptor en la configuración de mybatis

/**
 * @Author lsc
 * <p> mybatis 插件</p>
 */
@Intercepts({ @Signature(type = Executor.class, method = "update"
        , args = { MappedStatement.class, Object.class}) })
public class AddPlugin  implements Interceptor {

    public Object intercept(Invocation invocation) throws Throwable {
        MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
        String sqlId = mappedStatement.getId();
        // 参数-此时为order 对象
        Object parameter = invocation.getArgs()[1];
        // 参数:com.zszxz.plugin.entity.Order@48503868
        System.out.print("参数:"+parameter);
        // 拦截参数,对参数进行增强
        Order order = (Order) parameter;
        order.setCreate_time(LocalDateTime.now());
        // 此时插入数据库,会有时间插入
        return invocation.proceed();
    }

    public Object plugin(Object target) {
        return Plugin.wrap(target,this);
    }

    public void setProperties(Properties properties) {

    }
}
复制代码

@SignatureEs una firma, como una matriz, puede interceptar diferentes parámetros de método en el mismo interceptor;

methodPuede especificar la consulta para indicar la consulta y actualizar para agregar, eliminar o modificar; el método específico depende del método proporcionado por la interfaz de intercepción;

Ejecutor (actualización, consulta, flushStatements, commit, rollback, getTransaction, close, isClosed)

Además de typela adición al Ejecutor puede interceptar intercepción de las siguientes interfaces:

  • ParameterHandler (getParameterObject, setParameters)

  • ResultSetHandler (handleResultSets, handleOutputParameters)

  • Procesamiento previo a la compilación StatementHandler (preparación, parametrización, lote, actualización, consulta)

mappedStatement.getSqlCommandType();El tipo de enunciado que se puede obtener a menudo es útil al hacer juicios

public enum SqlCommandType {
    UNKNOWN,
    INSERT,
    UPDATE,
    DELETE,
    SELECT,
    FLUSH;

    private SqlCommandType() {
    }
}
复制代码

2.4 Configuración

Agregue la configuración del complemento a mybatis-config.xml,

	<plugins>
        <plugin interceptor="com.zszxz.plugin.config.AddPlugin">
            <property name="somepropertis" value="propertes_value"/>
        </plugin>
    </plugins>
复制代码

El código fuente se explica en la columna de Knowledge Seeker, o Princess No. tiene un enlace de código fuente;

Supongo que te gusta

Origin juejin.im/post/5e959b3551882573bb790032
Recomendado
Clasificación