我是MyBatis
新手,并在Spring
和MyBatis
申请中提供服务类:
@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.2
,MyBatis 3.3.0
和Apache Derby 10.x
。
答案 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。