使用Hibernate的时候,insert插入可以很简单的获取自增主键ID。而使用MyBatis有insert select delete等操作,并没有直接获取自增主键的操作,需要手动配置。
1:public interface IAdminDao
/**
* 插入Admin
* @param admin
* @return
*/
public Integer insertAdmin(Admin admin);
2:AdminDao.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dms.dao.IAdminDao">
<insert id="insertAdmin" parameterType="Admin" useGeneratedKeys="true" keyProperty="id">
insert into admin(email,password) values(#{email},#{password})
</insert>
</mapper>
重点是在insert中加入 useGeneratedKeys="true" keyProperty="id",前者表示使用自增主键,后者指定主键是id
3:AdminService
/**
*
* @author zhao
*
*/
@Service
public class AdminService implements IAdminService {
private static final Logger LOGGER = LoggerFactory.getLogger(AdminService.class);
@Autowired
private IAdminDao adminDao;
public voidregister(Admin admin){
<span style="white-space:pre"> </span>adminDao.insertAdmin(admin);
Integer adminId = admin.getId();
<span style="white-space:pre"> </span>System.out.println(adminId);
}
}
注:虽然adminDao.insertAdmin(Admin)的返回值是Integer,但这个返回值并不是自增主键ID,而是插入成功的数据条数,插入一条数据就返回1.
要想获取自增ID,需要使用Admin , Admin.getId()便可以获取ID了,这个思路类似于Hibernate,对象持久化之后,我们可以通过持久化对象获取主键。
所以上面的IAdminDao的insertAdmin(Admin)方法可以改为void ,这样就不会有歧义了。可见我们并不是获取的插入的返回值,而是插入成功后数据被封装到持久化对象中了。