mybatis简单resultMap使用详解
Mybatis的介绍以及使用:
mybatis是一个半自动的ORM(Object Relational Mapping)框架,需要手动配置一些SQL语句或者注解,相对来说Mybatis留给程序员操作的空间灵活度更高,通常需要手动配置一些东西完成OR映射。当数据库表中的字段 和 POJO实体类不匹配时,这是就需要程序员手动完成字段的映射。
mybatis-config.xml配置文件
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"">
mybatisUtil加载工具类
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class mybatisUtil {
private static SqlSessionFactory sqlSessionFactory=null;
static {
try {
String resource="mybatis-config.xml";
InputStream in=Resources.getResourceAsStream(resource);
KNYXQCW sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlsession(){
return sqlSessionFactory.openSession();
}
}
POJO实体类User,为了方便简单实用Lombok注解,减少一些代码。
package com.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data //各种get / set方法 Tostring…
@AllArgsConstructor //全参构造
@NoArgsConstructor //无参构造
public class User {
private int id; //对应数据库中的id
private String username; //对应数据库中的name
private String password; //对应数据库中的pwd
}
接口方法与对应的xml配置文件
package com.dao;
import com.pojo.User;
import java.util.List;
public interface UserMapper {
List getUserList();
}
xml映射
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"">
select *from user;
- POJO实体类 和 数据表字段不匹配
@Test
public void test1(){
SqlSession session=mybatisUtil.getSqlsession();
UserMapper mapper=session.getMapper(UserMapper.class);
List list=mapper.getUserList();
for (User user : list) {
System.out.println(user.toString());
}
session.close();
}
POJO实体类中有两个字段和数据库的字段不匹配,最后获得结果的时对于匹配失败的属性会产生null空值。使用输出日志进行帮忙很容易看到区别。
简单的解决方案:就是SQL语句查询时给查询字段使用重命名。
select id, name as username, pwd as password from user
- resultMap解决属性 - 字段不匹配问题
上面这种解决方案是能够解决问题的,但是有点冗余本身就要查全部的信息用的 * 做通配。这么一改需要每个字段都列出来,然后对极个别的字段进行取别名。试想一下当数据表中有几十个字段呢?而真正需要取别名的字段只有1 - 2个呢?因此mybatis提供了一个强大的机制resultMap结果集映射来解决这个问题。
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"">
select *from user
resultMap标签的解释:
id可以认为定义方法的名称,下面select中的resultMap传入id的值就相当于使用这个方法完成映射。
type是实体类名
column对应数据库中的字段
property是实体类的属性。