当查询结果属性名(字段)和模型类中不一样时,其查询结果如果用resultType接受,字段不一样的属性值就会丢失,而resultMap可以解决这个问题。
property表示的实体类中属名
colum表示sql语句查询字段名(如果查询字段没有起别名,即是数据库字段名)
public interface UserMapper {
//返回为resultMap类型的使用
public User findUserByResultMap(int userId);
}
xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gyf.mapper.UserMapper">
<resultMap id="userResultMap" type="user">
<id property="id" column="id_"></id>
<result property="username" column="username_"></result>
<result property="sex" column="sex_"></result>
<result property="birthday" column="birthday_"></result>
<result property="address" column="address_"></result>
</resultMap>
<select id="findUserByResultMap" parameterType="int" resultMap="userResultMap">
select id id_,
username username_,
sex sex_,
birthday birthday_,
address address_
from user where id = #{id}
</select>
</mapper>
测试类:
public class Demo01 {
SqlSession session;
@Before
public void before() throws IOException {
System.out.println("before....获取session");
//读取配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//通过SqlSessionFactory创建SqlSession
session = sessionFactory.openSession();
}
@After
public void after(){
session.close();
}
/*
结果类型resultMap
*/
@Test
public void test2() throws IOException {
UserMapper userMapper = session.getMapper(UserMapper.class);
//通过模型的包装类来查询用户
User user = userMapper.findUserByResultMap(1);
System.out.println(user);
}
}