mybaits configuración de mybatis

Un prólogo

Este artículo cubre una gran cantidad de configuraciones de mybatis, lee una y gana de por vida.

Configuración de dos propiedades

En el artículo publicado anteriormente, la información de conexión de la base de datos de configuración se escribe directamente mybatis-config.xml; para que sea flexible y conveniente de usar, y modifique dinámicamente la configuración, extraemos el contenido de la configuración en un archivo de configuración db.properties(ubicado en el directorio de recursos, que también se puede personalizar), y luego configuramos el archivo de <properties>marcador incorporado db.propertiesubicación se encuentra, a continuación, utilizar $ {key} en el archivo de configuración db.propertiescorrespondiente al valor de clave; modificar el archivo de configuración para este modificado únicamente fuera después de db.propertiesque los contenidos pueden;

2.1 mybatis-config.xml

El archivo de configuración se modifica de la siguiente manera: después de MyBatis 3.4.2, también admite atributos predeterminados como $ {username: root}. Cuando el atributo no está definido en el archivo de configuración, se leerá la raíz del atributo predeterminado. Para una configuración de atributo más detallada, consulte el sitio web oficial;

	<!-- 引入resource目录下的配置文件 -->
    <properties resource="db.properties">
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </properties>

    <!-- 全局环境配置-->
    <environments default="development">
        <environment id="development">
            <!-- 事物 -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <!-- 配置默认值-->
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
复制代码

2.2 db.properties

El archivo de propiedades es el siguiente;

driver = com.mysql.jdbc.Driver
username = root
url = jdbc:mysql://192.168.0.100:3306/mybatis
password = 123456
复制代码

Configuración de tres tipos de alias

typeAliases alias es el significado de los resultados de nuestra investigación antes una resultTypepropiedad, cada vez que tenga que utilizar el nombre completo de la clase de rendimiento (por ejemplo: com.zszxz.config.entity.Student), esta configuración más complicada, mybatis Puede usar un nombre de clase simple en lugar del nombre completo de la clase configurando un alias;

3.1 Método de configuración uno

La primera configuración es complicada, es decir, el número de tipo de retorno de las clases de entidad que tiene, en la propiedad SqlMapConfig.xml de <typeAliases>cuántos configuración de asignación de nombre de la clase;

El fragmento del código mybatis-config.xml es el siguiente, y debe tenerse en cuenta la ubicación de las etiquetas ;

    <typeAliases>
        <typeAlias type="com.zszxz.config.entity.Student" alias="student"></typeAlias>
    </typeAliases>
复制代码

La configuración de mapper.xml es la siguiente:

	<!-- 查询学生-->
    <select id="getStudent" resultType="student">
        select * from student
    </select>
复制代码

3.2 Método de configuración dos

El segundo método de configuración es usar la configuración del nombre del paquete, mybaits se asignará automáticamente, podemos usar el nombre simple de la clase en mapper.xml para representar el nombre completo de la clase, este método es más conciso, se recomienda usar;

El fragmento de código Mybatis-config.xml es el siguiente

 <typeAliases>
        <package name="com.zszxz.config.entity"/>
 </typeAliases>

复制代码

La configuración de mapper.xml es la siguiente:

    <!-- 查询学生-->
    <select id="getStudent" resultType="student">
        select * from student
    </select>
复制代码

3.3 Modo de configuración 3

El tercer método de configuración es utilizar la configuración de anotación. Este método de configuración se basa en el segundo método de configuración. El alias predeterminado se puede modificar (el valor predeterminado es usar el nombre de clase simple de la clase); la anotación @Alias ​​se puede especificar en la entidad del tipo de retorno. Alias

Las entidades son las siguientes:

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/12/1 20:07
 */
@Alias("stu")
public class Student {

    // id
    private String id;
    // 学生姓名
    private String name;
    // 学生编号
    private String number;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}
复制代码

mapper.xml es el siguiente:

    <!-- 查询学生-->
    <select id="getStudent" resultType="stu">
        select * from student
    </select>
复制代码

3.4 alias incorporado Mybatis

Mybatis ha incorporado varios tipos de alias, es decir, algunos tipos de datos pueden usar nombres simples de clases sin configurar alias, como los tipos de datos básicos y los tipos de empaquetado correspondientes, colecciones, iteradores, clases de cadenas, valores grandes, fechas, etc. ;

Instrucciones de configuración de cuatro ajustes

Las instrucciones de configuración de configuración son las siguientes

Atributos Explicación Valor por defecto
cacheEnabled Activar caché global falso
lazyLoadingEnabled Carga diferida global, todos los objetos asociados se cargarán diferidamente; se pueden configurar asociaciones específicas utilizando el atributo fetchType falso
agresivoLazyLoading Después de abrir, no importa qué método se llame para cargar el objeto, todas las propiedades del objeto se cargarán, de lo contrario se cargará a pedido falso
multipleResultSetsEnabled Si se debe permitir que una sola declaración devuelva conjuntos de resultados múltiples (requiere soporte del controlador) teue
useColumnLabel Use etiquetas de columna en lugar de nombres de columna falso
useGeneratedKeys Permitir que JDBC admita la generación automática de claves primarias, se requiere soporte de controlador falso
autoMappingBehavior MyBatis asigna automáticamente columnas a campos o atributos; NINGUNO significa cancelar la asignación automática; PARTIAL solo asignará automáticamente conjuntos de resultados que no definen la asignación de conjuntos de resultados. FULL asignará automáticamente cualquier conjunto de resultados complejo; PARCIAL
autoMappingUnknownColumnBehavior Notifique el comportamiento de asignar automáticamente la columna desconocida de destino (o tipo de atributo desconocido) NONE;: Sin respuesta ;: WARNINGRegistro de recordatorio de salida FAILING;: Error de asignación lanzado SqlSessionException; NINGUNA
defaultExecutorType Establecer el actuador predeterminado. SIMPLE es un ejecutor ordinario; el ejecutor REUSE reutilizará las declaraciones preparadas (declaraciones preparadas); el ejecutor BATCH reutilizará las declaraciones y realizará actualizaciones por lotes SIMPLE
defaultStatementTimeout Establezca el período de tiempo de espera y determine la cantidad de segundos que el controlador espera una respuesta de la base de datos Ninguno
defaultFetchSize Establezca un valor de pista para el número de resultados obtenidos (fetchSize); Ninguno
safeRowBoundsEnabled Permitir paginación (RowBounds) en declaraciones anidadas; establecer en falso si está permitido falso
safeResultHandlerEnabled Permitir paginación (ResultHandler) en sentencias anidadas; establecer en falso si está permitido falso
mapUnderscoreToCamelCase Ya sea para habilitar las reglas automáticas de nombres de jorobas falso
localCacheScope MyBatis usa Caché local para evitar referencias circulares y acelerar consultas anidadas repetidas. SESSION almacenará en caché todas las consultas ejecutadas en una sesión; STATEMENT la sesión local solo se usa para la ejecución de instrucciones, diferentes llamadas a la misma SqlSession no compartirán datos SESIÓN
jdbcTypeForNull Cuando no se proporciona un tipo JDBC específico para el parámetro, especifique el tipo JDBC para el valor nulo OTRO
lazyLoadTriggerMethods Especifique qué método del objeto desencadena una carga diferida es igual a, clon, hashCode, toString
defaultScriptingLanguage Especifique el idioma predeterminado para la generación dinámica de SQL. org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
defaultEnumTypeHandler 指定 Enum 使用的默认 TypeHandler org.apache.ibatis.type.EnumTypeHandler
callSettersOnNulls 指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,依赖于 Map.keySet() 或 null 值初始化的时候比较有用。 false
returnInstanceForEmptyRow 当返回行的所有列都是空时,MyBatis默认返回 null。 当开启这个设置时,MyBatis会返回一个空实例;(新增于 3.4.2) false
logPrefix 指定 MyBatis 增加到日志名称的前缀 unset
logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找 unset
proxyFactory 代理工厂。指定 Mybatis 创建具有延迟加载能力的对象所用到的代理工具。 JAVASSIST (MyBatis 3.3 以上)
vfsImpl 指定 VFS 的实现 unset
useActualParamName 使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 -parameters 选项。(新增于 3.4.1) true
configurationFactory 指定一个提供 Configuration 实例的类。 这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。 这个类必须包含一个签名为static Configuration getConfiguration() 的方法。(新增于 3.2.3) unset

官方完整示例如下,实际开发中并非如此配置,按需配置;

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
复制代码

五 typeHandlers 类型处理器

类型处理器故名思意,也就是可以在java类型和数据库jdbc类型之间转换;如果要自定义类型处理器就需要编写类型处理器类,然后在配置文件中配置,在SQL映射文件mapper.xml中使用。

5.1 自定义TypeHandle

本次示例就以字符串类型演示,需要继承BaseTypeHandler类,重写里面的方法,具体的代码清单如下,使用注解 @MappedJdbcTypes 会覆盖 泛型的String类型;

/**
 * @Author lsc
 * <p> 知识追寻者,字符串类型处理器</p>
 */
// 指定关联jdbc会改变泛型指定
//@MappedJdbcTypes(JdbcType.VARCHAR)
public class StringTypeHandler extends BaseTypeHandler<String> {

    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
        // 指定java参数类型(String)对应数据库类型(varchar)
        preparedStatement.setString(i,s);
    }

    public String getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return resultSet.getString(s);
    }

    public String getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return resultSet.getString(i);
    }

    public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return callableStatement.getString(i);
    }
}
复制代码

5.2 mybatis-config.xml

在 mybaits的配置文件中配置自定义的类型处理器

 <!--配置类型处理器,会覆盖默认的类型处理器 -->
    <typeHandlers>
        <typeHandler handler="com.zszxz.config.handler.StringTypeHandler"></typeHandler>
    </typeHandlers>
复制代码

也可以使用包名全局扫描,减轻配置过程;

 <!--配置类型处理器,会覆盖默认的类型处理器 -->
    <typeHandlers>
        	<package name="com.zszxz.config.handler"/>
    </typeHandlers>
复制代码

如果配置了jdbc的映射属性会覆盖泛型指定类型

  <typeHandlers>
        <!--指定关联jdbc会改变泛型指定 -->
        <typeHandler handler="com.zszxz.config.handler.StringTypeHandler" javaType="java.lang.String" jdbcType="VARCHAR"></typeHandler>
    </typeHandlers>
复制代码

5.3 SQL映射文件

使用 jdbcType=VARCHAR,javaType=String 指定类型转换;

    <insert id="addStudent" parameterType="stu">
        insert into student(`name`,`number`)
        values (#{name,jdbcType=VARCHAR,javaType=String},#{number})
    </insert>
复制代码

六 mappers映射器

mappers映射器就是配置引入SQL映射文件,也很简单,这边就给出官方示例,不再具体试验,有四种方式,通常我们掌握一至两种就足够日常开发使用;

6.1 相对于类路径方式

<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
复制代码

6.2 资源绝对路径方式

<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
复制代码

6.3 接口实现类的完全限定类名方式

<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
复制代码

6.4 接口实现类的包名方式

<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
复制代码

Supongo que te gusta

Origin juejin.im/post/5e959b34e51d4546ef36a351
Recomendado
Clasificación