3 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
@Override
protected Statement instantiateStatement(Connection connection) throws SQLException {
String sql = boundSql.getSql();
if (mappedStatement.getKeyGenerator() instanceof Jdbc3KeyGenerator) {
String[] keyColumnNames = mappedStatement.getKeyColumns();
if (keyColumnNames == null) {
return connection.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
} else {
return connection.prepareStatement(sql, keyColumnNames);
}
} else if (mappedStatement.getResultSetType() != null) {
return connection.prepareStatement(sql, mappedStatement.getResultSetType().getValue(), ResultSet.CONCUR_READ_ONLY);
} else {
return connection.prepareStatement(sql);
}
}
這一段是Mybatis中PreparedStatementHandler的源碼。大概意思是如果使用自動(dòng)生成主鍵,并且值keyProperty不為空,Statement最后執(zhí)行的時(shí)候會(huì)把keyProperty涉及到的列值返回

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
在insert標(biāo)簽中添加如下代碼:
<selectKey resultType="int" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID()
</selectKey>
添加之后,會(huì)在對(duì)象添加之后自動(dòng)填入id

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
<selectKey resultType="int" order="AFTER" keyProperty="id">
SELECT ...
</selectKey>
添加回答
舉報(bào)