for java
package org.apache.ibatis.type;
import org.apache.ibatis.io.ResolverUtil;
import org.apache.ibatis.io.Resources;
import java.math.BigDecimal;
import java.util.*;
import java.sql.ResultSet;
public class TypeAliasRegistry {
private final HashMap<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("object", Object.class);
registerAlias("date[]", Date[].class);
registerAlias("decimal[]", BigDecimal[].class);
registerAlias("bigdecimal[]", BigDecimal[].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);
}
public Class resolveAlias(String string) {
try {
if (string == null) return null;
String key = string.toLowerCase();
Class value;
if (TYPE_ALIASES.containsKey(key)) {
value = TYPE_ALIASES.get(key);
} else {
value = 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
if (!type.isAnonymousClass())
registerAlias(type.getSimpleName(), type);
}
}
public void registerAlias(Class type) {
registerAlias(type.getSimpleName(), type.getName());
}
public void registerAlias(String alias, Class value) {
assert alias != null;
String key = alias.toLowerCase();
if (TYPE_ALIASES.containsKey(key) && !TYPE_ALIASES.get(key).equals(value.getName()) && TYPE_ALIASES.get(alias) != null) {
if (!value.equals(TYPE_ALIASES.get(alias))) {
throw new TypeException("The alias '" + alias + "' is already mapped to the value '" + TYPE_ALIASES.get(alias).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);
}
}
}
for jdbc
package org.apache.ibatis.type;
import java.sql.Types;
import java.util.*;
public enum JdbcType {
/***
* This is added to enable basic support for the
* ARRAY data type - but a custom type handler is still required
*/
ARRAY(Types.ARRAY),
BIT(Types.BIT),
TINYINT(Types.TINYINT),
SMALLINT(Types.SMALLINT),
INTEGER(Types.INTEGER),
BIGINT(Types.BIGINT),
FLOAT(Types.FLOAT),
REAL(Types.REAL),
DOUBLE(Types.DOUBLE),
NUMERIC(Types.NUMERIC),
DECIMAL(Types.DECIMAL),
CHAR(Types.CHAR),
VARCHAR(Types.VARCHAR),
LONGVARCHAR(Types.LONGVARCHAR),
DATE(Types.DATE),
TIME(Types.TIME),
TIMESTAMP(Types.TIMESTAMP),
BINARY(Types.BINARY),
VARBINARY(Types.VARBINARY),
LONGVARBINARY(Types.LONGVARBINARY),
NULL(Types.NULL),
OTHER(Types.OTHER),
BLOB(Types.BLOB),
CLOB(Types.CLOB),
BOOLEAN(Types.BOOLEAN),
CURSOR(-10), // Oracle
UNDEFINED(Integer.MIN_VALUE + 1000),
NVARCHAR(-9), // JDK6
NCHAR(-15), // JDK6
NCLOB(2011), // JDK6
STRUCT(Types.STRUCT);
public final int TYPE_CODE;
private static Map<Integer,JdbcType> codeLookup = new HashMap<Integer,JdbcType>();
static {
for (JdbcType type : JdbcType.values()) {
codeLookup.put(type.TYPE_CODE, type);
}
}
JdbcType(int code) {
this.TYPE_CODE = code;
}
static JdbcType forCode(int code) {
return codeLookup.get(code);
}
}
分享到:
相关推荐
首先,我们要理解Mybatis中的三种关联映射类型: 1. **一对一(OneToOne)映射**:这种映射通常用于表示两个实体之间一对一的关系,例如一个用户只有一个地址。在Mybatis中,可以通过`<association>`标签来定义一对...
复杂映射开发是Mybatis框架中的一个重要部分,它支持将单个结果集映射到复杂类型的嵌套结构中。 首先,Mybatis的复杂映射通过自定义映射规则来实现,如XML配置文件中可以定义多种映射类型和行为。在自定义映射中,`...
Mybatis 是一款流行的 Java 持久层框架,它提供了灵活的 SQL 查询和映射机制,使得数据库操作更加便捷。在 Mybatis 中,高级映射查询是其核心特性之一,它帮助开发者摆脱了传统 JDBC 中繁琐的代码编写,提高了开发...
4. **自动填充关联对象**:MyBatis的`<collection>`标签允许你指定一个Java集合类型(如List或Set),并配置`<foreach>`来迭代中间表的结果,填充主对象的关联集合。 5. **缓存策略**:考虑使用MyBatis的缓存机制来...
Mapper文件是MyBatis的核心组件之一,它定义了SQL语句和Java方法之间的映射关系。在XML格式的Mapper文件中,你可以定义增、删、改、查等各种类型的SQL语句,并通过接口方法调用来执行这些语句。例如,一个简单的查询...
在MyBatis中,关联映射是处理对象关系映射(ORM)的重要部分,用于描述实体类之间的关联关系,如一对一(OneToOne)、一对多(OneToMany)和多对多(ManyToMany)。下面我们将深入探讨这些关联映射的实现和原理。 ...
数据库到Mybatis的映射是Java开发中常见的一种技术实践,它主要用于简化数据库操作,提高开发效率。Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置...
解决在springboot+mybatis+postgresql时,数据库字段类型为json时,如何与mybatis进行映射
通过本次实验的学习,我们深入了解了MyBatis关联映射的基本原理和技术要点,掌握了不同类型的关联查询方法及其应用场景。在实际开发过程中,合理运用关联映射技术能够显著提升系统的性能和可维护性。同时,通过实验...
【标题】"Mybatis系列教程Mybatis复杂映射开发共6页" 提供了一个关键信息,即本教程专注于Mybatis的复杂映射开发,这通常指的是在Mybatis框架中处理多对一、一对多、多对多等复杂数据关系的能力。Mybatis作为一个...
此外,还需要配置MyBatis的全局设置,例如类型别名、环境等。 6. **使用说明和配置注释** 配置文件通常包含详细的使用说明和注释,帮助开发者理解如何正确配置各个参数。这些注释对于初学者来说尤为重要,因为它们...
Mybatis允许自定义参数处理器(ParameterHandler)和类型处理器(TypeHandler),用于处理特定类型的参数和结果映射,增强灵活性。 10. **最佳实践** - 使用`#{}`而非`${}`来引用参数,确保安全性。 - 尽可能...
8. **TypeHandler**: 处理Java类型到JDBC类型和反之的转换,是MyBatis类型映射的核心。 9. **Mapper接口和Mapper XML文件**: MyBatis允许开发者定义自定义的Mapper接口和对应的XML文件,XML文件中定义了SQL语句和...
在MyBatis框架中,类型定义方式是其核心机制之一,它涉及到参数绑定、结果映射等关键功能。本文将详细解析MyBatis中的类型定义方式及其应用。 首先,MyBatis提供了多种类型处理器(TypeHandler),它们是MyBatis在...
在MyBatis中,结果映射(Result Mapping)是将数据库查询结果与Java对象属性进行匹配和转换的关键机制。在给定的文件中,我们看到了一个关于MyBatis结果映射涉及多对一关系的实例,主要展示了如何处理一个客户...
MyBatis映射文件自动生成工具是一款高效实用的开发辅助软件,主要针对MyBatis框架下的XML映射文件编写工作。这款工具极大地提高了开发效率,减少了手动编写XML映射文件的繁琐过程。通过在`generator.xml`配置文件中...
在Java开发中,MyBatis作为一个轻量级的持久层框架,因其强大的映射能力和灵活的SQL构建方式,被广泛应用于各种项目中。本篇主要探讨的是MyBatis中的高级映射之一——一对多查询。在数据库关系模型中,一对多关系是...
MyBatis作为一款强大的持久层框架,其在处理复杂数据映射方面表现出色,尤其是在一对一查询上。一对一查询是数据库操作中常见的关联查询方式,它用于获取一个对象的相关联的另一个对象的信息。在这个主题中,我们将...