62,615
社区成员
发帖
与我相关
我的任务
分享
@Autowired
SqlMapper sqlMapper;
@Override
@Transactional(rollbackFor = { Exception.class, SQLException.class })
public boolean SavePlayer(List<Player> players) throws Exception {
// 全局数据库容器
ObjectDbExcuteContainer objectDbExcuteContainer = new ObjectDbExcuteContainer();
// 循环创建
for (Player player : players) {
// 1.先创建User
User user = player.getUser();
CreateUserAction createUser = new CreateUserAction(user);
createUser.containerExecute(objectDbExcuteContainer);
// 设置user的ID
user.setuID(createUser.getuID());
// 2.再创建Player
CreatePlayerAction createPlayer = new CreatePlayerAction(player);
createPlayer.containerExecute(objectDbExcuteContainer);
// 3.最后创建Race
Race race = player.getRace();
race.setPlayerID(createPlayer.getpID());
CreateRaceAction createRace = new CreateRaceAction(race);
createRace.containerExecute(objectDbExcuteContainer);
}
if (!objectDbExcuteContainer.excute()) {
return false;
}
return true;
}
##创建序列表
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;
##取当前序列中的值
DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END
$
DELIMITER ;
##取下一个值
DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER ;
#更新当前值
DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER ;
##创建一个全局对象的序列
INSERT INTO sequence VALUES ('ObjectSeq', 0, 1);
##分别为User、Player、Race创建自己的序列
INSERT INTO sequence VALUES ('UserSeq', 1001, 1);
INSERT INTO sequence VALUES ('PlayerSeq', 0, 1);
INSERT INTO sequence VALUES ('RaceSeq', 500, 1);
SELECT NEXTVAL('ObjectSeq');
SELECT NEXTVAL('UserSeq');
SELECT NEXTVAL('PlayerSeq');
SELECT NEXTVAL('RaceSeq');