这是一个学习使用TypeHandler的demo
git下载链接: https://gitee.com/ding-ding-car-of-makabaka/mybatis-typehandler.git
下面对项目文件目录下的一些文件的说明:
以下文件都是idea新建项目生成的文件,部分文件我并没有上传git仓库,可能大家下载的时候并没有
- .gitignore 用git做版本控制时 用这个文件控制那些文件或文件夹 不被提交(不用git的话可删除 没影响)
- HELP.md md是一种文档格式 这个就是你项目的帮助文档(可删除 没影响)
- mvnw linux上处理mevan版本兼容问题的脚本(可删除 没影响)
- mvnw.cmd windows 上处理mevan版本兼容问题的脚本(可删除 没影响)
- mybatis-typehandler.iml 有的文件每个导入IDEA的项目都会生成一个项目同名的 .iml文件 用于保存你对这个项目的配置 (删了程序重新导入后还会生成 但由于配置丢失可能会造成程序异常)
- .idea 文件夹下是 IDEA 放项目配置信息、版本历史的目录。
- .mvn文件夹是maven的一些jar包与配置文件
.gitignore规则
“/” 表示 当前文件所在的目录
eg:忽略public下的所有目录及文件
/public/*
eg:不忽略/public/assets,就是特例的意思,assets文件不忽略
!/public/assets
eg:忽略具体的文件
index.php
eg:忽略所有的php
*.php
eg:忽略 a.php b.php
[ab].php
*匹配规则和linux文件匹配一样
*以斜杠“/”开头表示目录;
以星号“”通配多个字符;
*以问号“?”通配单个字符
*以方括号“[]”包含单个字符的匹配列表;
*以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
类型转换器
类型处理器 TypeHandler
MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,用于 PreparedStatement 设置参数值和从 ResultSet 或 CallableStatement 中取出一个值。MyBatis 内置了大部分基本类型的类型处理器,所以对于基本类型可以直接处理,当我们需要处理其他类型的时候就需要自定义类型处理器。
MyBatis 内置的 TypeHandler
- 在 MyBatis 的 TypeHandlerRegistry 类型中,可以看到内置的类型处理器。内置处理器比较多,这里整理常见的一些。
- BooleanTypeHandler:用于 java 类型 boolean,jdbc 类型 bit、boolean
- ByteTypeHandler:用于 java 类型 byte,jdbc 类型 TINYINT
- ShortTypeHandler:用于 java 类型 short,jdbc 类型 SMALLINT
- IntegerTypeHandler:用于 INTEGER 类型
- LongTypeHandler:用于 long 类型
- FloatTypeHandler:用于 FLOAT 类型
- DoubleTypeHandler:用于 double 类型
- StringTypeHandler:用于 java 类型 string,jdbc 类型 CHAR、VARCHAR
- ArrayTypeHandler:用于 jdbc 类型 ARRAY
- BigDecimalTypeHandler:用于 java 类型 BigDecimal,jdbc 类型 REAL、DECIMAL、NUMERIC
- DateTypeHandler:用于 java 类型 Date,jdbc 类型 TIMESTAMP
- DateOnlyTypeHandler:用于 java 类型 Date,jdbc 类型 DATE
- TimeOnlyTypeHandler:用于 java 类型 Date,jdbc 类型 TIME
- 对于常见的 Enum 类型,内置了 EnumTypeHandler 进行 Enum 名称的转换和 EnumOrdinalTypeHandler 进行 Enum 序数的转换。这两个类型处理器没有在 TypeHandlerRegistry 中注册,如果需要使用必须手动配置。
自定义 TypeHandler的两种实现方式:
通过实现 org.apache.ibatis.type.TypeHandler 接口实现的
通过继承 org.apache.ibatis.type.BaseTypeHandler 类实现的
TypeHandler接口:
public interface TypeHandler<T> {
/*用于把 java 对象设置到 PreparedStatement 的参数中*/
void setParameter(PreparedStatement var1, int var2, T var3, JdbcType var4) throws SQLException;
/*用于从 ResultSet(根据列名或者索引位置获取) 或 CallableStatement(根据存储过程获取) 中取出数据转换为 java 对象。*/
T getResult(ResultSet var1, String var2) throws SQLException;
T getResult(ResultSet var1,