Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
《Teoría MyBatis 40 preguntas》Contiene los siguientes 2 artículos:
Agregar nueva etiqueta:keyProperty=“ID”
Eso es todo.
<insert id="insert" useGeneratedKeys="true" keyProperty="userId" >
insert into user(user_name, user_password, create_time)
values(#{userName}, #{userPassword} , #{createTime, jdbcType=TIMESTAMP})
</insert>
(1) Consultando SQL Defina el alias del nombre del campo en la declaración para que el alias del nombre del campo sea coherente con el nombre del atributo de la clase de entidad.
<select id="getOrder" parameterType="int" resultType="com.jourwon.pojo.Order">
select order_id id, order_no orderno, order_price price form orders
where order_id=#{id};
</select>
(2) Pase <resultMap>
Mapear la correspondencia uno a uno entre los nombres de los campos y los nombres de los atributos de la clase de entidad.
<select id="getOrder" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap type="com.jourwon.pojo.Order" id="orderResultMap">
<!-- 用id属性来映射主键字段 -->
<id property="id" column="order_id">
<!-- 用result属性来映射非主键字段,property为实体类属性名,column为数据库表中的属性 -->
<result property="orderno" column="order_no" />
<result property="price" column="order_price" />
</reslutMap>
(1) Herencia de clases de implementación de interfaz SqlSessionDaoSupport
: Para utilizar este método, debe escribir mapper
interfaz,mapper
Clase de implementación de interfaz,mapper.xml
documento.
sqlMapConfig.xml
Configuración mediamapper.xml
s posición.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper
interfaz.SqlSessionDaoSupport
。mapper
Se puede utilizar en métodos.this.getSqlSession()
Realizar la adición, eliminación, modificación y verificación de datos.spring
configuración.<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
(2) Uso org.mybatis.spring.mapper.MapperFactoryBean
。
sqlMapConfig.xml
Configuración mediamapper.xml
posición simapper.xml
ymapper
Las interfaces tienen el mismo nombre y están en el mismo directorio, por lo que no se requiere configuración aquí.mapper
interfaz.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper.xml
medionamespace
paramapper
La dirección de la interfaz.mapper
El nombre del método en la interfaz ymapper.xml
definido enstatement
deid
se consistente.Spring
definido en.<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(3) Uso mapper
escáner.
mapper.xml
Redacción de documentos.mapper.xml
medionamespace
paramapper
La dirección de la interfaz;mapper
El nombre del método en la interfaz ymapper.xml
definido enstatement
deid
se consistente;mapper.xml
ymapper
Si el nombre de la interfaz sigue siendo consistente, no es necesariosqlMapConfig.xml
Configurar en .mapper
interfaz.Avisomapper.xml
nombre del archivo ymapper
Los nombres de las interfaces deben ser coherentes y estar ubicados en el mismo directorio.mapper
escáner.<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper 接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
spring
Obtener del contenedormapper
objeto de implementación.El enlace de interfaz consiste en definir una interfaz arbitrariamente en MyBatis y luego combinar los métodos en la interfaz con SQL declaraciónEnlazado, podemos llamar directamente al método de interfaz, por lo que en comparación con el original SqlSession
Los métodos proporcionados nos permiten tener opciones y configuraciones más flexibles.
Hay dos formas de implementar el enlace de interfaz:
@Select
、@Update
Espere a que se vinculen las anotaciones, que contienen sentencias SQL;xml
Escriba SQL dentro para vincular. En este caso, debe especificar.xml
en el archivo de mapeonamespace
Debe ser la ruta completa de la interfaz.Cuando la declaración SQL es relativamente simple, use el enlace de anotaciones. Cuando la declaración SQL es relativamente compleja, use el enlace.xml
Encuadernación, uso generalxml
Hay más fijaciones.mapper.xml
de cada sql definido enid
mismo.mapper.xml
de cada sql definido enparameterType
del mismo tipo.mapper.xml
de cada sql definido enresultType
del mismo tipo.Mapper.xml
en el archivonamespace
Esa es la ruta de clase de la interfaz Mapper.proxy
objeto, objeto proxyproxy
Los métodos de interfaz serán interceptados y ejecutados en su lugar.MappedStatement
representa el SQL y luego devuelve los resultados de la ejecución de SQL.namespace
,Entonces id
Se puede repetir si no está configuradonamespace
,Entonces id
no se puede repetir; después de todonamespace
No es obligatorio, solo las mejores prácticas.namespace + id
es como Mapa < Cadena, Declaración mapeada > Mapa<String, MappedStatement>METROETROapag<Calleaengramo,METROETROapáginasmidCalleaamimetrominortea> La clave a utilizar, si no hay ningunanamespace
, sólo el resto id
,Entonces,id
La duplicación puede hacer que los datos se sobrescriban entre sí.Entiendonamespace
,naturaleza id
Puedes repetirlo,namespace
diferente,namespace + id
Naturalmente es diferente.MyBatis encapsula toda la información de configuración XML en objetos pesados todo en uno Configuration
interno. En el archivo de mapeo XML,<parameterMap>
La etiqueta se analizará comoParameterMap
objeto, cada uno de sus elementos secundarios se analizará comoParameterMapping
objeto.<resultMap>
La etiqueta se analizará comoResultMap
objeto, cada uno de sus elementos secundarios se analizará comoResultMapping
objeto.Cada<select>
、<insert>
、<update>
、<delete>
Las etiquetas se analizarán comoMappedStatement
Objeto, el SQL en la etiqueta se analizará comoBoundSql
objeto.
<resultMap>
Las etiquetas definen la relación de mapeo entre los nombres de las columnas y los nombres de los atributos del objeto uno por uno.T_NAME AS NAME
, el nombre del atributo del objeto es generalmente name
, minúsculas, pero los nombres de las columnas no distinguen entre mayúsculas y minúsculas. MyBatis ignorará las mayúsculas y minúsculas de los nombres de las columnas y encontrará de forma inteligente los nombres de los atributos del objeto correspondientes. T_NAME AS NaMe
, MyBatis aún puede funcionar normalmente.Después de tener 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 la reflexión para asignar valores uno por uno a las propiedades del objeto y devolverlos para aquellas propiedades que no pueden encontrar la relación de mapeo. , la tarea no se puede completar.
Hay muchas otras etiquetas, <resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
, además de SQL dinámico
9
9
9 etiquetas:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
esperar.en<sql>
Para etiquetas de fragmentos de SQL, pase<include>
Las etiquetas introducen fragmentos de SQL,<selectKey>
Genere etiquetas de políticas para claves primarias que no admiten el incremento automático.
Aunque MyBatis analiza el archivo de mapeo XML en orden, la etiqueta B a la que se hace referencia aún se puede definir en cualquier lugar y MyBatis puede identificarla correctamente.
El principio es que MyBatis analiza la etiqueta A y descubre que la etiqueta A hace referencia a la etiqueta B, pero la etiqueta B no ha sido analizada y aún no existe. En este momento, MyBatis marcará la etiqueta A como sin resolver y luego continuará. Para analizar las etiquetas restantes, incluidas las etiquetas B, después de analizar todas las etiquetas, MyBatis volverá a analizar las etiquetas marcadas como no resueltas. Al analizar la etiqueta A, la etiqueta B ya existe y la etiqueta A se puede analizar normalmente.
Puede, no sólo puede Uno a muchos, uno a uno,Lo suficientemente bien Muchos a muchos, muchos a uno. . Esto se consigue de la siguiente manera:
MyBatis puede asignar clases de enumeración. No solo puede asignar clases de enumeración, MyBatis puede asignar cualquier objeto a una columna de la tabla.El método de mapeo es personalizado.TypeHandler
,lograr TypeHandler
desetParameter()
ygetResult()
métodos de interfaz.
TypeHandler
Tiene dos funciones, una es completar eljavaType
ajdbcType
La conversión, la segunda se completa.jdbcType
ajavaType
La conversión se refleja comosetParameter()
ygetResult()
Los dos métodos representan configurar los parámetros del marcador de posición del signo de interrogación SQL y obtener los resultados de la consulta de la columna, respectivamente.
MyBatis Dynamic SQL nos permite escribir SQL dinámico en forma de etiquetas en el archivo de mapeo Xml para completar las funciones de juicio lógico y empalme dinámico que proporciona MyBatis.
9
9
9 Etiquetas SQL dinámicas:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
。
Su principio de ejecución es utilizar OGNL
Calcule el valor de la expresión a partir del objeto de parámetro SQL y empalme SQL dinámicamente de acuerdo con el valor de la expresión para completar la función de SQL dinámico.
Usos de MyBatis RowBounds
El objeto está paginado, es paraResultSet
La paginación de memoria realizada por el conjunto de resultados no es paginación física. Puede escribir parámetros directamente con paginación física en SQL para completar la función de paginación física, o puede usar un complemento de paginación para completar la paginación física.
El principio básico del complemento de paginación es utilizar la interfaz del complemento proporcionada por MyBatis para implementar un complemento personalizado, interceptar el SQL que se ejecutará en el método de interceptación del complemento y luego reescribir el SQL de acuerdo con a dialect
Dialecto, agregue las declaraciones de paginación física correspondientes y los parámetros de paginación física correspondientes.
Ejemplo:
select * from student
Después de interceptar el SQL, reescríbalo como:
select t.* from (select * from student) t limit 0, 10
MyBatis sólo puede escribir para ParameterHandler
、ResultSetHandler
、StatementHandler
、Executor
este
4
4
4 MyBatis, una especie de complemento de interfaz, utiliza el proxy dinámico de JDK para generar objetos proxy para las interfaces que deben interceptarse para implementar la función de interceptación del método de interfaz.
4
4
4 método de un objeto de interfaz, ingresará el método de interceptación, específicamenteInvocationHandler
deinvoke()
Los métodos, por supuesto, sólo interceptarán aquellos métodos que usted especifique para interceptar.
Implementar MyBatis Interceptor
Interfaz y anulaciónintercept()
Método, luego escriba anotaciones para el complemento y especifique qué métodos de qué interfaz desea interceptar. Recuerde, no olvide configurar el complemento que escribió en el archivo de configuración.
PerpetualCache
Caché local de HashMap, su alcance de almacenamiento es Sesión, cuando Sesiónflush
oclose
Después de eso, se borrarán todos los cachés de la sesión y el caché de primer nivel se activará de forma predeterminada.PerpetualCache
, Almacenamiento HashMap, la diferencia es que su alcance de almacenamiento es Mapper
(Namespace
), y la fuente de almacenamiento se puede personalizar, como Ehcache
.La caché de segundo nivel no está habilitada de forma predeterminada. Para habilitar la caché de segundo nivel, es necesario implementar la clase de atributo de la caché de segundo nivel.Serializable
Interfaz de serialización (se puede utilizar para guardar el estado de un objeto), configurable en su archivo de mapeo<cache/>
。C
/ U
/ D
Después de la operación, de forma predeterminada todos los archivos en este ámbitoselect
El caché seráclear
。