mybatis获取insert之后数据库自动生成的id

需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。

方法:在mapper中指定keyProperty属性,示例如下:

IUserDao.xml

    
        insert into user(username, birthday,  sex, address) values (#{username}, #{birthday}, #{sex},#{address})
    

如上所示,我们在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(); 不提交事务仍有返回值,但数据库没有存储数据。 或者开启自动提交数据。

mybatis获取insert之后数据库自动生成的id_第1张图片

你可能感兴趣的:(mabatis框架)