Properties(属性)
1. Properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
2. properties(属性)
<!--
mybatis可以使用properties来引入外部properties配置文件的内容;
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
-->
<properties resource="dbconfig.properties"></properties>
3. 如果属性在不只一个地方进行了配置,那么MyBatis将按照下面的顺序来加载
- 在properties元素体内指定的属性首先被读取。
- 然后根据properties元素中的 resource 属性读取类路径下属性文件或根据url属性指定的路径读取属性文件,将覆盖已读取的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
- 总结之,通过方法参数传递的属性的优先级最高,resource 或 url 指定的属性优先级中等,在 properties 元素体中指定的属性优先级最低。
Settings(设置)
<!--
settings包含很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
-->
<settings>
<!-- 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 延迟加载的全局开关 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 是否允许单个语句返回多结果集(需要数据库驱动支持) -->
<setting name="multipleResultSetsEnabled" value="true"/>
<!-- 使用列标签代替列名。实际表现依赖于数据库驱动 -->
<setting name="useColumnLabel" value="true"/>
<!-- 允许 JDBC 支持自动生成主键,需要数据库驱动支持。 -->
<setting name="useGeneratedKeys" value="false"/>
<!--
是否开启驼峰命名自动映射
即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn
-->
<setting name="mapUnderscoreToCamelCase" value="false"/>
</settings>
TypeAliases(类型别名)
<!--
typeAliases:别名处理器
可以为我们的java类型起别名,别名不区分大小写
-->
<typeAliases>
<!-- 1、typeAlias:为某个java类型起别名
type:指定要起别名的类型全类名;默认别名就是类名小写;employee
alias:指定新的别名
-->
<typeAlias type="com.my.mybatis.bean.Employee" alias="emp"/> -->
<!-- 2、package:为某个包下的所有类批量起别名 , 结合@Alias注解为某个类型指定新的别名
name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写))
-->
<package name="com.my.mybatis.bean"/>
</typeAliases>
@Alias("author")
public class Author {
...
}
- 已存在别名,不可使用
TypeHandlers(类型处理器)
1. typeHandlers(类型处理器)
<!-- 用类型处理器将获取到的值以合适的方式转换成java类型 -->
<typeHandlers>
<!-- java.time.LocalDateTime <=> TIMESTAMP -->
<typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler"/>
<!-- java.time.LocalDate <=> DATE -->
<typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler"/>
<!-- java.time.LocalTime <=> TIME -->
<typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler"/>
</typeHandlers>
2. 自定义类型处理器
- 实现 org.apache.ibatis.type.TypeHandler 接口
- 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler
// ExampleTypeHandler.java
@MappedJdbcTypes(JdbcType.VARCHAR)
public class ExampleTypeHandler extends BaseTypeHandler<String> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i,
String parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, parameter);
}
@Override
public String getNullableResult(ResultSet rs, String columnName)
throws SQLException {
return rs.getString(columnName);
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
return rs.getString(columnIndex);
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
return cs.getString(columnIndex);
}
}
- mybatis-config.xml
<typeHandlers>
<typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>