使用Spring和MyBatis Web应用程序从INSERT INTO table_name获取主键

时间:2015-07-08 18:26:59

标签: sql spring primary-key mybatis

我是MyBatis新手,并在SpringMyBatis申请中提供服务类:

@Service("personServiceImpl")
public class PersonServiceImpl implements PersonService {

@Autowired
private PersonMapper personMapper;

static final Logger logger = Logger.getLogger(PersonServiceImpl.class.getName());

public PersonServiceImpl() { 
}

@Transactional
@Override
public void insert(Person person) {
    logger.info(PersonServiceImpl.class.getName() + ".insert() method called.");

    personMapper.insert(person);       
}

personMapper对象中,我有以下内容:

public interface PersonMapper {

@Insert("INSERT INTO Person(name, address, telephone, email) " +
        "VALUES (#{name},#{address}, #{telephone}, #{email})")          
@Options(useGeneratedKeys=true, keyProperty="Person_Id", flushCache=true, keyColumn="Person_Id")
public void insert(Person person);    

所有这些都能很好地工作但是如何在Person表中获取新创建的行的主键?

我可以做一个明确的SQL select但是有更好的方法吗?

我正在使用Spring 4.0.2MyBatis 3.3.0Apache Derby 10.x

1 个答案:

答案 0 :(得分:0)

@Options(useGeneratedKeys=true, keyProperty="personId", flushCache=true, keyColumn="Person_Id")
public void insert(Person person);

KeyProperty是指POJO变量名,KeyColumn是指数据库中生成的列名。 因此将其更新为

personId

插入后,

@Transactional @Override public void insert(Person person) { logger.info(PersonServiceImpl.class.getName() + ".insert() method called."); personMapper.insert(person); 
person.getPersonId();
}

将拥有您生成的ID。