最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于mybatis傳入?yún)?shù)一直為null的問題

 更新時(shí)間:2022年07月07日 10:12:34   作者:普通網(wǎng)友  
這篇文章主要介紹了關(guān)于mybatis傳入?yún)?shù)一直為null的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mybatis傳入?yún)?shù)一直為null

1.配置方面都對(duì)的情況下,考慮連接數(shù)據(jù)庫的時(shí)候是否設(shè)置了編碼為utf-8,如果沒設(shè)置,數(shù)據(jù)庫傳過來的時(shí)候有可能就是亂碼,就會(huì)一直是null。

2.有可能是字段名與實(shí)體不匹配。

3.可能是有空格問題

mybatis字段為null的解決

今天在寫項(xiàng)目的mapper.xml文件的時(shí)候,出現(xiàn)了個(gè)別字段查詢結(jié)果為null的情況,但sql語句沒有錯(cuò)誤,仔細(xì)查看了一遍,才發(fā)現(xiàn)錯(cuò)誤,現(xiàn)在記錄下來

先講一講sql語句和ResultMap的順序

首先會(huì)執(zhí)行sql語句,sql語句返回字段信息,然后才是ResultMap映射字段信息。

實(shí)體類UserInfo

package com.school.oauth.endpoint.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.school.parent.domain.BaseDomain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
@Table(name = "oauth_user")
@ApiModel(value = "用戶表")
@Data
public class UserInfo extends BaseDomain {
    @Id
    @GeneratedValue(generator = "JDBC")
    @ApiModelProperty(value = "用戶主鍵,提供給其他表做外鍵")
    private Long userId;
    @Column(unique = true)
    @NotBlank
    @Length(max = 32)
    @ApiModelProperty(value = "用戶名,必須唯一")
    private String username;
    @NotBlank
    @Length(max = 32)
    @ApiModelProperty(value = "昵稱,可以重復(fù)")
    private String nickname;
    @Length(max = 128)
    @ApiModelProperty(value = "加密密碼")
    private String encryptedPassword;
    @Length(max = 32)
    @Pattern(regexp = "^[1][3,4,5,7,8][0-9]{9}$"
    ,message = "手機(jī)號(hào)碼格式錯(cuò)誤")
    @ApiModelProperty(value = "用戶手機(jī)號(hào)碼")
    private String phone;
    @Email
    @Length(max = 128)
    @ApiModelProperty(value = "用戶郵箱")
    private String email;
    @Length(max = 8)
    @ApiModelProperty(value = "國際冠碼,默認(rèn) +86")
    private String idd;
    @Length(max = 16)
    @ApiModelProperty(value = "性別:男/女")
    private String gender;
    @Length(max = 1024)
    @ApiModelProperty(value = "頭像地址")
    private String avatar;
    @NotBlank
    @Length(max = 128)
    @ApiModelProperty(value = "所屬學(xué)校")
    private String school;
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @ApiModelProperty(value = "賬戶過期時(shí)間")
    private Date accountExpiredTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @ApiModelProperty(value = "賬戶鎖定時(shí)間")
    private Date accountLockedTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @ApiModelProperty(value = "憑證過期時(shí)間")
    private Date credentialsExpiredTime;
    @Column(name = "is_admin")
    @ApiModelProperty(value = "是否是管理員")
    private Boolean admin;
    @Column(name = "is_able")
    @ApiModelProperty(value = "賬戶是否啟用")
    private Boolean able;
    @Length(max = 32)
    @NotBlank(groups = Insert.class)
    @ApiModelProperty(value = "用戶注冊平臺(tái):WEB(默認(rèn))/AliPay/WeChat")
    private String userType;
    @Length(max = 64)
    @ApiModelProperty(value = "微信用戶識(shí)別ID")
    private String weChatUserId;
    @Length(max = 64)
    @ApiModelProperty(value = "支付寶用戶識(shí)別ID")
    private String aliPayUserId;
    @Transient
    @NotBlank(groups = Insert.class)
    @ApiModelProperty(value = "密碼")
    private String password;
    /**
     * 一個(gè)用戶只能對(duì)應(yīng)一個(gè)角色(最高權(quán)限角色)
     */
    @Transient
    @ApiModelProperty(value = "用戶角色集合:guest/user/admin")
    private List<Role> roleList;
    public UserInfo() {
    }
}

UserMapper.xml錯(cuò)誤代碼

<resultMap id="BaseMap" type="com.school.oauth.endpoint.domain.UserInfo">
        <id column="user_id" property="userId"/>
        <result column="username" property="username"/>
        <result column="nickname" property="nickname"/>
        <result column="encrypted_password" property="encryptedPassword"/>
        <result column="phone" property="phone"/>
        <result column="email" property="email"/>
        <result column="idd" property="idd"/>
        <result column="gender" property="gender"/>
        <result column="avatar" property="avatar"/>
        <result column="school" property="school"/>
        <result column="account_expired_time" property="accountExpiredTime"/>
        <result column="account_locked_time" property="accountLockedTime"/>
        <result column="credentials_expired_time" property="credentialsExpiredTime"/>
        <result column="is_admin" property="admin" jdbcType="TINYINT"/>
        <result column="is_able" property="able" jdbcType="TINYINT"/>
        <result column="user_type" property="userType"/>
        <result column="we_char_user_id" property="weChatUserId"/>
        <result column="ali_pay_user_id" property="aliPayUserId"/>
        <collection property="roleList" ofType="com.school.oauth.endpoint.domain.Role"
                    column="user_id" select="com.school.oauth.endpoint.mapper.RoleMapper.selectRoleByUserId">
        </collection>
    </resultMap>
    <select id="selectByUsername" resultMap="BaseMap">
        SELECT
            u.user_id,
            u.username,
            u.nickname,
            u.encrypted_password,
            u.phone,
            u.email,
            u.idd,
            u.gender,
            u.avatar,
            u.school,
            u.account_expired_time,
            u.account_locked_time,
            u.credentials_expired_time,
            u.is_admin AS admin,
            u.is_able AS able,
            u.user_type,
            u.we_chat_user_id,
            u.ali_pay_user_id
        FROM oauth_user u
        WHERE u.username = #{username}
    </select>

這樣查詢出來的User對(duì)象的admin和able字段為空。這是因?yàn)槲覀兊膕electByUsername 引用了我們定義的ResultMap。

注意看sql語句,其中有兩個(gè)字段我們?nèi)×藙e名

?? ?u.is_admin AS admin,
? ? ? ? u.is_able AS able,

也就是說,當(dāng)sql語句查詢出來的is_admin字段和is_able 字段已經(jīng)變?yōu)榱薬dmin字段和able字段,而ResultMap里面這兩個(gè)字段的映射:

? ?<result column="is_admin" property="admin" jdbcType="TINYINT"/>
? ? ? ? <result column="is_able" property="able" jdbcType="TINYINT"/>

當(dāng)ResultMap去映射字段信息的時(shí)候,發(fā)現(xiàn)找不到is_admin字段和is_able字段,因?yàn)樵趕ql語句我們已經(jīng)為這兩個(gè)字段去了別名,現(xiàn)在這兩個(gè)字段叫admin和able。所有ResultMap映射到實(shí)體類的時(shí)候,就會(huì)出現(xiàn)這兩個(gè)字段為空的情況。

正確寫法

去掉sql語句里面的別名,就可以咯。這樣resultMap就可以找到相應(yīng)的字段了。

<resultMap id="BaseMap" type="com.school.oauth.endpoint.domain.UserInfo">
        <id column="user_id" property="userId"/>
        <result column="username" property="username"/>
        <result column="nickname" property="nickname"/>
        <result column="encrypted_password" property="encryptedPassword"/>
        <result column="phone" property="phone"/>
        <result column="email" property="email"/>
        <result column="idd" property="idd"/>
        <result column="gender" property="gender"/>
        <result column="avatar" property="avatar"/>
        <result column="school" property="school"/>
        <result column="account_expired_time" property="accountExpiredTime"/>
        <result column="account_locked_time" property="accountLockedTime"/>
        <result column="credentials_expired_time" property="credentialsExpiredTime"/>
        <result column="is_admin" property="admin" jdbcType="TINYINT"/>
        <result column="is_able" property="able" jdbcType="TINYINT"/>
        <result column="user_type" property="userType"/>
        <result column="we_char_user_id" property="weChatUserId"/>
        <result column="ali_pay_user_id" property="aliPayUserId"/>
        <collection property="roleList" ofType="com.school.oauth.endpoint.domain.Role"
                    column="user_id" select="com.school.oauth.endpoint.mapper.RoleMapper.selectRoleByUserId">
        </collection>
    </resultMap>
    <select id="selectByUsername" resultMap="BaseMap">
        SELECT
            u.user_id,
            u.username,
            u.nickname,
            u.encrypted_password,
            u.phone,
            u.email,
            u.idd,
            u.gender,
            u.avatar,
            u.school,
            u.account_expired_time,
            u.account_locked_time,
            u.credentials_expired_time,
            u.is_admin,
            u.is_able,
            u.user_type,
            u.we_chat_user_id,
            u.ali_pay_user_id
        FROM oauth_user u
        WHERE u.username = #{username}
    </select>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

晋中市| 临潭县| 综艺| 荣昌县| 改则县| 琼海市| 上思县| 宁武县| 德保县| 曲水县| 绥化市| 水城县| 二连浩特市| 集安市| 岑溪市| 内黄县| 德化县| 颍上县| 蒙自县| 宜昌市| 新和县| 乌鲁木齐市| 潜江市| 宣威市| 永年县| 涟水县| 肥乡县| 孝义市| 贡嘎县| 太保市| 阳春市| 将乐县| 万全县| 额济纳旗| 昌吉市| 临颍县| 旺苍县| 普兰店市| 淮北市| 察隅县| 安多县|