36 temas de entrevistas de MyBatis, ¡la oferta te está llamando!

1. ¿Qué es MyBatis?

Respuesta: MyBatis es un marco de capa de persistencia que puede personalizar SQL, procedimientos almacenados y mapeo avanzado.

2. Habla sobre el caché de MyBatis

R: caché MyBatis en caché y caché secundario, sesión de caché en el interior, hay un valor predeterminado, dos lentos
almacenados en su espacio de nombres, el valor predeterminado no está abierto, use la clase de atributo de caché secundario Necesita implementar la
interfaz de serialización serializable (que se puede usar para guardar el estado del objeto), que se puede configurar en su archivo de mapeo

3. ¿Cómo funciona la paginación Mybatis? ¿Cuál es el principio del complemento de paginación?

Respuesta:
1) Mybatis usa el objeto RowBounds para la paginación. También puede escribir directamente sql para lograr la paginación, o puede usar el
complemento de paginación de Mybatis.
2) El principio del complemento de paginación: implementar la interfaz proporcionada por Mybatis, implementar un complemento personalizado, bloquear
el SQL que se ejecutará en el método de interceptación del complemento y luego reescribir el SQL.
Por ejemplo: seleccione * de estudiante, después de interceptar SQL, reescriba como: seleccione t. * De (seleccione * de estudiante) t
límite 0,10

4. Describa brevemente el principio de funcionamiento del complemento Mybatis y cómo escribir un complemento.

Respuesta:
1) Mybatis solo se puede escribir para ParameterHandler, ResultSetHandler, StatementHandler,
conecte la interfaz de cuatro Executor, Mybatis a través de proxy dinámico, objeto de proxy para que la interfaz genere una necesidad real de interceptar
los métodos de interfaz actuales para interceptar funciones, siempre que la implementación de los cuatro Cuando el método del objeto de la interfaz, ingresará al método de interceptación, específicamente
al método invoke () del InvocationHandler. Por supuesto, solo se interceptarán aquellos métodos que especifiques para ser interceptados.
2) Implemente la interfaz Interceptor de Mybatis y anule el método intercept (), y luego escriba una anotación para el complemento para especificar
qué métodos de qué interfaz desea interceptar. Recuerde, no olvide configurar el complemento que escribió en el archivo de configuración.

5. ¿Qué hace Mybatis dynamic sql? ¿Qué son los SQL dinámicos? ¿Puede describir brevemente el principio de implementación de SQL dinámico?

Respuesta:
1) Mybatis dynamic sql nos permite escribir sql dinámico en forma de etiquetas en el archivo de mapeo Xml para completar
la función de juicio lógico y empalme dinámico de sql.
2) Mybatis proporciona 9 tipos de etiquetas SQL dinámicas:
recortar | donde | establecer | foreach | si | elegir | cuando | de lo contrario | enlazar. 3) El principio de ejecución es usar OGNL para calcular el valor de la expresión del objeto del parámetro sql y
empalmar dinámicamente sql de acuerdo con el valor de la expresión para completar la función de sql dinámico.

6. ¿Cuál es la diferencia entre # {} y $ {}?

Respuesta:
1) # {} es procesamiento de precompilación , error de análisis de KaTeX: Se esperaba 'EOF', obtuvo '#' en la posición 24:…. 2) Cuando Mybatis procesa # ̲ {}, reemplazará $ {} con el valor de la variable cuando se use # {... {} en sql .
4) El uso de # {} puede prevenir eficazmente la inyección de SQL y mejorar la seguridad del sistema.

7. ¿Por qué Mybatis es una herramienta de mapeo ORM semiautomática? ¿Cuál es la diferencia entre esto y completamente automático?

Respuesta: Hibernate es una herramienta de mapeo ORM completamente automática.Cuando usa Hibernate para consultar objetos relacionados u objetos de colección relacionados
, puede obtenerlos directamente de acuerdo con el modelo relacional de objetos, por lo que es completamente automático. Cuando Mybatis consulta objetos relacionados u objetos de
colección relacionados, debe escribir SQL manualmente para completar, por lo que se denomina herramienta de mapeo de ORM semiautomática.

8. ¿Mybatis admite la carga diferida? Si es así, ¿cuál es su principio de implementación?

Respuesta:
1) Mybatis solo admite la carga diferida de objetos de asociación y objetos de colección. La asociación se
refiere a uno a uno y la colección se refiere a consultas de uno a varios. En el archivo de configuración de Mybatis, puede configurar si
habilitar la carga diferida lazyLoadingEnabled = true | false. 2) Su principio es usar CGLIB para crear el objeto proxy del objeto de destino, al llamar al método de destino, ingrese el
método cuadrado del interceptor , como llamar a.getB (). GetName (), método invoke () del interceptor encontrado a.getB () es un valor nulo, luego enviará por
separado la consulta SQL previamente guardada asociada con el objeto B, consultará B hacia arriba y luego llamará a a.setB (b), por lo que el
atributo del objeto b de a tiene un valor, y luego completará llamada al método a.getB (). getName (). Este es el principio básico
de la carga diferida .

9. ¿Cuál es la diferencia entre MyBatis e Hibernate?

Para obtener más información, haga clic en mí- "" ""
Respuesta:
1) Mybatis es diferente de hibernate, no es exactamente un marco ORM, porque MyBatis requiere que los programadores
escriban sentencias Sql, pero mybatis se puede configurar de manera flexible para ejecutar XML o anotaciones Sql, y
mapee el objeto java y la sentencia sql para generar el sql ejecutado final, y finalmente reasigne el resultado de la ejecución de sql para generar un
objetojava.
2) El umbral de aprendizaje de Mybatis es bajo, fácil de aprender, los programadores escriben directamente en el sql ecológico original, sql puede controlar estrictamente la ejecución del
rendimiento, alta flexibilidad, ideal para menos exigentes en el modelo de datos relacionales de desarrollo de software, como el
campamentoenviado de la empresa de software de InternetEste tipo de software, etc., porque los requisitos de este tipo de software cambian con frecuencia, una vez que los cambios en los requisitos requieren una salida rápida de resultados. Pero la
premisa de laflexibilidad esque mybatis no puede lograr la independencia de la base de datos. Si necesita implementar software que admita múltiples bases de datos, necesita personalizar
múltiples conjuntos de archivos de mapeo sql, lo cual es mucho trabajo.
3) Hibernate tiene fuertes capacidades de mapeo relacional / de objetos y buena independencia de la base de datos. Para software con altos requisitos para modelos relacionales (como
software personalizado con requisitos fijos), si desarrolla con hibernate, puede guardar una gran cantidad de código y mejorar la eficiencia. Sin embargo
, la desventaja de Hibernate es que el umbral de aprendizaje es alto, el umbral de competencia es más alto y cómo diseñar el mapeo O / R,
cómo equilibrar elrendimiento y losmodelos deobjetos, y cómo usar bien Hibernate requiere una gran experiencia y habilidad.
En resumen, siempre que se pueda hacer una arquitectura de software con buena capacidad de mantenimiento y escalabilidad en un entorno de recursos limitados de acuerdo con las necesidades del usuario
, es una buena arquitectura, por lo que el marco es mejor si es adecuado.

10. ¿Cuáles son los beneficios de MyBatis?

Respuesta:
1) MyBatis separa la instrucción sql del programa fuente Java y la escribe en un archivo XML separado, lo que
brinda una gran conveniencia al mantenimiento del programa .
2) MyBatis encapsula los detalles de la llamada de la API JDBC subyacente y puede convertir automáticamente el conjunto de resultados en objetos Java Bean,
lo que simplifica enormemente el trabajo repetitivo de la programación de la base de datos Java.
3) Debido a que MyBatis requiere que los programadores escriban sentencias sql por sí mismos, los programadores pueden
controlar de forma flexible las sentencias sql en función de las características de la base de datos , por lo que puede lograr una mayor eficiencia de consulta que Hibernate y otros frameworks orm totalmente automáticos y puede completar
consultas complejas .

11. Describa brevemente la relación de mapeo entre el archivo de mapeo Xml de Mybatis y la estructura de datos interna de Mybatis.

Respuesta: Mybatis encapsula toda la información de configuración de Xml en la configuración de objetos pesados ​​Todo-en-Uno. En el
archivo de mapeo Xml, las etiquetas se analizarán como objetos ParameterMap y cada uno de sus elementos secundarios se
analizarán como objetos ParameterMapping. La etiqueta se analizará como un objeto ResultMap y cada uno de sus
elementos secundarios se analizará como un objeto ResultMapping. Cada ,,, y etiqueta
se analizará como un objeto MappedStatement, y el sql en la etiqueta se analizará como un objeto BoundSql.

12. ¿Qué es el enlace de interfaz de MyBatis y cuáles son los beneficios?

R: El mapeo de la interfaz está en cualquier MyBatis, define la interfaz, luego los métodos de interfaz dentro de las declaraciones SQL y enlazan, llamamos
directamente al método de interfaz, así que en comparación con el método original SqlSession siempre que podamos tener una
selección de opciones más flexible y Conjunto.

13. Hay varias formas de implementar el enlace de interfaz, ¿cómo se implementan?

Respuesta: Hay dos formas de implementar el enlace de interfaz. Una es enlazar por anotación, que es agregar
@ Select @ Update y otras anotaciones al método de interfaz para enlazar con sentencias Sql, y la otra es escribir SQL en xml Para enlazar
, en este caso, el espacio de nombres en el archivo de mapeo xml debe ser el nombre de ruta completo de la interfaz.

14. ¿En qué circunstancias se vinculan las anotaciones y cuándo se usa el enlace XML?

Respuesta: Cuando la declaración SQL es relativamente simple, use el enlace de anotación; cuando la declaración SQL es más compleja, use el enlace xml, generalmente use el
enlace xml más

15. Hay varias formas de realizar uno a uno en MyBatis ¿Cómo funciona?

Respuesta: Hay consultas conjuntas y consultas anidadas. La consulta conjunta es una consulta conjunta de varias tablas, que solo se pueden consultar una vez.
Se puede completar configurando el nodo de asociación en el resultMap para configurar una clase uno a uno; la consulta anidada es verificar una tabla primero, de acuerdo con El
ID de clave externa del resultado en esta tabla también se configura a través de la asociación para consultar datos en otra tabla, pero la
consulta de otra tabla se configura a través del atributo select.

16. ¿Puede Mybatis realizar consultas relacionadas uno a uno y uno a varios? ¿Cuáles son los métodos de implementación y las áreas entre ellos?

¿no haga?
Respuesta: Sí, Mybatis no solo puede realizar consultas relacionadas de uno a uno, uno a varios, sino también realizar consultas relacionadas de varios a uno, de varios a varios
, consultas de varios a uno, que en realidad son consultas de uno a uno. Solo necesita poner selectOne ( )
Se puede modificar a selectList () ; la consulta de muchos a muchos es en realidad una consulta de uno a muchos, simplemente cambie selectOne () a selectList ().
Hay dos formas de implementar consultas de objetos relacionados: una es enviar un sql separado para consultar objetos relacionados, asignarlos al
objeto principal y luego regresar al objeto principal. La otra es utilizar una consulta anidada. El significado de una consulta anidada es utilizar una consulta conjunta. Parte de la
columna es el valor del atributo del objeto A y la otra parte es el valor del atributo del objeto asociado B. La ventaja es que solo
se puede utilizar una consulta SQL . Se detecta el objeto principal y sus objetos asociados.

17. ¿Cómo se establece el SQL dinámico en MyBatis? ¿Qué sintaxis se utiliza?

Respuesta: El SQL dinámico en MyBatis generalmente se implementa a través del nodo if, a través de la sintaxis OGNL, pero si quieres
escribirlo completamente, debes cooperar con los nodos where y trim. El nodo where es insertar where si el nodo contiene contenido, de lo contrario no se
insertará. , El nodo de recorte se utiliza para determinar si la instrucción dinámica comienza con yo o, luego este yo se
eliminará automáticamente .

18. ¿Cómo encapsula Mybatis el resultado de la ejecución de sql como un objeto de destino y lo devuelve? ¿Cuáles son los formularios de mapeo?

Respuesta: La
primera es usar etiquetas para definir la relación de mapeo entre los nombres de las columnas y los nombres de los atributos de los objetos uno por uno.
La segunda función es usar una columna sql de alias, el nombre de alias de la columna se escribe como propiedades de objeto, como T_NAME AS NAME, para el
nombre de propiedad similar generalmente el nombre, en minúsculas, pero los nombres de las columnas no distinguen entre mayúsculas y minúsculas, Mybatis ignora el nombre de la columna en mayúsculas ,
Busque inteligentemente el nombre de atributo del objeto correspondiente, incluso puede escribir T_NAME AS NaMe, y Mybatis puede funcionar normalmente
.
Con la relación de mapeo entre los nombres de las columnas y los nombres de los atributos, Mybatis crea objetos a través de la reflexión y usa los atributos reflejados en los objetos
para asignar y devolver uno por uno. Aquellos atributos que no pueden encontrar la relación de mapeo no se pueden asignar.

19. En el archivo de mapeo Xml, además de las etiquetas comunes select | insert | Updae | delete, ¿qué otras etiquetas hay?

R: Hay muchos otros ,,,,, etiqueta,
más nueve etiqueta de SQL dinámico,
el TRIM | donde el | SET | foreach | SI | Elija el | cuando el | de lo contrario | bind, entre los cuales está la etiqueta fragmento de SQL de paso,
a través La etiqueta introduce fragmentos sql para generar etiquetas de estrategia para claves primarias que no admiten el incremento automático.

20. Cuando el nombre del atributo en la clase de entidad es diferente del nombre del campo en la tabla, ¿qué pasa si el resultado de la consulta está encapsulado en el pojo especificado?

Respuesta:
1) Definiendo el alias del nombre del campo en la instrucción SQL de la consulta.
2) Se utiliza para mapear la correspondencia uno a uno entre los nombres de campo y los nombres de atributos de clase de entidad.

21. Cómo escribir una declaración similar en una consulta difusa

Para obtener más información, haga clic en mí- "" ""
Respuesta:
1) Concatenar comodines en java mediante la asignación # {}
2) Concatenar comodines en declaraciones Sql (inseguro provocará una inyección Sql)

22. Por lo general, un archivo de mapeo Xml tendrá una interfaz de Dao correspondiente ¿Se puede sobrecargar el principio de funcionamiento de Dao?

Respuesta: No se puede sobrecargar, porque al buscar el sql correspondiente a Xml a través de Dao,
se utiliza la estrategia de almacenamiento y búsqueda del nombre completo + nombre del método . El principio de funcionamiento de la interfaz es el principio de proxy dinámico jdk Cuando se ejecuta, se genera un proxy para dao, y el objeto proxy intercepta el
método de interfaz para ejecutar el SQL correspondiente para devolver datos.

23. En el archivo de mapeo de Mybatis, si la etiqueta A se refiere al contenido de la etiqueta B mediante la inclusión, ¿se puede definir la etiqueta B después de la etiqueta A o debe definirse antes de la etiqueta A?

Respuesta: Aunque Mybatis analiza los archivos de mapeo Xml en orden, la etiqueta B entre comillas aún se puede
definir en cualquier lugar y Mybatis puede reconocerla correctamente. El principio es, el análisis sintáctico de la etiqueta Mybatis A, se encontró que el cebador A etiquetaba
con la etiqueta B, pero no se ha resuelto en la etiqueta B, todavía no existe, en este momento, la etiqueta A etiquetada mostrará el estado sin resolver Mybatis
y analizará el resto de la etiqueta, Contiene la etiqueta B. Después de analizar todas las etiquetas, Mybatis
analizará las etiquetas que están marcadas como no resueltas. En este momento, cuando se analiza la etiqueta A, la etiqueta B ya existe y la etiqueta A se
puede analizar normalmente.

24. En el archivo de mapeo Xml de Mybatis, ¿se puede repetir la identificación para diferentes archivos de mapeo Xml?

Respuesta: Para diferentes archivos de mapeo Xml, si el espacio de nombres está configurado, entonces la identificación se puede repetir; si el
espacio de nombres no está configurado , entonces la identificación no se puede repetir; después de todo, el espacio de nombres no es necesario, es solo una mejor práctica. La razón es
que el espacio de nombres + id se usa como la clave de Map <String, MappedStatement>. Si no hay
espacio de nombres, habrá un id, por lo que el id duplicado hará que los datos se sobrescriban entre sí. Con un espacio de nombres, id se
puede repetir de forma natural, y el espacio de nombres + id es naturalmente diferente si el espacio de nombres es diferente.

25. ¿Cómo ejecutar el procesamiento por lotes en Mybatis?

Respuesta: Utilice BatchExecutor para completar el procesamiento por lotes.

26. ¿Qué ejecutores ejecutores tiene Mybatis? ¿Cuál es la diferencia entre ellos?

Respuesta: Mybatis tiene tres ejecutores Executor básicos, SimpleExecutor, ReuseExecutor,
BatchExecutor.
1) SimpleExecutor: cada vez que se ejecuta una actualización o selección, se abre un
objeto Statement y el objeto Statement se cierra inmediatamente después de su uso.
2) ReuseExecutor: Ejecute la actualización o seleccione, use sql como
clave para encontrar el objeto Statement, úselo si existe, créelo si no existe, y no cierre el objeto Statement después de usarlo,
sino colóquelo en el Mapa 3) BatchExecutor: procesamiento por lotes completo.

27. ¿Cómo especificar qué tipo de Ejecutor usar en Mybatis?

Respuesta: En el archivo de configuración de Mybatis, puede especificar el tipo de ejecutor ExecutorType predeterminado, o puede
pasar manualmente el parámetro de tipo ExecutorType al método de creación de SqlSession de DefaultSqlSessionFactory.

28. Mybatis ejecuta la inserción por lotes, ¿puede devolver la lista de claves primarias de la base de datos?

Respuesta: Sí, JDBC puede y Mybatis, por supuesto.

29. ¿Puede Mybatis mapear la clase de enumeración Enum?

Respuesta: Mybatis puede asignar clases de enumeración, no solo clases de enumeración, sino que Mybatis puede asignar cualquier objeto a una
columna de la tabla. El método de mapeo es personalizar un TypeHandler e implementar los
métodos de interfaz setParameter () y getResult () de TypeHandler. TypeHandler tiene dos funciones, una es completar la conversión de javaType a jdbcType, y la
otra es completar la conversión de jdbcType a javaType, que se materializa en dos métodos, setParameter () y getResult (), que respectivamente
representan la configuración de parámetros de marcador de posición de signo de interrogación SQL y la obtención de columnas resultado de búsqueda.

30. ¿Cómo obtener el valor de clave (principal) generado automáticamente?

Respuesta: El archivo de configuración establece usegeneratedkeys en verdadero

31. ¿Cómo pasar múltiples parámetros en el mapeador?

Respuesta:
1) Pase los parámetros directamente en el método, use # {0} # {1} para obtener el
archivo xml 2) Use la anotación @param: esto se puede obtener directamente con # {name} en el archivo xml

32. ¿Cuál es la diferencia entre resultType y resultMap?

Respuesta:
1) Cuando el nombre de la clase es el mismo que el de la base de datos, puede establecer directamente el parámetro resultType en la clase Pojo
2) Si es diferente, debe establecer resultMap para convertir el nombre del resultado y el nombre Pojo

33. ¿Cuáles son los requisitos al utilizar la interfaz del mapeador de MyBatis para llamar?

Respuesta:
1) El nombre del método de la interfaz Mapper es el mismo que el ID de cada SQL definido en mapper.xml
2) El tipo de parámetro de entrada del método de la interfaz Mapper es el
mismo que el tipo de parámetro de cada SQL definido en mapper.xml
3) El tipo de método de la interfaz Mapper El tipo de parámetro de salida es el
mismo que el resultType de cada SQL definido en mapper.xml.4
) El espacio de nombres en el archivo Mapper.xml es la ruta de clase de la interfaz del asignador.

34. ¿Cuáles son las principales mejoras de Mybatis sobre IBatis?

Respuesta:
1) Hay un enlace de interfaz, incluido el enlace de anotaciones sql y el enlace xml Sql
2) el sql dinámico se cambia de la configuración del nodo original a la expresión OGNL
3) en uno a uno, uno a muchos, la introducción de la
asociación, en El nodo de colección se introduce cuando es uno a varios, pero todos están configurados en el resultMap

35. ¿Cuáles son las clases centrales de procesamiento de IBatis y MyBatis?

Respuesta: La clase de procesamiento central en IBatis se pasa a SqlMapClient, y la clase de procesamiento central en MyBatis se llama SqlSession.

36. ¿Cuáles son las diferencias entre IBatis y MyBatis en detalles?

Respuesta:
1) En sql, el nombre de la variable tiene la # variable # original cambiada a # {variable}
2) La variable originalCantidad variable en un $ {variable}
3) en la clase original están dentro del tipo de depósito de cambio de nombre de nodo
sql.4) en el queryForObject original queryForList selectOne selectList5) proporcionado el
documento de salida demapeo de alias originalen el que el perfil principal里
'
Obtenga más información sobre la entrevista, haga clic en mí- "" ""

Supongo que te gusta

Origin blog.csdn.net/Java_Yhua/article/details/110940372
Recomendado
Clasificación