MyBatis配置之实体类起别名

本文介绍了MyBatis中如何为实体类设置别名,以简化映射文件中的类路径引用。通过在全局配置文件中添加typeAliases标签,可以为单个类设置别名,或使用package标签批量扫描包下所有类。同时,实体类可以使用@Alias注解自定义别名,若无注解则默认采用类名首字母小写作为别名。MyBatis还内置了一些常见Java类型的别名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义别名和内置别名

为什么要给实体类起别名?
首先看一下之前的映射文件

<?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 类型内建了相应的类型别名。它们都是大小写不敏感的,注意对基本类型名称重复采取的特殊命名风格。

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值