1.TRESULTMAP
Los archivos XML asignados por SQL son donde se colocan todas las declaraciones SQL. Debe definir un espacio de trabajo, que generalmente se define como la ruta de la clase de interfaz correspondiente. Después de escribir el archivo de asignación de la instrucción SQL, debe hacer referencia a él en la etiqueta Mappers de archivo de configuración de MyBatis, por ejemplo:
<mapper resource = "com/liming/gerente/data/mappers/usermapper.xml"/> <mappper resource = "com/liming/ganager/data/mappers/studentmapper.xml"/> <mapper resource = "com/liming/gerente/data/mappers/classmapper.xml"/> <mapper Resource = "COM/Liming/Manager/Data/Mappers/maestroMapper.xml"/> </mappers>
Cuando la interfaz Java está en una ruta relativa al archivo XML, no se puede declarar en los mapeadores del archivo de configuración de MyBatis.
SQL asigna algunos elementos elementales de los archivos XML:
(1). Cache configura el caché para un patrón dado (2). Cache-Ref se refiere a un caché de otro patrón (3). ResultMap Este es el elemento más complejo pero potente, que describe cómo cargar objetos del conjunto de resultados (4). SQL Un bloque SQL que puede ser multiplexado por otras declaraciones (5). Insertar la declaración de inserción del mapa (6). Actualizar la declaración de actualización del mapa (7). Eliminar la declaración MAP Deleete (8). SELECCIONAR - MAPE SELECCIÓN DE SELECCIÓN
1.1 Resultsmap
ResultMap es el elemento más importante y poderoso en MyBatis. Puede ahorrar el 90% de su código que llamar a los conjuntos de resultados con JDBC, o puede hacer muchas cosas que JDBC no admite. De hecho, puede tomar miles de líneas de código para escribir una declaración compleja equivalente a un mapeo similar a una interacción. El propósito de ResultMaps es una declaración tan simple sin el mapeo de resultados innecesario. Las declaraciones más complejas no requieren más que solo algunas declaraciones absolutamente necesarias para describir la relación.
Atributo de Map de resultados: el tipo es la clase de entidad Java; ID es el identificador de este resultado de resultados.
Se puede establecer el mapeo que ResultMap:
(1). El constructor se usa para reflejar el resultado en un constructor de clase instanciado
a) parámetro IDARG ID; Marque el resultado establecido como ID para facilitar la llamada global
b) Reflexión promedio al constructor
(2). ID ID Resultado, marque el conjunto de resultados como ID para facilitar la llamada global
(3). El resultado refleja los resultados normales para las propiedades de Javabean
(4). asociación la combinación de tipos complejos; Tipos de síntesis de resultados múltiples
a) Mapeaciones de resultados anidados Varios resultados mapas de asociaciones anidadas en sí mismas, y también pueden ser referenciados a otro
(5). Colección una colección de tipos complejos
(6). La recolección de mapeos de resultados anidados también se puede hacer referencia a otra
(7). Discriminator utiliza un valor de resultado para decidir qué resultado de resultados usar
a) Caso de caso Caso de caso del mapa de resultados de algunos valores básicos
i. Mapeaciones de resultados anidados Un escenario de casos es en sí mismo un mapa de resultados, por lo que también puede incluir algunos de los mismos elementos o hacer referencia a un mapas de resultados externo.
1.1.1 ID, resultado
ID y el resultado son las asignaciones más simples, ID es la asignación de clave principal; Mapas de resultados de otros campos de tabla de bases de datos básicas a los atributos de la clase Entity.
El ejemplo más simple:
<resultmap type = "liming.student.manager.data.model.studententity" id = "studentResultMap"> <idepers = "studentID" column = "student_id" javatype = "string" jdbctypee = "varchar"/> <date Property = "studentName" column = "student" javatype = "string" jd "jd" jd "jd" jdbype " <resultado propiedad = "studentsex" column = "student_sex" javatype = "int" jdbctype = "entero"/> <resultado propiedad = "studentbirthday" column = "student_birthay" javatype = "fecha" jdbctype = "fecha"/> <resultado propiedad = "studentphoto" columna = "studing_photo" javatipo = ""] jdbctype = "blob" typeHandler = "org.apache.ibatis.type.blobtypeHandler" /> </ resultadomap>
Detalles de la configuración de ID y propiedades de la declaración de resultados:
propiedad | describir | |
propiedad | El nombre del atributo que debe asignarse al Javabean. | |
columna | El nombre de la columna o alias de etiqueta de la tabla de datos. | |
javatype | Un nombre de clase completo, o un tipo de alias. Si coincide con un Javabean, MyBatis generalmente lo detectará solo. Luego, si está asignando a un hashmap, debe especificar el propósito de ser logrado por Javatype. | |
jdbctype | Una lista de tipos compatibles con la tabla de datos. Esta propiedad solo es útil para columnas que permiten vacías cuando insertan, actualiza o elimina. JDBC requiere esto, pero MyBatis no. Si está codificando directamente para JDBC y tiene columnas que permiten vacías, desea especificar este elemento. | |
typeHandler | Use esta propiedad para anular el procesador Tipo. Este valor puede ser un nombre de clase completo o un tipo de alias. |
<resultMap type = "StudentEntity" id = "StudentResultMap"> <Constructor> <IDARG javatype = "String" column = "student_id"/> <arg javatype = "string" column = "student_name"/> <argatype = "string" column = "student_sex"/> <arg javatype = "date" column = "student"/bierhing/construct "/construct"/construct " </resultadomap>
Por supuesto, necesitamos definir el método de constructor de la clase de entidad estudiantil:
Public StudentEntity (String StudentId, String StudentName, String StudentSex, Date StudentBirthday) {this.studentId = studentId; this.studentName = StudentName; this.studentsex = studentSex; this.studentBirthday = StudentBirthday; } 1.1.3 asociación
El elemento sindical se usa para lidiar con una relación "uno a uno". Debe especificar las propiedades de la clase de entidad Java mapeada y el Javatype del atributo (generalmente myBatis lo reconocerá usted mismo). El nombre de la columna de la tabla de base de datos correspondiente. Si desea anular, devuelva el valor del resultado, debe especificar el typeHandler.
Diferentes situaciones deben decirle a MyBatis cómo cargar una unión. Mybatis se puede cargar de dos maneras:
(1). Seleccione: Ejecute una otra instrucción SQL de mapeo para devolver un tipo de entidad Java. Más flexible;
(2). Resultsmap: use un mapa de resultados anidado para procesar los conjuntos de resultados de la consulta a través de unir y asignarlos a los tipos de entidades Java.
Por ejemplo, una clase corresponde a un maestro de clase.
Primero, defina los atributos del maestro de clase en la clase:
Entitud de profesores privados Entitudes docentes;
1.1.3.1 Use Seleccionar para implementar unión
Ejemplo: existe el atributo de un maestro de clase en la categoría de entidad de clase. Cuando se obtiene una entidad de clase a través de esfuerzos conjuntos, la entidad del maestro de clase se mapea al mismo tiempo.
Esto puede reutilizar directamente las declaraciones selectas definidas en el archivo de maestros de maestros de maestros de maestros para consultar el maestro de acuerdo con su identificación. Y no necesita modificar las declaraciones SQL escritas, solo necesita modificar el resultado de resultados directamente.
Parte del contenido del archivo ClassMapper.xml:
<resultMap type = "classentity" id = "classResultMap"> <id propiedad = "classid" column = "class_id" /> <resultspers de resultado = "classname" column = "class_name" /> <result Property = "classyear" columna = "class_year" /> <asociación de propiedad = "maestro de maestro" columna = "maestro_id" seleccionar = "getTeacher" /> << /dultul id = "getClassById" parametertype = "string" resultMap = "classResultMap"> select * de class_tbl ct donde ct.class_id = #{classID}; </select>Parte del archivo de maestroMapper.xml:
<resultmap type = "profesorEntity" id = "maestroResultMap"> <id propiedad = "maestro" columna = "maestro_id" /> <resultado de la propiedad = "maestro" columna = "maestro_name" /> <resultado Property = "TeacherSex" columna = "maestro_sex" /> <resultado Property = "maestrobirthday" columna = "maestro_birthday" /> <resultado propiedad = "workdate" workdate " columna = "work_date"/> <resultado propiedad = "trabajo de trabajo" columna = "work_date"/> <resultado propiedad = "profesional" columna = "profesional"/> </ resultadomap> <select id = "getTeacher" parametypex = "string" resultmap = "TeacherSultMap"> seleccionar * de maestro_tbl tt Where tt.teacher_id = #{maestro {maestro} <</} </SELECHMAP " 1.1.3.2 Use el resultado de resultados para lograr la unión
La misma función que la anterior es consultar la clase y también consultar al maestro de clase. Debe agregar resultados de resultados (definidos en el archivo XML del maestro) en la asociación, escribir nuevo SQL (consulte la tabla de clase izquierda.
Modifique el contenido del archivo ClassMapper.xml:
<<resultmap type = "classentity" id = "classResultMap"> <Id Property = "" classid "column =" class_id " /> <resultspers =" classname "column =" class_name " /> <date Property =" classyear "column =" class_year " /> <asociación de la asociación =" maestro "columna" column = "maestro_id" resultMap = "EnsisterResultmap" id = "getClassandTeacher" parametertype = "string" resultmap = "classResultMap"> Seleccionar * de class_tbl ct izquierdo se une maestro_tbl tt en ct.teacher_id = tt.teacher_id donde ct.class_id = #{classid}; </select>Para el maestro de maestría, consulte el contenido anterior en el archivo maestroMapper.xml.
COLECCIÓN 1.1.4
Los elementos de agregación se utilizan para lidiar con las relaciones "de uno a muchos". Debe especificar los atributos de la clase de entidad Java de mapeo, el Javatype del atributo (generalmente ArrayList); el tipo de objeto en la lista del objeto (clase de entidad Java); el nombre de la columna de la tabla de base de datos correspondiente;
Diferentes situaciones deben decirle a MyBatis cómo cargar una agregación. Mybatis se puede cargar de dos maneras:
(1). Seleccione: Ejecute una otra instrucción SQL de mapeo para devolver un tipo de entidad Java. Más flexible;
(2). Resultsmap: use un mapa de resultados anidado para procesar los conjuntos de resultados de la consulta a través de unir y asignarlos a los tipos de entidades Java.
Por ejemplo, una clase tiene varios estudiantes.
Primero defina los atributos de la lista de estudiantes en la clase:
Lista privada <SentuentEntity> StudentList;
1.1.4.1 Use Seleccionar para implementar la agregación
El uso es muy similar al sindicato, la diferencia es que esto es uno a muchos, por lo que generalmente se enumeran las listas mapeadas. Por lo tanto, aquí debe definir Javatype como ArrayList, también debe definir el tipo de objeto en la lista, y el nombre de la declaración de la selección que debe establecerse (debe tenerse en cuenta que la condición de declaración de selección para el estudiante de consulta aquí debe ser el ClassID de clave extranjera).
Parte del contenido del archivo ClassMapper.xml:
<resultmap type = "classentity" id = "classResultMap"> <id propiedad = "classid" columna = "class_id" /> <resultado de la propiedad = "classname" column = "class_name" /> <result Property = "classyear" column = "class_year" /> <asociación de propiedad = "maestro" columna "columna =" maestro_id "seleccionar =" getTeacher " /> <COLLECCELY" ESTUDIANTE "ESTUDIANTE" columna = "class_id" javatype = "ArrayList" oftype = "StudentEntity" select = "getStudentByClassid"/> </ resultadomap> <select id = "getClassByID" Parametype = "String" resulteMap = "classResultMap"> select * de class_tbl ct where ct.class_id = #{classid}; </select>Parte del archivo studentmapper.xml:
< columna = "student_birthday" /> < /resultmap> <!-consulta la lista de estudiantes, basada en la identificación de clase-> <select id = "getStudentByClassid" Parametertype = "String" resultMap = "StudentResultmap"> <include Refid = "SelectStudentall" /> Where St.class_id = #{Classid} < /Select>> 1.1.4.2 Use el resultado de resultados para lograr la agregación
Usando ResultMap, debe reescribir una tabla de estudiantes SQL, izquierda.
<resultmap type = "classentity" id = "classResultMap"> <id propiedad = "classid" column = "class_id" /> <resultado de la propiedad = "classname" column = "class_name" /> <resultsperting = "classyear" column = "class_year" /> <asociación propiedad = "maestro" columna "=" maestro_id "resultMap =" TeacherRessultmap " />" Collection " /" StudentList " /" StudentList " columna = "class_id" javatype = "ArrayList" oftype = "StudentEntity" resultMap = "studentResultMap"/> </ resultmap> <select id = "getClassAndTeacherStudent" parametertype = "string" resultmap = "classResultMap"> Select * de class_tbl ct Left Evine_tbl st en ct.class_id Maestro_tbl tt en ct.teacher_id = tt.teacher_id donde ct.class_id = #{classID}; </select>
Para el maestro de maestría, consulte el contenido anterior en el archivo maestroMapper.xml. Consulte el Mapas de Etrensultas en la sección anterior del archivo studentmapper.xml.
1.1.5 Discriminador Discriminador <Br /> A veces, una consulta de base de datos separada puede devolver un conjunto de resultados de muchos tipos de datos diferentes (pero con suerte algunas correlación). El elemento discriminador está diseñado para manejar esta situación, incluida la jerarquía de herencia de las clases. El discriminador es muy fácil de entender porque se comporta de manera muy similar a las declaraciones de Switch en Java.
El discriminador de definición especifica las propiedades de columna y javatype. Las columnas son donde MyBatis busca valores de comparación. Javatype es el tipo correcto que se utilizará para garantizar pruebas equivalentes (aunque las cadenas son útiles en muchos casos).
El siguiente ejemplo es que cuando ClassID es 20000001, el atributo ClassID está asignado.
<resultmap type = "liming.student.manager.data.model.studententity" id = "resultMap_studententity_Disciminator"> <id propiedad = "studentid" column = "student_id" javatype = "string" jdbctype = "varchar"/> <resulte de student = "student" column = "student" javatype = "javatype =" string "string" string "string" string "string" string "string". jdbctype = "varchar"/> <resultado propiedad = "studentsex" columna = "student_sex" javatype = "int" jdbctype = "entero"/> <resultsperting = "studentbirthday" column = "student_birthay" javatype = "fecha" jdbctype = "fecha"/> <resultado propiedad = "student" columna "columna" student "columna" student " javatype = "byte []" jdbctype = "blob" typeHandler = "org.apache.ibatis.type.blobtypeHandler" /> <resultado propiedad = "lugarid" column = "place_id" javatipo = "string" jdbctype = "varchar" /> <discriminator columna = "class_id" javatipo = "string" string "string" jdbctype = "varchar"> <case value = "20000001" resultType = "liming.student.manager.data.model.studententity"> <resultado propiedad = "classid" column = "class_id" javatype = "string" jdbctype = "varChar"/> </case> </sistiminator> </resultmap>
2. Agregar, eliminar, modificar y verificar, parámetros y caché
2.1 Seleccionar
Un elemento seleccionado es muy simple. Por ejemplo:
<
Esta declaración se llama 'getStudent, tiene un parámetro de cadena y devuelve un objeto de tipo de atención estudiantil.
Tenga en cuenta que la identificación del parámetro es: #{studentId}.
Seleccione Detalles de configuración del atributo de instrucción:
| propiedad | describir | Obtener el valor | por defecto |
| identificación | En este modo, un identificador único puede ser referenciado por otras declaraciones | ||
| parametertypy | El nombre o alias de clase completa para el parámetro pasado a esta declaración | ||
| tittype | La declaración devuelve el nombre o alias de clase completo del tipo de valor. Tenga en cuenta que si se trata de una colección, entonces todo el nombre o alias de clase del artículo en la colección se llena aquí, en lugar del nombre de clase de la colección en sí. (ResultType y ResultMap no se pueden usar juntos) | ||
| mapa de resultados | El nombre de map de resultados externo referenciado. El mapeo del conjunto de resultados es la característica más poderosa en MyBatis. Muchas asignaciones complejas se pueden resolver fácilmente. (ResultType y ResultMap no se pueden usar juntos) | ||
| flushcache | Si se establece en True, el caché se borrará cada vez que se llame a la declaración. La instrucción SELECT se establece en falso de forma predeterminada | Verdadero | Falso | FALSO |
| Usecache | Si se establece en True, el conjunto de resultados de la declaración se almacenará en caché. La instrucción SELECT se establece en falso por defecto Verdadero | Falso FALSO El tiempo de espera establece el tiempo máximo que la unidad espera una respuesta antes de lanzar una excepción. El valor predeterminado es no tener valor, y la unidad se decide a sí misma. | Verdadero | Falso | FALSO |
| se acabó el tiempo | Establezca el tiempo máximo que la unidad espera una respuesta antes de lanzar una excepción. El valor predeterminado se establecerá sin un valor, y la unidad en sí decide | Entero positivo | No establecido |
| feticsize | Después de establecer un valor, la unidad se entusiasmará a regresar después de que el número de conjuntos de resultados alcance este valor. El valor predeterminado no está configurado y la unidad se decide a sí misma. | Entero positivo | Decisión de impulso |
| DeclaryType DeclaryType | Declaración, declaración preparada, declaración de llamada. Declaraciones preparadas, declaraciones invocables | DECLARACIÓN PREPARADO Llamable | PREPARADO |
| Resultados | hacia adelante_only, scroll_sensitive, scroll_insensitive Reenvío solamente, desplazamiento sensible, desplazamiento insensible a la caja | Hacia adelante_only Scroll_sensible Scroll_insensible | Decisión de impulso |
2.2 Insertar
Una declaración de inserción simple:
<!-Insertar Student-> <Insert id = "InsertStudent" Parametertype = "StudentEntity"> Insertar en student_tbl (student_id, student_name, student_sex, student_birtday, class_id) valores ( #{studentId}, #{studentName}, #{studentSex}, #{studentBirthday}, #{classentity.cleMid.Insertar puede usar la política de clave primaria automática compatible con la base de datos, establecer useGeneratedKeys = "true" y luego establecer KeyProperty en la columna correspondiente, y eso se hace. Por ejemplo, la Entreza Estudiantil anterior usa automáticamente generada para generar una clave principal para la columna ID. También puede usar el elemento SelectKey. El siguiente ejemplo utiliza la base de datos MySQL NextVal ('Student') como una función personalizada para generar una clave.
< ( #{StudentId}, #{studentName}, #{studentsex}, #{studentBirthday}, #{classEntity.classid}) </sert>| propiedad | describir | Obtener el valor | por defecto |
| identificación | En este modo, un identificador único puede ser referenciado por otras declaraciones | ||
| parametertypy | El nombre o alias de clase completa para el parámetro pasado a esta declaración | ||
| flushcache | Si se establece en True, el caché se borrará cada vez que se llame a la declaración. La instrucción SELECT se establece en falso de forma predeterminada | Verdadero | Falso | FALSO |
| Usecache | Si se establece en True, el conjunto de resultados de la declaración se almacenará en caché. La instrucción SELECT se establece en falso por defecto Verdadero | Falso FALSO El tiempo de espera establece el tiempo máximo que la unidad espera una respuesta antes de lanzar una excepción. El valor predeterminado es no tener valor, y la unidad se decide a sí misma. | Verdadero | Falso | FALSO |
| se acabó el tiempo | Establezca el tiempo máximo que la unidad espera una respuesta antes de lanzar una excepción. El valor predeterminado se establecerá sin un valor, y la unidad en sí decide | Entero positivo | No establecido |
| feticsize | Después de establecer un valor, la unidad se entusiasmará a regresar después de que el número de conjuntos de resultados alcance este valor. El valor predeterminado no está configurado y la unidad se decide a sí misma. | Entero positivo | Decisión de impulso |
| DeclaryType DeclaryType | Declaración, declaración preparada, declaración de llamada. Declaraciones preparadas, declaraciones invocables | DECLARACIÓN PREPARADO Llamable | PREPARADO |
| Usar GeneratedKeys | Dígale a MyBatis que use el método GetGeneratedKeys de JDBC para obtener la clave principal generada por la base de datos (MySQL, SQLServer, etc. Las bases de datos relacionales tendrán campos que se generan automáticamente). Valor predeterminado: falso | Verdadero | Falso | FALSO |
| KeyProperty | Identifique un valor que se devuelva la clave que se establece en MyBatis en GetGeneratedKeys, o use una tecla de selección para la instrucción Insertar Subelemento. |
| propiedad | describir | Obtener el valor |
| KeyProperty | El atributo que debe establecerse para el resultado generado por la instrucción SelectKey. | |
| tittype | Generar tipos de resultados. MyBatis permite el uso de tipos de datos básicos, incluidos los tipos de cadena e int. | |
| Orden | Se puede configurar antes o después. Si está configurado antes, primero seleccionará la tecla primaria, luego establezca la tecla Property y luego ejecute la instrucción Insertar; Si se establece en después, primero ejecutará la instrucción Insertar y luego ejecutará la instrucción SelectKey, que generalmente es el mecanismo de secuencia incrustado en la instrucción Insertar en la base de datos de llamadas internas (como Oracle). | ANTES DESPUÉS |
| DeclaryType DeclaryType | Como se indicó anteriormente, MyBatis admite los formularios de declaración de declaración, preparados y llamables, correspondientes a la declaración, preparación y respuestas de CallableStatement. | DECLARACIÓN PREPARADO Llamable |
2.3 Actualización, eliminación
Una simple actualización:
< #{classEntity.classid} donde student_tbl.student_id = #{studentId}; </update>Un simple eliminación:
<!-Eliminar estudiante-> <delete id = "deletestudent" parametertype = "studentEntity"> delete de student_tbl donde student_id = #{studentId} </elete>
Actualizar y eliminar detalles de configuración del atributo de instrucción:
| propiedad | describir | Obtener el valor | por defecto |
| identificación | En este modo, un identificador único puede ser referenciado por otras declaraciones | ||
| parametertypy | El nombre o alias de clase completa para el parámetro pasado a esta declaración | ||
| flushcache | Si se establece en True, el caché se borrará cada vez que se llame a la declaración. La instrucción SELECT se establece en falso de forma predeterminada | Verdadero | Falso | FALSO |
| Usecache | Si se establece en True, el conjunto de resultados de la declaración se almacenará en caché. La instrucción SELECT se establece en falso por defecto Verdadero | Falso FALSO El tiempo de espera establece el tiempo máximo que la unidad espera una respuesta antes de lanzar una excepción. El valor predeterminado es no tener valor, y la unidad se decide a sí misma. | Verdadero | Falso | FALSO |
| se acabó el tiempo | Establezca el tiempo máximo que la unidad espera una respuesta antes de lanzar una excepción. El valor predeterminado se establecerá sin un valor, y la unidad en sí decide | Entero positivo | No establecido |
| feticsize | Después de establecer un valor, la unidad se entusiasmará a regresar después de que el número de conjuntos de resultados alcance este valor. El valor predeterminado no está configurado y la unidad se decide a sí misma. | Entero positivo | Decisión de impulso |
| DeclaryType DeclaryType | Declaración, declaración preparada, declaración de llamada. Declaraciones preparadas, declaraciones invocables | DECLARACIÓN PREPARADO Llamable | PREPARADO |
<
De esta manera, puede hacer referencia directamente y usarlo en la instrucción Seleccionar. Cambie la declaración de selección anterior a:
<
2.5 parámetros
Los parámetros se han utilizado en muchos lugares anteriores, como consulta, modificación, condiciones de deleción, inserción, datos modificados, etc. Los tipos de datos básicos que MyBatis puede usar y los complejos tipos de datos de Java.
Tipos de datos básicos, cadena, int, fecha, etc.
Sin embargo, el uso de tipos de datos básicos solo puede proporcionar un parámetro, por lo que debe usar la clase de entidad Java o el tipo de mapa como tipo de parámetro. Sus atributos se pueden obtener directamente a través de #{}.
2.5.1 Parámetros de tipo básico
Busque en la lista de estudiantes en función del tiempo de admisión:
< </select>
Lista <SentuentEntity> StudentList = StudentMapper.GetStudentListByClassyEar (StringUtil.Parse ("2007-9-1")); para (StudentEntity EntityTemp: StudentList) {System.out.println (entityTemp.ToString ()); } 2.5.2 Parámetros de tipo de entidad Java
Busque en la lista de estudiantes por nombre y género. Use clases de entidad como parámetros:
< </select>
Entidad de StudentEntity = new StudentEntity (); entity.setStudentName ("li"); entity.setStudentSex ("hombre"); Lista <SentuentEntity> StudentList = StudentMapper.GetStudentListWhereEntity (entidad); para (StudentEntity EntityTemp: StudentList) {System.out.println (entityTemp.ToString ()); } 2.5.3 Parámetros de MAP
Busque en la lista de estudiantes por nombre y género. Use el mapa como parámetros:
<
Map <string, string> map = new HashMap <String, String> (); map.put ("sexo", "mujer"); map.put ("nombre", "li"); Lista <SentuentEntity> StudentList = StudentMapper.GetStudentListWherEmap (MAP); para (StudentEntity EntityTemp: StudentList) {System.out.println (entityTemp.ToString ()); } 2.5.4 Implementación de varios parámetros
Si desea pasar múltiples parámetros, debe agregar anotación @param a los parámetros de la interfaz. Dado un ejemplo:
Escritura de interfaz:
Lista pública <SentuentEntity> getStudentListWhereParam (@param (valor = "nombre") Nombre de cadena, @param (valor = "sexo") String sex, @param (valor = "cumpleaños") Cumpleaños de fecha, @param (valor = "classentity") classEntity classEntity);
Método de escritura SQL:
< </if> <if test = "Sex! = Null and Sex! = ''"> y St.student_sex = #{Sex} </if> <if test = "cumpleaños! = null"> y St.student_birthay = #{birthday} </if> <if "classentity! = null andentity.classid! = null y classentity.classid '' '' ' = #{classEntity.classid} </if> </where> </select>Hacer una consulta:
LIST <StudentEntity> StudentList = StudentMapper.getStudentListWhereParam ("," ",", PARSE ("1985-05-28"), classMapper.getClassById ("20000002")); para (StudentEntity EntityTemp: StudentList) {System.Println (entityTemp.Tostring (););); 2.5.5 Método de sustitución de cadenas
Por defecto, el uso de la sintaxis #{} hace que MyBatis genere la propiedad preparada y use el parámetro preparado (=?) Para establecer de forma segura el valor. Trate de ser rápido y seguro, y también se usan con frecuencia. Pero a veces es posible que desee sustituir las cadenas sin cambios en las declaraciones SQL directamente. Por ejemplo, para ordenar, puede usar esto: orden por $ {columnName} pero myBatis no modificará y sorteará esta cadena.
Nota: Es muy inseguro recibir y aplicar una entrada del usuario en una declaración sin cambios de esta manera. Esto permitirá al usuario implantar el código corrupto, por lo que requiere que el campo no permita que el cliente ingrese o que verifique directamente su legitimidad.
2.6 caché caché
MyBatis contiene un mecanismo de caché potente, configurable y personalizable. La implementación de caché de MyBatis 3 se ha mejorado muchas veces, lo que es poderoso y más fácil de configurar. Por defecto, el caché no está habilitado. Además del caché de la sesión, puede mejorar el rendimiento y resolver dependencias globales. Encienda el caché de nivel 2, solo necesita agregar una línea simple al archivo de asignación SQL: <cache/>
La función de esta oración simple es la siguiente:
(1). Todas las declaraciones de selección en el archivo de mapeo se almacenarán en caché.
(2). Todas las declaraciones de insertar, actualizar y eliminar en el archivo de mapeo borrarán el caché.
(3). El caché se recicla utilizando el algoritmo "rara vez usado recientemente" (4). El caché no será borrado por el tiempo establecido.
(5). Cada caché puede almacenar 1024 listas o referencias a objetos (independientemente del resultado de la consulta).
(6). El caché se usará como un caché de "leer/escribir", lo que significa que el objeto recuperado no se comparte y es seguro para la persona que llama. No habrá otras llamadas (7). o posibles modificaciones al hilo.
Por ejemplo, cree un caché FIFO para borrar una vez en 60 segundos, almacenar 512 resultados de objetos o referencias de la lista y devolver los resultados de solo lectura. Porque modificarlos en hilos no utilizados puede dar lugar a conflictos de referencia.
<Cache Eviction = "FIFO" FLUSHINTERVAL = "60000" size = "512" readonly = "true"> </cache>
También puede compartir la misma configuración o instancia de caché en diferentes espacios de nombres. En este caso, puede usar Cache-Ref para hacer referencia a otro caché.
<Cache-ref namespace = "com.liming.manager.data.studentmapper"/>
Detalles de configuración del atributo de la declaración de caché:
| propiedad | ilustrar | Obtener el valor | valor predeterminado |
| Desalojo | Política de almacenamiento en caché: LRU: reciente uso del menor: eliminar objetos que no se han utilizado en el último período largo. Fifi First-In First-Out: mueva el objeto anterior en la cola Referencia suave - suave: basada en reglas de referencia suave, use el mecanismo de recolección de basura para eliminar objetos Débil - Referencia débil: use el mecanismo de recolección de basura para eliminar con fuerza los objetos basados en reglas de referencia débiles | LRU Fifi SUAVE DÉBIL | LRU |
| Flushinterval | Representa un tiempo total razonable del milisegundo. El valor predeterminado no está configurado, por lo que si usa un borde de intervalos, solo puede llamar a las declaraciones para borrarlo. | Entero positivo | No establecido |
| tamaño | El tamaño del objeto en caché | Entero positivo | 1024 |
| readonamente | El caché de solo lectura devolverá la misma instancia a todas las personas que llaman. Por lo tanto, ninguno de ellos puede modificarse, lo que puede mejorar en gran medida el rendimiento. El caché de escritura pasará a través de la secuencia Para devolver una copia de un objeto en caché. Esto será más lento, pero más seguro. Entonces el valor predeterminado es falso. | Verdadero | Falso | FALSO |