在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 為何mybatis在插入一行數(shù)據(jù)后對應(yīng)的id不能映射到model中

為何mybatis在插入一行數(shù)據(jù)后對應(yīng)的id不能映射到model中

這是dao層的代碼

@Mapper
public interface UserDao {
    String TABLE_NAME = "user";
    String INSET_FIELDS = " username, password, salt, head_url ";
    String SELECT_FIELDS = " id, username, password, salt, head_url";
    
    @Insert({"insert into ", TABLE_NAME, "(", INSET_FIELDS,
    ") values (#{username},#{password},#{salt},#{headUrl})"})
    int addUser(User user);

    @Select({"select ", SELECT_FIELDS, " from ", TABLE_NAME, " where id=#{id}"})
    User selectById(int id);
    
    @Select({"select ", SELECT_FIELDS, " from ", TABLE_NAME, " where username=#{name}"})
    User selectByName(String name);
    
    @Update({"update ", TABLE_NAME, " set password=#{password} where id=#{id}"})
    void updatePassword(User user);
    
    @Delete({"delete from ", TABLE_NAME, " where id=#{id}"})
    void deleteById(int id);
}

這是model層的代碼

public class User {
    private int id;
    private String username;
    private String password;
    private String salt;
    private String headUrl;

    public User() {

    }
    public User(String username) {
        this.username = username;
        this.password = "";
        this.salt = "";
        this.headUrl = "";
    }

    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;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public String getHeadUrl() {
        return headUrl;
    }

    public void setHeadUrl(String headUrl) {
        this.headUrl = headUrl;
    }

    public int getId() {
        return id;
    }

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

當(dāng)注入完UserDao后,通過把user數(shù)據(jù)插入數(shù)據(jù)庫后userDao.addUser(user);數(shù)據(jù)庫有內(nèi)容,可是如果獲取id,user.getId() id永遠是0,請問這是為何?。?/p>

回答
編輯回答
落殤
<insert id="addUser" parameterType="com.queen.mybatis.bean.User">
    insert into
    t_user(loginId,userName,role,note)
    values(#{loginId},#{userName},#{role},#{note})
</insert>

這種配置方式并不能在完成插入操作后將插入時的主鍵值存放到保存的對象中。

修改為:

<insert id="addUser" parameterType="com.queen.mybatis.bean.User"
    useGeneratedKeys="true" keyProperty="id">
    insert into
    t_user(loginId,userName,role,note)
    values(#{loginId},#{userName},#{role},#{note})
</insert>

mysql支持自增主鍵,自增主鍵值的獲取,mybatis也是利用statement.getGenreatedKeys();
useGeneratedKeys=”true”;使用自增主鍵獲取主鍵值策略
keyProperty;指定對應(yīng)的主鍵屬性,也就是mybatis獲取到主鍵值以后,將這個值封裝給javaBean的哪個屬性

參考這里:http://www.marsitman.com/myba...

樓主遇到問題要學(xué)會自己google啊,你遇到的問題%80,別人都遇到過。
比如說你在MyBatis得不到主鍵值。或者主鍵(Id)得到的為0

2018年2月8日 20:25