第十三篇:SpringBoot 2.x整合Mybatis以及通用Mapper的問(wèn)題

今天聽(tīng)說(shuō)在SpringBoot整合mybatis和通用mapper的時(shí)候會(huì)產(chǎn)生一個(gè)奇怪的問(wèn)題,即執(zhí)行sql語(yǔ)句的時(shí)候會(huì)找不到主鍵,比如下面這個(gè)樣子

//這是我要執(zhí)行的方法,很明顯就只是查詢user表中的所有數(shù)據(jù)
userMapper.selectAll();

//結(jié)果是這樣的
2018-11-20 16:17:54.111 DEBUG 10640 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : ==>  Preparing: SELECT username,password FROM user 
2018-11-20 16:17:54.111 DEBUG 10640 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : ==> Parameters: 
2018-11-20 16:17:54.129 DEBUG 10640 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : <==      Total: 1

明顯看到id這個(gè)列并沒(méi)有被查詢到,第一反應(yīng)是先去查看User

package priv.gabriel.model;

import javax.persistence.*;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-11-20
 * @Description:
 */
@Entity
@Table
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column
    private String username;

    @Column
    private String password;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

然而并沒(méi)有什么問(wèn)題,該標(biāo)識(shí)的都標(biāo)識(shí)了,然后又去查了一波dao

package priv.gabriel.mapper;

import org.apache.ibatis.annotations.Mapper;
import priv.gabriel.model.User;
import tk.mybatis.mapper.common.BaseMapper;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-11-20
 * @Description:
 */
@Mapper
public interface UserMapper extends BaseMapper<User>{

}

···根本不可能出現(xiàn)問(wèn)題嘛,然后絞盡腦汁的考慮的各方面的問(wèn)題,懷疑是版本問(wèn)題甚至把tk.mapper的2.x版本挨個(gè)下載完了,但是,并沒(méi)有什么用。
就在我懷疑人生的時(shí)候,突然瞟了一眼User類,靈光一閃,改造成了如下的款式

package priv.gabriel.model;

import javax.persistence.*;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-11-20
 * @Description:
 */
@Entity
@Table
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String username;

    @Column
    private String password;

    public Long getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

看得出來(lái)區(qū)別嗎?在這里我僅僅是把idint類型 轉(zhuǎn)為了 Long類型居然就好了???

2018-11-20 16:33:10.236 DEBUG 10076 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : ==>  Preparing: SELECT id,username,password FROM user 
2018-11-20 16:33:10.257 DEBUG 10076 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : ==> Parameters: 
2018-11-20 16:33:10.281 DEBUG 10076 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : <==      Total: 1

。。。

timg.jpg

具體情況還不清楚,我已經(jīng)準(zhǔn)備潛伏到tk.mapper的群里問(wèn)個(gè)明白,等搞清楚了再更新

更新 2018.11.21

在github的文檔上找到了

默認(rèn)情況下,簡(jiǎn)單類型會(huì)被識(shí)別為表中的字段,但是,不 包 含 Java 的 基 本 類 型

timg (1).jpg

繼續(xù)翻翻文檔,發(fā)現(xiàn)下面有一項(xiàng)配置可以支持基本類型
usePrimitiveType=true

總結(jié)

雖然之后找到了解決方案,但同時(shí)也發(fā)現(xiàn)了對(duì)應(yīng)的問(wèn)題

使用基本數(shù)據(jù)類型就會(huì)有默認(rèn)值,而在Mybatis中經(jīng)常會(huì)判斷屬性值是否為空,為了避免這樣的問(wèn)題最好在類中聲明屬性時(shí)都使用包裝類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容