MyBatis第八章:项目案例——查询操作之resultMap配置

该系列为imooc Java数据库开发与实战应用中MyBatis课程笔记,跟随课程加入自己见解,同时也为项目中碰到一些问题做了解答

本章是演示处理实体类的属性与数据表中的字段不一致的情况

一、修改Users类准备实验数据,让问题出现

  1. 修改Users类中的username变为name
package com.damu.entity;

import java.util.Date;

public class Users {
    private Integer id;                 // 用户编号
//    private String username;            // 登录账号
    private String name;                // 登录账号
    private String userpass;            // 登录密码
    private String nickname;            // 用户昵称
    private Integer age;                // 用户年龄
    private String gender;              // 用户性别
    private String email;               // 用户邮箱
    private String phone;               // 联系方式
    private Date createTime;            // 创建时间
    private Date updateTime;            // 账号最后修改时间
    private Date lastLogTime;             // 用户最后登录时间
    private Integer userStatus;         // 用户账号状态 0 正常 1 锁定 2 删除
    private String remark;              // 用户备注信息

    public Users() {
    }

    public Users(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

 /*   public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }*/

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUserpass() {
        return userpass;
    }

    public void setUserpass(String userpass) {
        this.userpass = userpass;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public Date getLastLogTime() {
        return lastLogTime;
    }

    public void setLastLogTime(Date lastLogTime) {
        this.lastLogTime = lastLogTime;
    }

    public Integer getUserStatus() {
        return userStatus;
    }

    public void setUserStatus(Integer userStatus) {
        this.userStatus = userStatus;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }
}

  1. 修改detail.jsp中username变为name
<%--
  Created by IntelliJ IDEA.
  User: 35208
  Date: 2021/4/7
  Time: 0:58
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>慕课网用户管理中心</title>
    <link rel="stylesheet" href="lib/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <script src="lib/2.2.4/jquery-1.12.4.min.js"></script>
    <script src="lib/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="page-header">
            <h1>慕课网管理后台<small>用户数据管理中心</small></h1>
        </div>
    </div>
    <div class="row">
        <div class="jumbotron">
            <h1>MyBstis基础入门课程</h1>
            <p>通过一个项目来完成基础部分学习</p>
            <p><a class="btn btn-primary btn-lg" href="#" role="button">查看更多,请上慕课网</a></p>
        </div>
    </div>
    <c:set var="user" value="${user}"></c:set>
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form class="form-horizontal">
                <div class="form-group">
                    <label class="col-sm-2 control-label">用户账号</label>
                    <div class="col-sm-10">
<%--                        <p class="form-control-static">${user.username}</p>--%>
                            <p class="form-control-static">${user.name}</p>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-2 control-label">登录密码</label>
                    <div class="col-sm-10">
                        <p class="form-control-static">******</p>
                    </div>
                </div>
                <div class="form-group">
                    <label for="nickname" class="col-sm-2 control-label">昵称</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="nickname" value="${user.nickname}" name="nickname" placeholder="请输入昵称">
                    </div>
                </div>
                <div class="form-group">
                    <label for="age" class="col-sm-2 control-label">年龄</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="age" value="${user.age}" name="age" placeholder="请输入年龄">
                    </div>
                </div>
                <div class="form-group">
                    <label for="gender" class="col-sm-2 control-label">性别</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="gender" value="${user.gender}" name="gender" placeholder="请输入性别">
                    </div>
                </div>
                <div class="form-group">
                    <label for="phone" class="col-sm-2 control-label">联系方式</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="phone" value="${user.phone}" name="phone" placeholder="请输入联系方式">
                    </div>
                </div>
                <div class="form-group">
                    <label for="email" class="col-sm-2 control-label">邮箱</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="email" value="${user.email}" name="email" placeholder="请输入邮箱">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-2 control-label">账号创建时间</label>
                    <div class="col-sm-10">
                        <p class="form-control-static">
                            <fmt:formatDate value="${user.createTime}" pattern="yyyy-MM-dd"></fmt:formatDate>
                        </p>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-2 control-label">最后修改时间</label>
                    <div class="col-sm-10">
                        <p class="form-control-static">
                            <fmt:formatDate value="${user.updateTime}" pattern="yyyy-MM-dd"></fmt:formatDate>
                        </p>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-2 control-label">最后登录时间</label>
                    <div class="col-sm-10">
                        <p class="form-control-static">
                            <fmt:formatDate value="${user.lastLogTime}" pattern="yyyy-MM-dd"></fmt:formatDate>
                        </p>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-2 control-label">用户状态</label>
                    <div class="col-sm-10">
                        <c:if test="${user.userStatus == 0}">
                            <td>正常</td>
                        </c:if>
                        <c:if test="${user.userStatus == 1}">
                            <td>锁定</td>
                        </c:if>
                        <c:if test="${user.userStatus == 2}">
                            <td>删除</td>
                        </c:if>
                    </div>
                </div>
                <div class="form-group">
                    <label for="remark" class="col-sm-2 control-label">备注</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="remark" value="${user.remark}" name="remark" placeholder="请输入备注">
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>
</body>
</html>

  1. 修改index.jsp中username变为name
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>慕课网用户管理中心</title>
    <link rel="stylesheet" href="lib/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <script src="lib/2.2.4/jquery-1.12.4.min.js"></script>
    <script src="lib/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="page-header">
            <h1>慕课网管理后台<small>用户数据管理中心</small></h1>
        </div>
    </div>
    <div class="row">
        <div class="jumbotron">
            <h1>MyBstis基础入门课程</h1>
            <p>通过一个项目来完成基础部分学习</p>
            <p><a class="btn btn-primary btn-lg" href="#" role="button">查看更多,请上慕课网</a></p>
        </div>
    </div>
    <div class="row">
        <table class="table table-hover table-striped">
            <tr>
                <th>用户编号</th>
                <th>登录账号</th>
                <th>用户昵称</th>
                <th>邮箱</th>
                <th>联系方式</th>
                <th>账号创建时间</th>
                <th>用户状态</th>
                <th>操作</th>
            </tr>
            <c:forEach var="user" items="${usersList}">
            <tr>
                <td>${user.id}</td>
<%--                <td>${user.username}</td>--%>
                <td>${user.name}</td>
                <td>${user.nickname}</td>
                <td>${user.email}</td>
                <td>${user.phone}</td>
                <td>${user.createTime}</td>
                <c:if test="${user.userStatus == 0}">
                    <td>正常</td>
                </c:if>
                <c:if test="${user.userStatus == 1}">
                    <td>锁定</td>
                </c:if>
                <c:if test="${user.userStatus == 2}">
                    <td>删除</td>
                </c:if>
                <td>
                    <a href="${pageContext.request.contextPath}/detail?id=${user.id}">查看</a>
                    <a href="">修改</a>
                    <a href="">删除</a>
                </td>
            </tr>
            </c:forEach>
        </table>
    </div>
</div>
</body>
</html>

问题出现
这个时候启动项目,可以看见项目列表页与用户详情页中,其他信息都正常显示,只有属性与字段不一致的信息不显示了
在这里插入图片描述
在这里插入图片描述

二、查找原因

打开usersMapper

<?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属性是用来配置命名空间,主要进行session级别的缓存管理,命名空间默认情况下,使用我们当前操作的实体类的全路径
-->
<mapper namespace="com.damu.entity.Users">
    <select id="findUsers" resultType="com.damu.entity.Users">
        select * from users
        <if test="id !=null">
            where id =#{id}
        </if>
    </select>
<!--    <select id="findById" resultType="com.damu.entity.Users">-->
<!--        select * from users where id =#{id}-->
<!--    </select>-->
</mapper>

常规情况下resultType是与我们数据库中的表中字段名称一一对应,如果说出现不一致,则Mybatis则不会对该字段进行对应关系的配置(比如我们刚才发现的问题,登录账号显示不了),此时需要我们手工进行映射关系的配置

三、解决问题

修改usersMapper文件,添加resultMap标签配置

resultMap标签配置,自定义映射关系集合:主要包含对于一些自定义操作的配置,如不一致的属性和字段
id作为唯一识别,type表示在resultMap中保存的是什么数据

<resultMap id="forUsers" type="com.damu.entity.Users">

该标签下id标签,用于绑定id主键,将Users的id属性与数据库中users表的id主键绑定

<id property="id" column="id"></id>

该标签下result标签,用于配置普通属性,column表示配置的是数据库字段名称,property配置的是实体类的属性名称

<result column="username" property="name"></result>

column表示配置的是数据库字段名称 property配置的是实体类的属性名称

使用resultMap标签
把原来select标签中的resultType换成resultMap,resultType与resultMap同时只能出现一个
在这里插入图片描述
现在看看我们的usersMapper

<?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属性是用来配置命名空间,主要进行session级别的缓存管理,命名空间默认情况下,使用我们当前操作的实体类的全路径
-->
<mapper namespace="com.damu.entity.Users">
    <!--<select id="findUsers" resultType="com.damu.entity.Users">-->
    <!--resultType与resultMap同时只能出现一个-->
    <select id="findUsers" resultMap="forUsers">
        select * from users
        <if test="id !=null">
            where id =#{id}
        </if>
    </select>
    <!-- 自定义映射关系集合:主要包含对于一些自定义操作的配置,如不一致的属性和字段 -->
    <resultMap id="forUsers" type="com.damu.entity.Users">
        <!-- 绑定id主键 -->
        <!--<id property="id" column="id"></id>-->
        <!-- result配置,主要配置普通属性,column表示配置的是数据库字段名称 property配置的是实体类的属性名称 -->
        <result column="username" property="name"></result>

    </resultMap>
<!--    <select id="findById" resultType="com.damu.entity.Users">-->
<!--        select * from users where id =#{id}-->
<!--    </select>-->
</mapper>

启动项目
在这里插入图片描述
此时登录账号的这个字段已经正常显示了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翘脚猴子耍把戏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值