`

mybatis中TypeHandles使用与扩展

 
阅读更多


    无论是MyBatis 在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处
理器被用来将获取的值以合适的方式转换成Java 类型。下面这个表格描述了默认的类型处

理器。

       类型处理器                    Java 类型                     JDBC 类型

BooleanTypeHandler        Boolean,boolean        任何兼容的布尔值

ByteTypeHandler           Byte,byte              任何兼容的数字或字节类型

ShortTypeHandler          Short,short            任何兼容的数字或短整型

IntegerTypeHandler        Integer,int            任何兼容的数字和整型

LongTypeHandler           Long,long              任何兼容的数字或长整型

FloatTypeHandler          Float,float            任何兼容的数字或单精度浮点型

DoubleTypeHandler         Double,double          任何兼容的数字或双精度浮点型

BigDecimalTypeHandler     BigDecimal             任何兼容的数字或十进制小数类型

StringTypeHandler         String                 CHAR 和VARCHAR 类型

ClobTypeHandler           String                 CLOB 和LONGVARCHAR 类型

NStringTypeHandler        String                 NVARCHAR 和NCHAR 类型

NClobTypeHandler          String                 NCLOB 类型

ByteArrayTypeHandler      byte[]                 任何兼容的字节流类型

BlobTypeHandler           byte[]                 BLOB 和LONGVARBINARY 类型

DateTypeHandler           Date (java.util )      TIMESTAMP 类型

DateOnlyTypeHandler       Date (java.util )      DATE 类型

TimeOnlyTypeHandler       Date (java.util )      TIME 类型

SqlTimestampTypeHandler   Timestamp (java.sql )  TIMESTAMP 类型

SqlDateTypeHandler        Date (java.sql )       DATE 类型

SqlTimeTypeHandler        Time (java.sql )       TIME 类型

ObjectTypeHandler         Any                    其他或未指定类型

EnumTypeHandler           Enumeration 类型         VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

 

 

但是,有时候我们自定义java类型,需要入库,比如 java类型为:java.util.UUID,数据库类型为:varchar2。

 

对java.util.UUID了解的话,java.util.UUID是没有提供属性,使用#{uuid.properties}是不可行的。

 

这是时候我们需要使用mybatis提供typeHandle扩展来完成。

 

 

  举例:

 

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

public class UUIDTypeHandler extends BaseTypeHandler {

	@Override
	public Object getNullableResult(ResultSet rs, String columnName)
			throws SQLException {
		return UUID.fromString(rs.getString(columnName));
	}

	@Override
	public Object getNullableResult(CallableStatement cs, int columnIndex)
			throws SQLException {
		return UUID.fromString((cs.getString(columnIndex)));
	}

	@Override
	public void setNonNullParameter(PreparedStatement ps, int i,
			Object parameter, JdbcType jdbcType) throws SQLException {
		ps.setString(i, ((UUID) parameter).toString());
	}
}

 

 

 

	<typeHandlers>
		<typeHandler handler="com.mapper.UUIDTypeHandler"
			javaType="UUID" jdbcType="VARCHAR" />
	</typeHandlers>

 

	<id property="uuid" column="P_ID" typeHandler="com.mapper.UUIDTypeHandler"/>

   或者

  

#{pack.uuid,typeHandler=com.mapper.UUIDTypeHandler}

 

 

分享到:
评论

相关推荐

    mybatis中文离线文档

    11. **MyBatis与Spring的整合**:在实际项目中,MyBatis通常与Spring框架结合使用,通过Spring的事务管理、依赖注入等功能,可以使MyBatis的使用更加简便。 以上只是MyBatis框架的一部分关键知识点,完整的中文离线...

    MyBatis连接数据库所需扩展包

    MyBatis是一款强大的Java持久层框架,它简化了与数据库之间的交互,允许开发者将SQL语句直接编写在映射文件中,提供了灵活的数据访问层。本资源提供的"MyBatis连接数据库所需扩展包"是为了帮助开发者顺利配置和使用...

    hibernate与mybatis一起使用取长补短

    标题“hibernate与mybatis一起使用取长补短”暗示了在一个项目中同时采用这两种框架,旨在充分利用它们各自的优点,以提升项目的性能和灵活性。 Hibernate是一款强大的ORM框架,它提供了完整的对象模型支持,包括...

    mybatis二级缓存扩展-与redis集成

    本文将深入探讨如何对MyBatis的二级缓存进行扩展,并将其与Redis集成,以充分利用分布式缓存的优势。 MyBatis的二级缓存是基于全局的,它允许不同的SqlSession共享相同的缓存数据。默认情况下,MyBatis的二级缓存是...

    Mybatis分库分表扩展插件

    Mybatis的扩展插件可以与ShardingSphere进行集成,以充分利用其强大功能。 总之,Mybatis分库分表扩展插件是解决大数据量、高并发场景下数据库性能瓶颈的有效手段。通过自定义拦截器、路由算法和配置管理,我们可以...

    mybatis简单使用demo

    mybatis简单使用mybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单...

    mybatis3中文使用文档

    11. **插件机制**:阐述Interceptor插件的工作原理,以及如何编写和使用插件来扩展MyBatis的功能,如PageHelper分页插件。 12. **异常处理**:列出MyBatis中常见的异常类型,以及如何处理这些异常。 13. **附录与...

    Mybatis逆向生成使用扩展类的实例代码详解

    总结起来,通过在Mybatis逆向生成的基础上使用扩展类,我们可以更好地管理和维护代码,同时保持业务逻辑的独立性。这种方法提高了代码的可读性和可维护性,降低了开发成本,是Mybatis项目中的一个实用技巧。

    mybatis_3.5.9官方中文文档pdf

    MyBatis 的安装和使用非常简单,只需要将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中: ``` &lt;groupId&gt;org.mybatis ...

    mybatis中文文档

    - Spring中使用MyBatis的配置,如SqlSessionFactoryBean的配置,以及事务管理的整合。 12. **MyBatis的最佳实践**: - 如何设计Mapper接口和实体类,以保持代码的整洁和高效。 - 何时使用Mapper XML文件,何时...

    mybatis 项目真实使用

    5. **MyBatis-Spring**:`mybatis-spring-1.0.1.jar` 是 MyBatis 与 Spring 集成的库,它使得 MyBatis 可以无缝地融入到 Spring 应用中,例如通过 Spring 的事务管理控制 MyBatis 的事务,将 Mapper 接口自动注入到 ...

    MyBatis 中文官方文档

    MyBatis 是一款深受开发者喜爱的持久层框架,它简化了Java应用与数据库之间的交互,提供了灵活的SQL映射框架,使得开发人员可以避免编写大量的JDBC代码。这份"MyBatis 中文官方文档"是学习和理解MyBatis的重要资源,...

    mybatis的中文api文档

    MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis的其他语言版本包括英语、西班牙语、日语和韩语,以及简体中文。 ...

    MyBatis基本使用总结

    为了实现接口方法与映射文件中定义的SQL的关联,MyBatis使用了动态代理机制。在运行时,MyBatis会为每个Mapper接口生成一个实现了该接口的代理类,当调用接口方法时,实际上执行的是代理类中的方法,这个方法会解析...

    MyBatis3官方中文文档

    首先,MyBatis的入门安装很简单,对于使用Maven构建项目的用户来说,只需在pom.xml文件中加入指定版本的mybatis依赖即可。而对于不使用Maven的用户,则需要将mybatis的jar包放置在项目的classpath中。这个过程是...

    MyBatis的helloworld(不使用Mapper接口实现MyBatis查询数据库).zip

    在本示例中,我们将不使用Mapper接口来演示如何通过MyBatis进行基本的数据库查询,这对于理解MyBatis的核心工作原理是非常有帮助的。 首先,MyBatis的核心组件包括XML配置文件、SqlSessionFactory和SqlSession。XML...

    mybatis学习-入门(1)-单独使用mybatis

    本部分主要关注如何单独使用MyBatis,不涉及与其他框架的集成。 1. **MyBatis简介** MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。它将SQL语句与Java代码分离,提供了一个更简洁、更易于维护的...

    mybatis中mapper文件resultMap中collection和association的使用

    mybatis中mapper文件resultMap中collection和association的使用,参考地址:https://blog.csdn.net/zhizhuodewo6/article/details/82863452

    mybatis_generator使用手册

    MyBatis Generator 使用手册 MyBatis Generator 是 MyBatis 的代码生成工具,旨在通过反射数据库表结构生成对应的Java代码,简化开发过程,提高开发效率。本手册将指导用户如何使用 MyBatis Generator 生成代码,...

Global site tag (gtag.js) - Google Analytics