Mybatis配置之<typeAliases>别名配置元素解析

 更新时间:2021年7月14日 00:00  点击:2149

在前面的文章<Mybatis配置之<properties>属性配置元素详述>,我们讲述了<properties>标签元素的配置和使用方法。

在这篇文章中,我们来说说<typeAliases>标签元素,这个元素主要是用于对类型进行别名控制,具体什么意思呢?我们下面用一个示例说明,看了之后我相信你就会明白了。

这里我们贴出之前的UserDao对应的mapper文件

如下所示:

<?xml version="1.0" encoding="UTF-8" ?>   
<!DOCTYPE mapper   
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.majing.learning.mybatis.dao.UserDao">
 
 <select id="findUserById" resultType="com.majing.learning.mybatis.entity.User">
  select * from user where id = #{id}
 </select>
 
 <insert id="addUser" parameterType="com.majing.learning.mybatis.entity.User" useGeneratedKeys="true" keyProperty="id">
  insert into user(name,password,age) values(#{name},#{password},#{age})
 </insert>
 
 <delete id="deleteUser" parameterType="int">
  delete from user where id = #{id}
 </delete>
 
 <update id="updateUser" parameterType="com.majing.learning.mybatis.entity.User">
  update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
 </update>
 
</mapper>

从这个配置文件中,我们可以看到<select>、<insert>和<update>三个标签元素的resultType都是User对象,需要设置这个User对象的类全限定名,即packname.classname。

我们发现一个问题,那就是这个类名,我们需要写多次,如果要改这个类名的话,我们需要在多个地方进行修改。

很明显,这样配置的话很容易造成修改上的遗漏,同时也书写上也比较麻烦。

因此,MyBatis为我们提供了一个简单方便的配置方法,那就是使用<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">
<configuration>
 
 <properties resource="mysql.properties">
  <property name="username" value="root"/>
  <property name="password" value="root"/>
  <property name="driver" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
 </properties>
 
 <settings>
  <setting name="logImpl" value="LOG4J" />
 </settings>
 
 <typeAliases>
   <typeAlias alias="User" type="com.majing.learning.mybatis.entity.User"/> 
 </typeAliases>
 
 <!-- 和spring整合后 environments配置将废除 -->
 <environments default="development">
  <environment id="development">
   <!-- 使用jdbc事务管理 -->
   <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>
 
 <mappers>
  <mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
 </mappers>
 
</configuration>

如上所示,我们在原来的mybatis配置文件中增加了<typeAliases>标签,并将com.majing.learning.mybatis.entity.User这个实体类重命名为User,然后我们在mapper配置文件中就可以如下使用了。

备注:这里需要注意的是,typeAliases配置需要放置在settings之后,否则会出异常!!!

<?xml version="1.0" encoding="UTF-8" ?>   
<!DOCTYPE mapper   
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.majing.learning.mybatis.dao.UserDao">
 
 <select id="findUserById" resultType="User">
  select * from user where id = #{id}
 </select>
 
 <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
  insert into user(name,password,age) values(#{name},#{password},#{age})
 </insert>
 
 <delete id="deleteUser" parameterType="int">
  delete from user where id = #{id}
 </delete>
 
 <update id="updateUser" parameterType="User">
  update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
 </update>
 
</mapper>

这样即使实体类名修改了,所需要修改的地方也只有一处,便于集中管理。

也许你会有疑问,如果实体类比较多怎么办?还不是要配置很多实体类和别名,NO,NO,NO!下面跟大家说说另一种配置方法。

<?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">
<configuration>
 
 <properties resource="mysql.properties">
  <property name="username" value="root"/>
  <property name="password" value="root"/>
  <property name="driver" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
 </properties>
 
 <settings>
  <setting name="logImpl" value="LOG4J" />
 </settings>
 
 <typeAliases>
  <package name="com.majing.learning.mybatis.entity"/>
 </typeAliases>
 
 <!-- 和spring整合后 environments配置将废除 -->
 <environments default="development">
  <environment id="development">
   <!-- 使用jdbc事务管理 -->
   <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>
 
 <mappers>
  <mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
 </mappers>
 
</configuration>

在这里,我们不再使用<typeAliases>标签下<typeAliase>,而是使用<package>标签,表示扫描该包名下的所有类(除了接口和匿名内部类),如果类名上有注解,则使用注解指定的名称作为别名,如果没有则使用类名首字母小写作为别名,如com.majing.learning.mybatis.entity.User这个类如果没有设置@Alias注解,则此时会被关联到user这个别名上。

因此,按照上面的配置,我们还需要将实体类做一下调整,如下两种方式所示:

(1)给实体类添加@Alias注解

package com.majing.learning.mybatis.entity;
 
import org.apache.ibatis.type.Alias;
 
@Alias(value="User")
public class User {
	private int id;
	private String name;
	private String password;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + "]";
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
 
	
	
}

(2)实体类不加注解的情况下

修改mapper文件中引用的类型别名,改为小写,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>   
<!DOCTYPE mapper   
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.majing.learning.mybatis.dao.UserDao">
 
	<select id="findUserById" resultType="user">
		select * from user where id = #{id}
	</select>
	
	<insert id="addUser" parameterType="user" useGeneratedKeys="true" keyProperty="id">
		insert into user(name,password,age) values(#{name},#{password},#{age})
	</insert>
	
	<delete id="deleteUser" parameterType="int">
		delete from user where id = #{id}
	</delete>
	
	<update id="updateUser" parameterType="user">
		update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
	</update>
 
</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

至此,关于别名的全部使用方法这里便介绍完成了,是不是很简单啊~

Mybatis别名的配置(两种方法)

对于mapper的映射xml文件

sql语句中存在着resultType。

修改前:写了接受实体类的全限定名

在这里插入图片描述

在mybatis的配置文件中添加

位置需要添加在configtion的标签下面;

<configuration>
    <typeAliases>
        <typeAlias type="com.uu.bean.News" alias="jj"/>
    </typeAliases>

修改后:

添加后在mapper的映射文件中全限定名中改为了配置的简单的别名

在这里插入图片描述

第二种方式:

在代码中:

import org.apache.ibatis.type.Alias;
@Alias("jj")
public class News {

在配置文件中:

<configuration>
    <typeAliases>
        <package name="com.uu.bean"/>
    </typeAliases>

可以达到与配置中声名相同的效果。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。

[!--infotagslink--]

相关文章

  • IntelliJ IDEA2021.1 配置大全(超详细教程)

    这篇文章主要介绍了IntelliJ IDEA2021.1 配置大全(超详细教程),需要的朋友可以参考下...2021-04-18
  • Windows VPN服务器配置图文教程 超详细版

    VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
  • Tomcat配置及如何在Eclipse中启动

    这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-04
  • Mybatis Plus select 实现只查询部分字段

    这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
  • Laravel4安装配置的方法

    如果我们需要安培Laravel4的话最php最低要求要在php5.3.7版本并且我们需要把mcrypt与openss这两个扩展开启才可以,具体步骤我们参考下文。 前面我们介绍我了 com...2016-11-25
  • 解决Mybatis 大数据量的批量insert问题

    这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
  • mybatis的Configuration详解

    这篇文章主要介绍了mybatis的Configuration详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04
  • mybatis 返回Integer,Double,String等类型的数据操作

    这篇文章主要介绍了mybatis 返回Integer,Double,String等类型的数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-25
  • 详解Maven profile配置管理及激活profile的几种方式

    这篇文章主要介绍了详解Maven profile配置管理及激活profile的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26
  • IDEA如何添加配置文件到classpath中

    这篇文章主要介绍了IDEA如何添加配置文件到classpath中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
  • 部署PHP时的4个配置修改说明

    以下就是部署PHP时的4个配置修改说明,大家一个一个进行学习研究。1、short_open_tag 是什么呢? 决定是否允许使用代码开始标志的缩写形式(<&#63; &#63;> )。如果要和 XML 结合使用PHP,可以禁用此选项以便于嵌入使用<&#63;x...2015-10-21
  • MyBatis-Plus的物理删除和逻辑删除(使用场景)

    数据库中的数据删除会分为两种:物理删除 和 逻辑删除,接下来通过本文给大家介绍MyBatis-Plus的物理删除和逻辑删除使用场景分析,感兴趣的朋友一起看看吧...2021-09-25
  • Springboot如何使用mybatis实现拦截SQL分页

    这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19
  • Vue-Router的routes配置详解

    在使用vue-router的项目中,实例化VueRouter是其配置选项routes该选项指定路由与视图的组件的关系或者路由与其他路由的关系,Router配置选项中是其中最重要的配置。本文就详细的介绍一下...2021-10-25
  • Mybatis执行update失败的解决

    这篇文章主要介绍了Mybatis执行update失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
  • 华为畅享20Pro配置怎么样?华为畅享20Pro参数配置分析

    华为畅享20Pro配置怎么样?对于即将上市的华为畅享20 Pro手机,很多的网友们也是相当关注的,大家都想要知道这款华为畅享20 Pro手机的配置到底怎么样,赶紧看看吧...2020-06-29
  • Mybatis plus中使用in查询出错如何解决

    这篇文章主要介绍了Mybatis plus中使用in查询出错的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-06
  • 解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    这篇文章主要介绍了解决Mybatis中mapper.xml文件update,delete及insert返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-23
  • mybatis-plus雪花算法自动生成机器id原理及源码

    Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变,Mybatis-Plus是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等,下面一起看看mybatis-plus雪花算法自动生成机器id原理解析...2021-06-04