Mybatis:ResultMap

ResultMap:

解决的问题:属性名和字段名不一致。

解决方法

  • sql语句中设置别名
  • 使用ResultMap标签定义映射字段

下面着重介绍ResultMap方法:

部分环境设置:

  • 数据库字段如下:

  • User实体类设置:
public class User {

    private int id;  //id
    private String name;   //姓名
    private String password;   //密码和数据库不一样!
    
    //构造
    //set/get
    //toString()
}
  • UserMapper.java接口:
//根据id查询用户
User selectUserById(int id);
  • Usermapper.xml中select标签:
<select id="selectUserById" resultType="user">
select * from user where id = #{id}
</select>

  resultType填写之后要填写的resultType标签的id。

  • resultType设置:
<resultMap id="UserMap" type="user">
        <!-- id为主键 -->
        <!--<id column="id" property="id"/>
        <result column="name" property="name"/>-->
        <!-- column是数据库表的列名 , property是对应实体类的属性名 -->
        <result column="pwd" property="password"/>
    </resultMap>

对于字段名跟实体类中的属性名相同就可不需配置,字段名和属性名不同才需要配置。

测试:

@Test
    public void test01(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectUser();

        logger.info("info:进入了testlog4j方法");
        logger.debug("debug:进入了testlog4j方法");
        logger.error("error:进入了testlog4j方法");

        for (User user : users) {
            System.out.println(user);
        }

        sqlSession.close();
    }
test

ResultMap不单单能解决字段与属性名不一致的问题,也能轻松解决数据库字段映射实体复杂类型的问题,也就是解决数据库一对多,多对一的情况。

如果世界总是这么简单就好了(#^.^#)

原文地址:https://www.cnblogs.com/zitai/p/11816088.html