自定义别名和内置别名
为什么要给实体类起别名?
首先看一下之前的映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper 映射 namespace 命名空间 -->
<mapper namespace="com.xyj.dao.EmpDao">
<!--select 查询操作 id是唯一的(类似于类中的方法名) 不存在重载 -->
<!--resultType 确定返回的类型 -->
<select id="select" resultType="com.xyj.entity.Emp">
select * from emp
</select>
<select id="selectById" resultType="com.xyj.entity.Emp">
select * from emp where eid=#{eid}
</select>
</mapper>
映射文件中出现了好几次com.xyj.entity.Emp,如果要改包名或者类名的话就需要在很多地方做修改,很麻烦,也很容易改不全最终报错,name有没有其他简单一些的方式呢,那就是给我们的实体类的全路径起别名,每次用到的时候写别名即可,修改的时候也只要修改起别名的地方即可。
在我们的全局配置文件中加入typeAliases标签,注意在配置文件中的位置,如下:
<!-- 配置别名 -->
<typeAliases>
<typeAlias type="com.xyj.entity.Emp" alias="emp"/>
</typeAliases>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- MyBatis配置文件 -->
<configuration>
<!-- 配置log4j日志文件 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!-- 配置别名 -->
<typeAliases>
<typeAlias type="com.xyj.entity.Emp" alias="emp"/>
</typeAliases>
<!-- 配置mybatis的多套运行环境 development为开发者模式 -->
<environments default="development">
<environment id="development">
<!--事务管理器 使用JDBC事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--dataSource 数据源配置 POOLED:MyBatis自带数据源 JNDI:基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///jdbcdemo20190804"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 将Dao加入到配置文件中 -->
<mappers>
<mapper resource="mapper/EmpMapper.xml"/>
</mappers>
</configuration>
然后我们就可以在mapper中用别名啦:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper 映射 namespace 命名空间 -->
<mapper namespace="com.xyj.dao.EmpDao">
<!--select 查询操作 id是唯一的(类似于类中的方法名) 不存在重载 -->
<!--resultType 确定返回的类型 -->
<select id="select" resultType="emp">
select * from emp
</select>
<select id="selectById" resultType="emp">
select * from emp where eid=#{eid}
</select>
</mapper>
是不是很方便,但是如果我们有很多实体类的话,一个个起别名依旧很麻烦。
我们不再使用typeAlias标签,使用package标签,表示扫描该包名下的所有类(除了接口和匿名内部类),如果类名上有注解,则使用注解指定的名称作为别名,如果没有则使用类名首字母小写作为别名,如com.xyj.entity.Emp这个类如果没有设置@Alias注解,则此时会被关联到emp这个别名上。
1、给实体类添加@Alias注解
package com.xyj.entity;
import org.apache.ibatis.type.Alias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Alias(value="aaa")
public class Emp {
private int eid;
private String ename;
private String epwd;
private double money;
public Emp(String name, String pwd, double money) {
super();
this.ename = name;
this.epwd = pwd;
this.money = money;
}
}
2、实体类不加注解的情况下,修改mapper文件中引用的类型别名,改为实体类名首字母小写即可。
内置别名
MyBatis其实为我们已经实现了很多别名,已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,注意对基本类型名称重复采取的特殊命名风格。
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |