Archivos XML de Mapeadores en MyBatis

Declaraciones de Consluta de Datos

Elemento select

<select
  id="obtenerUsuario"
  parameterType="int"
  resultType="java.util.Map"
  resultMap="mapaResultados"
  flushCache="false"
  useCache="true"
  timeout="5000"
  fetchSize="100"
  statementType="PREPARED"
  resultSetType="SCROLL_SENSITIVE">

  • resultType="java.util.Map": Retorna un HashMap donde las claves son nombres de columna
  • resultMap="mapaResultados": Asigna resultados según configuración personalizada

Declaraciones de Modificación de Datos

<insert
  id="agregarProducto"
  parameterType="com.ejemplo.Producto"
  flushCache="true"
  statementType="CALLABLE"
  keyProperty="codigo"
  useGeneratedKeys="true"
  timeout="15">

<update
  id="actualizarProducto"
  parameterType="com.ejemplo.Producto"
  flushCache="true">

<delete
  id="eliminarProducto"
  parameterType="com.ejemplo.Producto">

Claves Autogeneradas

<insert id="insertarRegistro" useGeneratedKeys="true"
    keyProperty="identificador">
  INSERT INTO productos (nombre, precio, categoria)
  VALUES (#{nombre}, #{precio}, #{categoria})
</insert>

Claves Manuales

<insert id="establecerClave" parameterType="item">
  <selectKey keyProperty="id" order="BEFORE" resultType="long">
    SELECT MAX(identificador) + 1 FROM inventario
  </selectKey>
  INSERT INTO inventario (id, nombre, cantidad) 
  VALUES (#{id}, #{nombre}, #{cantidad})
</insert>

Elemento foreach

<foreach
  collection="listaIds"
  item="elemento"
  index="indice"
  open="("
  close=")"
  separator=",">
  #{elemento}
</foreach>

Casos de uso para collection:

  • Parámetro único tipo List: collection="list"
  • Parámetro único tipo array: collection="array"
  • Múltiples parámetros: usar objeto conetnedor
List<Documento> buscarPorIds(List<Long> identificadores);
<select id="buscarPorIds" resultMap="mapaDocumentos">
  SELECT id, titulo, contenido
  FROM documentos
  WHERE id IN
  <foreach collection="list" item="docId" open="(" close=")" separator=",">
    #{docId}
  </foreach>
</select>

SQL Reutilizable

<sql id="sentenciaBase">
  INSERT INTO empleados (nombre, departamento, salario)
  VALUES (#{nombre}, #{depto}, #{salario})
</sql>

<insert id="agregarEmpleado" parameterType="empleado">
  <include refid="sentenciaBase"/>
</insert>

Mapeo de Resultados

class Empleado {
  private int id;
  private String nombre;
  private Departamento departamento;
  private List<Proyecto> proyectos;
}
<resultMap id="mapaEmpleado" type="Empleado">
  <id property="id" column="emp_id"/>
  <result property="nombre" column="emp_nombre"/>
  <association property="departamento" column="depto_id"/>
  <collection property="proyectos" column="proy_id"/>
</resultMap>

Configuración de Caché

<cache/>

Comportamiento predeterminado:

  • Almacena resultados de consultas SELECT
  • Actualiza caché con operaciones INSERT/UPDATE/DELETE
  • Política de reemplazo LRU
<cache
  eviction="FIFO"
  flushInterval="30000"
  size="2048"
  readOnly="false"/>

Políticas de evicción disponibles:

  • FIFO: Primero en entrar, primero en salir
  • LRU: Menos recientemente usado (predeterminado)
  • SOFT: Referencias suaves
  • WEAK: Referencias débiles

Etiquetas: MyBatis xml-mapeo sql-dinamico mapeo-resultados cache

Publicado el 7-24 00:56