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