iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Mybatis配置之typeAlias标签的用法
  • 555
分享到

Mybatis配置之typeAlias标签的用法

2024-04-02 19:04:59 555人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

mybatis typeAlias标签 在实际的工程之中,类的全限定名称很长,当我们需要大量使用的时候,这非常不方便的,然而mybatis提供了typeAlias别名标签供我们别名和

mybatis typeAlias标签

在实际的工程之中,类的全限定名称很长,当我们需要大量使用的时候,这非常不方便的,然而mybatis提供了typeAlias别名标签供我们别名和自定义别名,然而在mybatis之中别名的注册实际上由TypeAliasReGIStry去定义,需要非常注意的是,在mybatis中名不区分大小写的,这一点非常重要。

下面展示了mybatis自己自动初始化了一些别名:

那么他是如何实现初始化别名的呢?

一般的是通过Configuration获取TypeAliasRegistry类对象其中有一个getTypeAliasRegisry方法获取别名,获取之后就可以通过registerAlias方法对别名注册了。

事实上Configuration对象也对一些常用的配置项配置了别名:


public class TypeAliasRegistry {
 
	//使用的HashMap来传记录,String为键或者属性名称,Class<?>则为键值或者为
	//属性值。
  private final Map<String, Class<?>> TYPE_ALIASES = new HashMap<String, Class<?>>();
 
  
  public TypeAliasRegistry() {
	  
    registerAlias("string", String.class); 
    registerAlias("byte", Byte.class);
    registerAlias("long", Long.class);
    registerAlias("short", Short.class);
    registerAlias("int", Integer.class);
    registerAlias("integer", Integer.class);
    registerAlias("double", Double.class);
    registerAlias("float", Float.class);
    registerAlias("boolean", Boolean.class);
 
    registerAlias("byte[]", Byte[].class);
    registerAlias("long[]", Long[].class);
    registerAlias("short[]", Short[].class);
    registerAlias("int[]", Integer[].class);
    registerAlias("integer[]", Integer[].class);
    registerAlias("double[]", Double[].class);
    registerAlias("float[]", Float[].class);
    registerAlias("boolean[]", Boolean[].class);
 
    registerAlias("_byte", byte.class);
    registerAlias("_long", long.class);
    registerAlias("_short", short.class);
    registerAlias("_int", int.class);
    registerAlias("_integer", int.class);
    registerAlias("_double", double.class);
    registerAlias("_float", float.class);
    registerAlias("_boolean", boolean.class);
 
    registerAlias("_byte[]", byte[].class);
    registerAlias("_long[]", long[].class);
    registerAlias("_short[]", short[].class);
    registerAlias("_int[]", int[].class);
    registerAlias("_integer[]", int[].class);
    registerAlias("_double[]", double[].class);
    registerAlias("_float[]", float[].class);
    registerAlias("_boolean[]", boolean[].class);
 
    registerAlias("date", Date.class);
    registerAlias("decimal", BigDecimal.class);
    registerAlias("bigdecimal", BigDecimal.class);
    registerAlias("biginteger", BigInteger.class);
    registerAlias("object", Object.class);
 
    registerAlias("date[]", Date[].class);
    registerAlias("decimal[]", BigDecimal[].class);
    registerAlias("bigdecimal[]", BigDecimal[].class);
    registerAlias("biginteger[]", BigInteger[].class);
    registerAlias("object[]", Object[].class);
 
    registerAlias("map", Map.class);
    registerAlias("hashmap", HashMap.class);
    registerAlias("list", List.class);
    registerAlias("arraylist", ArrayList.class);
    registerAlias("collection", Collection.class);
    registerAlias("iterator", Iterator.class); 
    registerAlias("ResultSet", ResultSet.class);
  }
 
  @SuppressWarnings("unchecked")
  // throws class cast exception as well if types cannot be assigned
  public <T> Class<T> resolveAlias(String string) {
    try {
      if (string == null) {
        return null;
      }
      // issue #748
      String key = string.toLowerCase(Locale.ENGLISH);
      Class<T> value;
      if (TYPE_ALIASES.containsKey(key)) {
        value = (Class<T>) TYPE_ALIASES.get(key);
      } else {
        value = (Class<T>) Resources.classForName(string);
      }
      return value;
    } catch (ClassNotFoundException e) {
      throw new TypeException("Could not resolve type alias '" + string + "'.  Cause: " + e, e);
    }
  }
 
  
  public void registerAliases(String packageName){
    registerAliases(packageName, Object.class);
  }
  
  
  
  
 
  public void registerAliases(String packageName, Class<?> superType){
    ResolverUtil<Class<?>> resolverUtil = new ResolverUtil<Class<?>>();
    resolverUtil.find(new ResolverUtil.IsA(superType), packageName);
    Set<Class<? extends Class<?>>> typeSet = resolverUtil.getClasses();
    for(Class<?> type : typeSet){
      // Ignore inner classes and interfaces (including package-info.java)
      // Skip also inner classes. See issue #6
    	//判断是否为匿名类或者是接口,成员类即类中的嵌套类,是的话不注册
      if (!type.isAnonymousClass() && !type.isInterface() && !type.isMemberClass()) {
        registerAlias(type);
      }
    }
  }
 
  
  public void registerAlias(Class<?> type) {
    String alias = type.getSimpleName();
    Alias aliasAnnotation = type.getAnnotation(Alias.class);
    if (aliasAnnotation != null) {
      alias = aliasAnnotation.value();
    } 
    registerAlias(alias, type);
  }
 
  public void registerAlias(String alias, Class<?> value) {
    if (alias == null) {
      throw new TypeException("The parameter alias cannot be null");
    }
    // issue #748
    String key = alias.toLowerCase(Locale.ENGLISH);
    if (TYPE_ALIASES.containsKey(key) && TYPE_ALIASES.get(key) != null && !TYPE_ALIASES.get(key).equals(value)) {
      throw new TypeException("The alias '" + alias + "' is already mapped to the value '" + TYPE_ALIASES.get(key).getName() + "'.");
    }
    TYPE_ALIASES.put(key, value);
  }
 
  public void registerAlias(String alias, String value) {
    try {
      registerAlias(alias, Resources.classForName(value));
    } catch (ClassNotFoundException e) {
      throw new TypeException("Error registering type alias "+alias+" for "+value+". Cause: " + e, e);
    }
  }
  
  
  public Map<String, Class<?>> getTypeAliases() {
    return Collections.unmodifiableMap(TYPE_ALIASES);
  } 
}

以上是mybatis中关于别名的类,其在org.apache.ibatis.type包里面,还要注意某些已经注册过的类别就不要重复定义了,这会引起mybatis 的运行错误,那么我们如何实现自定义别名呢,


<typeAliases>
         <typeAlias alias="role" type="com.*.类名">
</typeAliases>

这样可以定义一个别名了,如果需要很多的类需要注册时,可以使用mybatis支持的扫描别名。


<typeAliases>
         <package name="com.">
</typeAliases>

这样就会扫描指定的这个包,并将这个包中的类的第一个字母变为小写字母的新名字作为别名,假如扫描的多个包中有同名称的类,这时候就会产生异常,此时我们可以在pojo类添加Alias注解。


@Alias("User2")
public class User{
      ····
}

这样就能够导致不同的包中出现相同的类名而导致自动扫描的别名一样造成的冲突,建议部分包名和类型名作为别名,可以有效进行区分。

Mybatis typeAlias配置

用3种方法实现typeAlias配置

1.定义别名:


<typeAliases>
     <typeAlias alias="User" type="cn.lxc.vo.User" />
</typeAliases>

2.扫描包方式:


<typeAliases>
     <package name="cn.lxc.vo" />
</typeAliases>

3.注解方式:


package cn.lxc.vo;
import org.apache.ibatis.type.Alias;
@Alias("User")
public class User {
    private int id;
    private String name;
    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Mybatis配置之typeAlias标签的用法

本文链接: https://www.lsjlt.com/news/130430.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mybatis配置之typeAlias标签的用法
    Mybatis typeAlias标签 在实际的工程之中,类的全限定名称很长,当我们需要大量使用的时候,这非常不方便的,然而mybatis提供了typeAlias别名标签供我们别名和...
    99+
    2024-04-02
  • Mybatis中怎么配置typeAlias标签
    Mybatis中怎么配置typeAlias标签,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Mybatis typeAlias标签在实际的工程之中,类的全限定名...
    99+
    2023-06-20
  • Mybatis配置之properties和settings标签的用法
    Mybatis properties标签和settings标签 本次将讲述mybatis的配置,主要的配置是基于mybatis的配置文件来进行配置的,其配置文件并不复杂 如下面的例子...
    99+
    2024-04-02
  • Mybatis之typeAlias配置的3种方式小结
    目录Mybatis typeAlias配置1.定义别名2.扫描包方式3.注解方式springboot加载mybatis的typeAlias问题为了清晰可见,直接贴代码Mybatis ...
    99+
    2024-04-02
  • Mybatis typeAlias的配置方式有哪些
    这篇文章主要介绍了Mybatis typeAlias的配置方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mybatis typeAlias的配置方式有哪些文章都会有所收获,下面我们一起来看看吧。Myb...
    99+
    2023-06-26
  • Mybatis mapper标签中配置子标签package的坑及解决
    目录mapper标签中配置子标签package的坑Mybatis中mappers标签介绍配置方式1.接口所在包2.相对路径配置3.类注册引入4.使用URL绝对路径方式引入(不用)使用...
    99+
    2024-04-02
  • Mybatis动态SQL之where标签用法说明
    目录关于where标签用法使用where标签及一些注意点where标签简单使用关于where标签用法 xml映射文件部分内容: <sel...
    99+
    2024-04-02
  • Mybatis中resultMap标签和sql标签的设置方式
    目录resultMap标签和sql标签的设置1、项目目录2、数据库中的表的信息3、配置文件的信息4、User类5、IUserDao接口6、MybatisTest7、运行结果resul...
    99+
    2024-04-02
  • mybatis的<choose>标签使用
    记录:418 场景:使用MyBatis的标签的标签的test属性,对入参属性的值做非null(!=null)、非空(!='')判断,或者与常量做相等(==)或者不等判断(!=)。 版本:JDK 1.8,Spring Boot 2.6.3,m...
    99+
    2023-09-22
    mybatis choose标签使用 Java ORM框架
  • Trim标签在Mybatis中的使用方法
    Trim标签在Mybatis中的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体代码如下所示:<update id="updateAu...
    99+
    2023-05-31
    mybatis trim
  • MyBatis动态SQL标签的用法详解
    1.MyBatis动态SQL MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 S...
    99+
    2024-04-02
  • mybatis中set标签的用法是什么
    在MyBatis中,set标签用于指定更新语句中要更新的字段以及对应的数值。set标签中包含的子标签会生成一组逗号分隔的赋值语句,用...
    99+
    2024-03-04
    mybatis
  • MyBatis foreach 标签常用方法总结
    一、前言   在 MyBatis 中,常常会遇到集合类型的参数,虽然我们可以通过 OGNL 表达式来访问集合的某一个元素,但是 OGNL 表达式无法遍历集合。foreach 标签就是专门用来解决这类问题的,foreach 标签可以用来遍历数...
    99+
    2023-08-20
    mybatis java mysql
  • mybatis中<choose>标签的用法说明
    目录choose标签用法choose动态用法choose标签用法 choose 标签是按顺序判断其内部 when 标签中的 test 条件出否成立,如果有一个成立,则 choose ...
    99+
    2024-04-02
  • Mybatis | Mybatis标签collection一对多的使用
    Mybatis标签collection一对多的使用 一、colleciton 标签二、collection使用方法1. 方法一: 嵌套结果映射2. 方法二: 嵌套select 查询 三、 ...
    99+
    2023-09-05
    mybatis java mysql
  • Mybatis的mapper标签 namespace属性用法说明
    目录Mybatis mapper标签namespace属性说明MyBatis的命名空间(我们以下图的文件结构来说明)下面我来说一下他们三个之间的关系,我们Mybatis中namesp...
    99+
    2024-04-02
  • mybatis模糊查询之bind标签和concat函数用法详解
    1.二种方式都可以用来模糊查询,都能预防 SQL 注入。但是在更换数据库情况下,bind标签通用。 <if test=” userName != null and userNa...
    99+
    2024-04-02
  • mybatis中sql语句CDATA标签的用法说明
    sql语句CDATA标签的用法 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。 在 XML 元素中,"<" 和 ...
    99+
    2024-04-02
  • mybatis中sql语句CDATA标签的用法介绍
    这篇文章主要介绍“mybatis中sql语句CDATA标签的用法介绍”,在日常操作中,相信很多人在mybatis中sql语句CDATA标签的用法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mybatis...
    99+
    2023-06-20
  • Mybatis sqlMapConfig.xml中的mappers标签使用
    目录sqlMapConfig.xml中的mappers标签mappers(映射配置)1.1:通过resource加载单个映射文件1.2:通过mapper接口加载单个映射文件1.3:批...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作