關(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(分享)
下面小編就為大家?guī)硪黄猨ava之Timer和TimerTask簡單demo(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12SpringMVC中使用Thymeleaf模板引擎實(shí)例代碼
這篇文章主要介紹了SpringMVC中使用Thymeleaf模板引擎實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02關(guān)于SSM框架下各層的解釋說明(Controller等)
這篇文章主要介紹了關(guān)于SSM框架下各層的解釋說明(Controller等),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Spring bean加載控制實(shí)現(xiàn)方法
很多時候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來選擇是否在容器中加載某個Bean,這就是Bean的加載控制,一般我們可以通過編程式或注解式兩種不同的方式來完成Bean的加載控制2022-12-12解決Mybatis-Plus更新方法不更新NULL字段的問題
這篇文章主要介紹了解決Mybatis-Plus更新方法不更新NULL字段的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法
今天小編就為大家分享一篇Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06