我想在spring mybatis中更新mysql数据库。我有几个mapper接口,并希望使用sqlsession.commit()执行更新。我如何定义每个sqlsession?
@Transactional
public BookingRecord book(Person person, Hotel hotel, String id) {
List<Room> rooms = hotel.getRooms();
for (Room room : rooms) {
if (room.isAvailable()) {
if (person.getBalance() > room.getPrice()) {
// 开始订房
room.setAvailable(false); // 保留房间
person.setId(id);
person.setBalance(person.getBalance() - room.getPrice()); //转账
hotel.setBalance(hotel.getBalance() + room.getPrice()); //转账2
BookingRecord r = new BookingRecord(); //生成订单
r.setHotelName(hotel.getName()); //记录酒店名
r.setRoomNumber(room.getRoomNumber()); //记录房间号
r.setPersonId(person.getId()); //记录客人id
r.setStartDate(new Date());
personMapper.update(person);
brMapper.create(r);
hotelMapper.updateBalance(hotel);
roomMapper.update(room);
return r;
}
}
}
log.info(person.getName() + "successfully booked at " + hotel.getName());
return null;
}
答案 0 :(得分:0)
@Transactional使这个类事务意味着spring将在执行期间管理begin,commit和rollback程序。事务本身是一个非常广泛的研究领域,因此我建议您阅读Spring Transaction以了解有关Spring如何管理事务的更多信息。关于你的问题,我建议你应该为这个bean注入JDBC连接,以便预先执行begin,(commit或rollback)。