欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

3.可能是有空格問題

mybatis字段為null的解決

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

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

首先會執(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ī)號碼格式錯誤")
    @ApiModelProperty(value = "用戶手機(jī)號碼")
    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 = "賬戶過期時間")
    private Date accountExpiredTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @ApiModelProperty(value = "賬戶鎖定時間")
    private Date accountLockedTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @ApiModelProperty(value = "憑證過期時間")
    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 = "用戶注冊平臺:WEB(默認(rèn))/AliPay/WeChat")
    private String userType;
    @Length(max = 64)
    @ApiModelProperty(value = "微信用戶識別ID")
    private String weChatUserId;
    @Length(max = 64)
    @ApiModelProperty(value = "支付寶用戶識別ID")
    private String aliPayUserId;
    @Transient
    @NotBlank(groups = Insert.class)
    @ApiModelProperty(value = "密碼")
    private String password;
    /**
     * 一個用戶只能對應(yīng)一個角色(最高權(quán)限角色)
     */
    @Transient
    @ApiModelProperty(value = "用戶角色集合:guest/user/admin")
    private List<Role> roleList;
    public UserInfo() {
    }
}

UserMapper.xml錯誤代碼

<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對象的admin和able字段為空。這是因?yàn)槲覀兊膕electByUsername 引用了我們定義的ResultMap。

注意看sql語句,其中有兩個字段我們?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里面這兩個字段的映射:

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

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

正確寫法

去掉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>

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

相關(guān)文章

  • java之Timer和TimerTask簡單demo(分享)

    java之Timer和TimerTask簡單demo(分享)

    下面小編就為大家?guī)硪黄猨ava之Timer和TimerTask簡單demo(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • SpringMVC中使用Thymeleaf模板引擎實(shí)例代碼

    SpringMVC中使用Thymeleaf模板引擎實(shí)例代碼

    這篇文章主要介紹了SpringMVC中使用Thymeleaf模板引擎實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Feign如何自定義注解翻譯器

    Feign如何自定義注解翻譯器

    這篇文章主要介紹了Feign如何自定義注解翻譯器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 關(guān)于SSM框架下各層的解釋說明(Controller等)

    關(guān)于SSM框架下各層的解釋說明(Controller等)

    這篇文章主要介紹了關(guān)于SSM框架下各層的解釋說明(Controller等),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring bean加載控制實(shí)現(xiàn)方法

    Spring bean加載控制實(shí)現(xiàn)方法

    很多時候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來選擇是否在容器中加載某個Bean,這就是Bean的加載控制,一般我們可以通過編程式或注解式兩種不同的方式來完成Bean的加載控制
    2022-12-12
  • 解決Mybatis-Plus更新方法不更新NULL字段的問題

    解決Mybatis-Plus更新方法不更新NULL字段的問題

    這篇文章主要介紹了解決Mybatis-Plus更新方法不更新NULL字段的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解Eclipse安裝SVN插件的兩種方法

    詳解Eclipse安裝SVN插件的兩種方法

    這篇文章主要介紹了詳解Eclipse 安裝 SVN 插件的兩種方法,詳細(xì)的介紹了這兩種安裝方法,具有一定的參考價值,有興趣的可以了解一下
    2018-01-01
  • Java求最小生成樹的兩種算法詳解

    Java求最小生成樹的兩種算法詳解

    最小生成樹(Minimum Spanning Tree):在連通圖的所有生成樹中,所有邊的權(quán)值和最小的生成樹,稱為最小生成樹。這篇文章主要介紹了求最小生成樹的兩種方法:Prim算法和Kruskal算法,需要的可以參考一下
    2022-01-01
  • Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法

    Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法

    今天小編就為大家分享一篇Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 一文秒懂logstash收集springboot日志的方法

    一文秒懂logstash收集springboot日志的方法

    通過這篇文章帶你了解logstash收集springboot日志的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論