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.properties
ubicación se encuentra, a continuación, utilizar $ {key} en el archivo de configuración db.properties
correspondiente al valor de clave; modificar el archivo de configuración para este modificado únicamente fuera después de db.properties
que 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 resultType
propiedad, 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 ;: WARNING Registro 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>
复制代码