1. Etiqueta CRUDA
1.1.seleccionar
instrucción de consulta select-write sql
Descripción de varios atributos en select:
id atributo: el identificador único de la declaración bajo el espacio de nombres actual. Debe Los nombres de los métodos en las interfaces id y mapper deben ser los mismos.
resultType: asigna el conjunto de resultados al tipo de objeto de java. Requerido (elija uno de resultMap)
parameterType: el tipo de parámetro pasado. Puede ser omitido
1.2 inserción
Descripción de varios atributos de inserción:
id: identificador único, escríbalo casualmente, manténgalo único bajo el mismo espacio de nombres, después de usar el proxy dinámico, debe ser coherente con el nombre del método
parámetroType: el tipo del parámetro, después de usar el proxy dinámico, y el tipo de parámetro del método son consistentes
useGeneratedKeys: active la clave primaria write
keyColumn : Especifique la clave primaria de la base de datos
keyProperty: el nombre del atributo pojo correspondiente a la clave primaria Dentro de la
etiqueta: instrucción sql específica
1.3 actualización
atributo id: el identificador único de la declaración en el espacio de nombres actual (atributo requerido);
parameterType: el tipo de parámetro pasado, que puede omitirse.
Dentro de la etiqueta: declaración SQL específica.
1.4 eliminar
Descripción de varios atributos de eliminación:
atributo id: el identificador único de la declaración bajo el espacio de nombres actual (atributo requerido);
parameterType: el tipo de parámetro pasado, que puede omitirse.
Dentro de la etiqueta: declaración SQL específica.
2. # {} y $ {}
Escenario: la base de datos tiene dos tablas idénticas. La tabla de historial, la
información de consulta de la tabla actual en la tabla, a veces para consultar datos de la tabla de historial, a veces necesita ir a la nueva tabla para consultar datos.
Espero usar 1 método para completar la operación.
< select id = "queryUserByTableName" resultType = "com.zpc.mybatis.pojo.User" > seleccione * de # {tableName} </ select >
/ ** * Consultar información del usuario basada en el nombre de la tabla (use la anotación para especificar el nombre del parámetro entrante) * * @param tableName * @return * / public List <User> queryUserByTableName (String tableName);
Prueba de salida:
Si hay un problema, informe un error de sintaxis: es equivalente a ejecutar tal sql:
seleccione * de 'tb_user';
Obviamente, el nombre de la tabla tiene más comillas.
Enmienda:
<select id = "queryUserByTableName" resultType = "com.zpc.mybatis.pojo.User"> seleccione * de $ {tableName} </select>
Nota:
# {} es solo un reemplazo? , Equivalente a PreparedStatement usando marcadores de posición para reemplazar parámetros, puede evitar la inyección de SQL.
$ {} Es para la concatenación de cadenas, que es equivalente a la Declaración en la declaración sql, usando cadenas para empalmar sql; $ puede ser cualquier parte de la sql que se pasa a la Declaración y no puede evitar la inyección sql.
Para usar $ {} para recuperar la información del valor del parámetro, debe usar $ {value}
# {} Solo significa un marcador de posición y no tiene nada que ver con el nombre del parámetro. Si solo hay un parámetro, se corresponderá automáticamente.
Recomendado:
/ ** * Consultar información del usuario basada en el nombre de la tabla (use la anotación para especificar el nombre del parámetro entrante) * * @param tableName * @return * / public List <User> queryUserByTableName (@Param ("tableName") String tableName);
<select id = "queryUserByTableName" resultType = "com.zpc.mybatis.pojo.User"> seleccione * de $ {tableName} </select>
# {} Cuando varios parámetros:
/ ** * Iniciar sesión (utilice la anotación para especificar el nombre del parámetro entrante directamente) * * @param userName * @param contraseña * @return * / public User login (String userName, String password);
<select id = "login" resultType = "com.zpc.mybatis.pojo.User"> seleccione * de tb_user donde user_name = # {userName} y password = # {password} </select>
Error:
org.apache.ibatis.exceptions.PersistenceException:
### Error al consultar la base de datos. Causa: org.apache.ibatis.binding.BindingException: parámetro 'userName' no encontrado. Los parámetros disponibles son [0, 1, param1, param2]
### Causa: org.apache.ibatis.binding.BindingException: No se encontró el parámetro 'userName'. Los parámetros disponibles son [0, 1, param1, param2]
Solución uno:
<select id = "login" resultType = "com.zpc.mybatis.pojo.User"> seleccione * de tb_user donde user_name = # {0} y contraseña = # {1 } </select>
Solución dos:
<select id = "login" resultType = "com.zpc.mybatis.pojo.User"> seleccione * de tb_user donde user_name = # {param1} y contraseña = # {param2} </select>
La solución final:
/ ** * Inicio de sesión (use la anotación para especificar el nombre del parámetro entrante directamente) * * @param userName * @param contraseña * @return * / public User login (@Param ("userName") String userName, @Param ("password") Cadena de contraseña);
<select id = "login" resultType = "com.zpc.mybatis.pojo.User"> seleccione * de tb_user donde user_name = # {userName} y password = # {password} </select>
Por lo general, agregue un comentario @Param ("xxxx") a la lista de parámetros del método para especificar explícitamente el nombre del parámetro, y luego use $ {"xxxx"} o # {"xxxx"} para
generar dinámicamente la instrucción sql, use $ { }; Cuando
un parámetro está ocupado en una instrucción sql # {}
3.Mapa de resultados
Uso:
Fragmento 4.sql
<sql id = ””> </sql> <include refId = ”” />
Por ejemplo, el siguiente fragmento se define en UserMapper.xml:
<sql id = "commonSql">
id,
nombre_de_usuario,
contraseña,
nombre,
edad,
sexo,
cumpleaños,
creado,
actualizado
</sql>
Los fragmentos SQL también se pueden definir en un archivo .xml separado, como:
Definir CommonSQL.xml:
<? xml version = "1.0" encoding = "UTF-8" ?> <! DOCTYPE mapper PUBLIC "- // mybatis.org//DTD Mapper 3.0 // ES" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > < mapper namespace = "CommonSQL" > < sql id = "commonSql" > id, nombre_usuario, contraseña, nombre, edad, sexo, cumpleaños, creado, actualizado </ sql > </ mapper >
Uso:
< select id = "queryUserById" resultMap = "userResultMap" > seleccione < include refid = "CommonSQL.commonSql" > </ include > desde tb_user donde id = # {id} </ select >
< select id = "queryUsersLikeUserName" resultType = "User" > select < include refid = "CommonSQL.commonSql" > </ include > de tb_user donde user_name como "%" # {userName} "%" </ select >
Por supuesto, para completar esta función, el archivo de configuración externo debe introducirse en el archivo de configuración global mybatis-config.xml:
< mappers > < mapper resource = "CommonSQL.xml" /> <! - Habilita el escaneo de paquetes de la interfaz del mapeador, configuración basada en clases- > < package name = "com.zpc.mybatis.mapper" /> </ mapeadores >