mybatis获取insert之后数据库自动生成的id
需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。
方法:在mapper中指定keyProperty属性,示例如下:
IUserDao.xml
<!--保存用户-->
<insert id="saveUser" useGeneratedKeys="true" keyProperty="id" parameterType="com.itheima.domain.User">
insert into user(username, birthday, sex, address) values (#{username}, #{birthday}, #{sex},#{address})
</insert>
如上所示,我们在insert中指定了keyProperty="id",其中id代表插入的User对象的主键属性。
User.java
public class User {
private Integer id; //对应服务器的id主键
private String username;
private Date birthday;
private String sex;
private String address;
//setter and getter
}
IUserDao.java
IUserDao.java
public interface IUserDao {
// SQL语句需要传参的,都需要手动提交事务或者开启自动提交事务
/**
* 保存用户
* @param user
*/
int saveUser(User user); //提交事务
}
测试类:MybatisTest.java
MybatisTest.java
import ...
public class MybatisTest {
private InputStream in;
private SqlSession session;
private IUserDao userDao;
@Before
public void init() throws Exception{
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂创建SqlSession对象
session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
}
@After
public void destory() throws IOException {
if (session != null) {
session.close();
}
in.close();
}
@Test
// 实现类实现保存-注解
public void saveUser( ) {
User user = new User();
user.setUsername("小美女");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("玫瑰城堡");
System.out.println("插入前的主键为:" + user.getId());
userDao.saveUser(user);
session.commit();//提交事务
System.out.println("插入后的主键为:" + user.getId());
}
}
注意:session.commit(); 不提交事务仍有返回值,但数据库没有存储数据。 或者开启自动提交数据。