Mybatis中javaType和jdbcType对应关系
https://blog.csdn.net/zxssoft/article/details/86616893
-
JDBCType JavaType -
CHAR String 建议使用 mysql char(1) 代替boolean 0 , 1 -
VARCHAR String -
LONGVARCHAR String -
NUMERIC java.math.BigDecimal -
DECIMAL java.math.BigDecimal -
BIT boolean mysql tinytin(1) -
BOOLEAN boolean mysql tinytin(1) -
TINYINT byte mysql tinyint -
SMALLINT short -
INTEGER int -
BIGINT long -
REAL float -
FLOAT double -
DOUBLE double -
BINARY byte[] -
VARBINARY byte[] -
LONGVARBINARY byte[] -
DATE java.sql.Date -
TIME java.sql.Time -
TIMESTAMP java.sql.Timestamp -
CLOB Clob -
BLOB Blob -
ARRAY Array -
DISTINCT mapping of underlying type -
STRUCT Struct -
REF Ref -
DATALINK java.net.URL[color=red][/color]
SpringMVC框架支持的数据类型有:
- 整形:Integer、int , byte, short
- 字符串:String
- 单精度:Float、float
- 双精度:Double、double
- 布尔型:Boolean、boolean
- decimal
说明:对于布尔类型的参数,请求的参数值为true或false。处理器方法可是这样的:
public String editItem(Model model,Integer id,Boolean status) throws Exception {
...
}
至于请求的url,可是http://localhost:8080/xxx.action?id=2&status=false。
注意:参数类型推荐使用包装数据类型,因为基础数据类型不可以为null。
关于 MySQL 的 boolean 和 tinyint(1)
boolean类型
MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),
MySQL里有四个常量:true,false,TRUE,FALSE,它们分别代表1,0,1,0,
mysql> select true,false,TRUE,FALSE;
+------+-------+------+-------+
| TRUE | FALSE | TRUE | FALSE |
+------+-------+------+-------+
| 1 | 0 | 1 | 0 |
+------+-------+------+-------+
可以如下插入boolean值:insert into [xxxx(xx)] values(true),当然也可以values(1);
举例如下:
mysql> alter table test add isOk boolean;
Query OK
mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| isOk | tinyint(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
mysql> insert into test(isOk) values(true);
Query OK
mysql> select isOk from test ;
+------+
| isOk |
+------+
| 1 |
+------+
=================
MySQL没有boolean类型。这也是比较奇怪的现象。例:
| create table xs ( id int primary key, bl boolean ) |
这样是可以创建成功,但查看一下建表后的语句,就会发现,mysql把它替换成tinyint(1)。也就是说mysql把boolean=tinyInt了,但POJO类要定义成什么类型呢?
因为惯性思维,在java类中也把它定义成type。然后在Struts中使用<s:check/>标签。这就产生一个严重的问题了。<s:check>是boolean,而POJO去定义成byte。这样数据永远也无法提交,被struts的intercept拦截掉了。解决办法是在POJO类中定义成boolean,在mysql中定义成tinyint(1)。
------
TINYINT(1) or ENUM( 'true' , 'false')
下面精简总结:
tinyint(1) 和 tinyint(3) 没什么区别,占用字节都是一位,存储范围都是一样的
tinyint(3) zerofill ,当插入的数据少于3位的时候,左边自动补零,这才是限制显示长度
int(1) 和 tinyint(1) ,够用的情况下,优先选择tinyint(1),因为占字节少、节省空间。
tinyint一个字节 smallint 两个字节 MEDIUMINT三个字节 int 4个字节 BIGINT 8个字节。
但是,varchar(5) 这里的5 限制的是储存字符的个数,字符不分贵贱(不分 中文、英文、数字...)。
****在mybatis中建议用 java String mybatis Char mysql char(1) 表示0-9的状态信息
mysql 数据类型长度信息
| 数据类型 | 字节长度 | 范围或用法 |
| Bit | 1 | 无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节 |
| TinyInt | 1 | 整数[0,255] |
| SmallInt | 2 | 无符号[0,65535],有符号[-32768,32767] |
| MediumInt | 3 | 无符号[0,2^24-1],有符号[-2^23,2^23-1]] |
| Int | 4 | 无符号[0,2^32-1],有符号[-2^31,2^31-1] |
| BigInt | 8 | 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1] |
| Float(M,D) | 4 | 单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。 |
| Double(M,D) | 8 | 双精度浮点。 |
| Decimal(M,D) | M+1或M+2 | 未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。 |
| Date | 3 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
| Date Time | 8 | 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30 |
| TimeStamp | 4 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
| Time | 3 | 以HH:MM:SS的格式显示。比如:11:22:30 |
| Year | 1 | 以YYYY的格式显示。比如:2009 |
| Char(M) | M | 定长字符串。 |
| VarChar(M) | M | 变长字符串,要求M<=255 |
| Binary(M) | M | 类似Char的二进制存储,特点是插入定长不足补0 |
| VarBinary(M) | M | 类似VarChar的变长二进制存储,特点是定长不补0 |
| Tiny Text | Max:255 | 大小写不敏感 |
| Text | Max:64K | 大小写不敏感 |
| Medium Text | Max:16M | 大小写不敏感 |
| Long Text | Max:4G | 大小写不敏感 |
| TinyBlob | Max:255 | 大小写敏感 |
| Blob | Max:64K | 大小写敏感 |
| MediumBlob | Max:16M | 大小写敏感 |
| LongBlob | Max:4G | 大小写敏感 |
| Enum | 1或2 | 最大可达65535个不同的枚举值 |
| Set | 可达8 | 最大可达64个不同的值 |
Spring内建的类型转换器如下所示:
| 类名 | 说明 |
| 第一组:标量转换器 | |
| StringToBooleanConverter | String----->Boolean true:true/on/yes/1; false:false/off/no/0 |
| ObjectToStringConverter | Object----->String 调用toString方法转换 |
| StringToNumberConverterFactory | String----->Number(如Integer、Long等) |
| NumberToNumberConverterFactory | Number子类型(Integer、Long、Double等)<——> Number子类型(Integer、Long、Double等) |
| StringToCharacterConverter | String----->java.lang.Character 取字符串第一个字符 |
| NumberToCharacterConverter | Number子类型(Integer、Long、Double等)——> java.lang.Character |
| CharacterToNumberFactory | java.lang.Character ——>Number子类型(Integer、Long、Double等) |
| StringToEnumConverterFactory | String----->enum类型 通过Enum.valueOf将字符串转换为需要的enum类型 |
| EnumToStringConverter | enum类型----->String 返回enum对象的name()值 |
| StringToLocaleConverter | String----->java.util.Local |
| PropertiesToStringConverter | java.util.Properties----->String 默认通过ISO-8859-1解码 |
| StringToPropertiesConverter | String----->java.util.Properties 默认使用ISO-8859-1编码 |
| 第二组:集合、数组相关转换器 | |
| ArrayToCollectionConverter | 任意S数组---->任意T集合(List、Set) |
| CollectionToArrayConverter | 任意T集合(List、Set)---->任意S数组 |
| ArrayToArrayConverter | 任意S数组<---->任意T数组 |
| CollectionToCollectionConverter | 任意T集合(List、Set)<---->任意T集合(List、Set) 即集合之间的类型转换 |
| MapToMapConverter | Map<---->Map之间的转换 |
| ArrayToStringConverter | 任意S数组---->String类型 |
| StringToArrayConverter | String----->数组 默认通过“,”分割,且去除字符串的两边空格(trim) |
| ArrayToObjectConverter | 任意S数组---->任意Object的转换 (如果目标类型和源类型兼容,直接返回源对象;否则返回S数组的第一个元素并进行类型转换) |
| ObjectToArrayConverter | Object----->单元素数组 |
| CollectionToStringConverter | 任意T集合(List、Set)---->String类型 |
| StringToCollectionConverter | String----->集合(List、Set) 默认通过“,”分割,且去除字符串的两边空格(trim) |
| CollectionToObjectConverter | 任意T集合---->任意Object的转换 (如果目标类型和源类型兼容,直接返回源对象;否则返回S数组的第一个元素并进行类型转换) |
| ObjectToCollectionConverter | Object----->单元素集合 |
| 第三组:默认(fallback)转换器:之前的转换器不能转换时调用 | |
| ObjectToObjectConverter | Object(S)----->Object(T) 首先尝试valueOf进行转换、没有则尝试new 构造器(S) |
| IdToEntityConverter | Id(S)----->Entity(T) 查找并调用public static T find[EntityName](S)获取目标对象,EntityName是T类型的简单类型 |
| FallbackObjectToStringConverter |
414

被折叠的 条评论
为什么被折叠?



