一、原生JDBC获取主键值
public long insert(String sql, Object... args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet keys = null;
try {
conn = C3P0Util.getConnection();
//执行 sql 语句,生成的键可用于获取。
ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
for (int i = 0; i < args.length; i++) {
ps.setObject(i+1, args[i]);
}
ps.executeUpdate();
//获取 生成的键的结果集
keys = ps.getGeneratedKeys();
if(keys.next()){
return keys.getLong(1);//获取 生成的键
}
} catch (SQLException e) {
}finally{
//关闭连接...
}
return 0;
}
二、MyBatis(自动为user对象的id属性已经被赋值。)
<insert id="insertByTrim" useGeneratedKeys="true" keyProperty="id"><!-- 方法 一 -->
<!-- 方法 二 -->
<!-- <selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id"> -->
<!-- SELECT LAST_INSERT_ID() AS id -->
<!-- </selectKey> -->
insert into smbms_user
<trim prefix="(" suffix=")" prefixOverrides=",">
<if test="userName!=null">
,userName
</if>
<if test="userCode">
,userCode
</if>
</trim>
<trim prefix="values(" suffix=")" prefixOverrides=",">
<if test="userName!=null">
,#{userName}
</if>
<if test="userCode">
,#{userCode}
</if>
</trim>
</insert>
public void insertByTrim(){
SqlSession sqlSession = null;
User user = new User("insert","insert","1234567",1,
new java.sql.Date(new Date().getTime()),"13688889999",
"北京市海淀区成府路207号",1,1,1);
try{
sqlSession = enumMyBatilsUtils.SqlSessionFactory.createSqlSession();
int i = sqlSession.insert("dao.UserMapper.insertByTrim",user);
logger.debug("id:"+user.getId());//此时user对象的id属性已经被自动赋值。
sqlSession.commit();
}catch(Exception e){
sqlSession.rollback();
}finally{
sqlSession.close();
}
}