我的数据库表结构如下:
实体类如下:
package com.luozhen.entity; import java.util.Date;
public class SysDepartment {
private String id;
private String name;
private Date createdate;
private String parentId;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Date getCreatedate() {
return createdate;
}
public void setCreatedate(Date createdate) {
this.createdate = createdate;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId == null ? null : parentId.trim();
}
}
我在mapper.xml中写了三条sql语句,如下
除了id名不同,返回的类型值也不同.
1.第一个的返回值类型为resultType="map",其获得的数据为:
{"CREATEDATE":"2018-04-22T16:00:00.000+0000","ID":"se","NAME":"sadfe","PARENT_ID":"aas333"}
在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。
使用 resultType="map" 会默认使用键值对来存储,键值对的键值会与数据库的字段完全相同.
2.第二个的返回值类型为 resultType="com.luozhen.entity.SysDepartment" ,其获得数据为:
{"id":"se","name":"sadfe","createdate":"2018-04-23 00:00:00","parentId":null}
你会发现数据库与实体之间不区分大小写进行匹配,但是如果数据库字段中含有特殊符号,则两者之间无法进行匹配,返回的数据为空.
3.第三个的返回值类型为 resultMap="BaseResultMap" ,其返回的数据为:
{"id":"se","name":"sadfe","createdate":"2018-04-23 00:00:00","parentId":"aas333"}
第三种其实在xml文件中预先做了实体与数据库字段的映射:
所以在输出时会进行映射匹配.
ps:有人会问关于时间格式的问题,第一种的时间格式是直接从数据库中提取出来,没有做任何的处理,而第二种和第三种是使用SpringBoot默认的jackson做了处理.