6. Mybatis配置之别名优化
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:
<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>
- 这个别名配置只能在Mybatis核心配置文件中使用,且对位置有要求,放在引入外部文件的配置下面。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
<typeAliases>
<package name="domain.blog"/>
</typeAliases>
- 这种方法,name中设置实体类的包名,这样直接引用该包下的实体类时,会自动在这个包中搜索实体类。
小结:
- 第一种方式给实体类起别名,可以自定义实体类的别名,如果实体类比较少可以使用这种方法
- 如果一个包中实体类比较多,则可以使用第二种方式,但是不能给实体类起别名;如果想给实体类定义别名的话,可以通过在实体类中加入@Alias("XXX")注解,定义别名。
代码演示:
第一种方式:
在mybatis-config.xml中添加别名配置:
<typeAliases>
<typeAlias type="com.neu.pojo.User" alias="User"/>
</typeAliases>
在UserMapper.xml中结果类型可以直接引入别名:
<select id="getUserList" resultType="User">
select * from user
</select>
第二种方式:
<typeAliases>
<package name="com.neu.pojo"/>
</typeAliases>
在UserMapper.xml中结果类型可直接引入包中的实体类(建议小写):
<select id="getUserList" resultType="user">
select * from user
</select>
可以使用注解给实体类加别名:
@Alias("UserAlias")
public class User {
private int id;
private String name;
private String pwd;
//...
}
那么,UserMapper.xml中引用实体类型时,必须使用别名,否则会找不到该实体类:
<select id="getUserList" resultType="UserAlias">
select * from user
</select>
设置:
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
一个配置完整的 settings 元素的示例如下:
<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>
在Mybatis官方文档查询具体说明:https://mybatis.org/mybatis-3/zh/configuration.html#settings