1
0
mirror of https://github.com/Rogiel/l2jserver2 synced 2025-12-06 07:32:46 +00:00

Updated DAO Structure

Signed-off-by: Rogiel <rogiel@rogiel.com>
This commit is contained in:
2011-05-16 14:24:11 -03:00
parent 4952a6a47b
commit 242616d384
7 changed files with 95 additions and 133 deletions

View File

@@ -21,6 +21,7 @@ import java.util.List;
import com.l2jserver.model.id.AccountID; import com.l2jserver.model.id.AccountID;
import com.l2jserver.model.id.ID; import com.l2jserver.model.id.ID;
import com.l2jserver.model.id.object.CharacterID; import com.l2jserver.model.id.object.CharacterID;
import com.l2jserver.model.world.Clan;
import com.l2jserver.model.world.L2Character; import com.l2jserver.model.world.L2Character;
import com.l2jserver.service.cache.Cacheable; import com.l2jserver.service.cache.Cacheable;
import com.l2jserver.service.cache.IgnoreCaching; import com.l2jserver.service.cache.IgnoreCaching;
@@ -41,6 +42,14 @@ public interface CharacterDAO extends DataAccessObject<L2Character>, Cacheable {
*/ */
L2Character load(CharacterID id); L2Character load(CharacterID id);
/**
* Load the members of the given <tt>clan</tt>
*
* @param clan
* the clan
*/
void load(Clan clan);
/** /**
* Select an character by its name. * Select an character by its name.
* *

View File

@@ -35,6 +35,7 @@ import com.l2jserver.model.id.template.factory.CharacterTemplateIDFactory;
import com.l2jserver.model.template.CharacterTemplate; import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.AbstractActor.Race; import com.l2jserver.model.world.AbstractActor.Race;
import com.l2jserver.model.world.AbstractActor.Sex; import com.l2jserver.model.world.AbstractActor.Sex;
import com.l2jserver.model.world.Clan;
import com.l2jserver.model.world.L2Character; import com.l2jserver.model.world.L2Character;
import com.l2jserver.model.world.character.CharacterAppearance; import com.l2jserver.model.world.character.CharacterAppearance;
import com.l2jserver.model.world.character.CharacterAppearance.CharacterFace; import com.l2jserver.model.world.character.CharacterAppearance.CharacterFace;
@@ -42,7 +43,6 @@ import com.l2jserver.model.world.character.CharacterAppearance.CharacterHairColo
import com.l2jserver.model.world.character.CharacterAppearance.CharacterHairStyle; import com.l2jserver.model.world.character.CharacterAppearance.CharacterHairStyle;
import com.l2jserver.model.world.character.CharacterClass; import com.l2jserver.model.world.character.CharacterClass;
import com.l2jserver.service.database.DatabaseService; import com.l2jserver.service.database.DatabaseService;
import com.l2jserver.service.database.MySQLDatabaseService;
import com.l2jserver.service.database.MySQLDatabaseService.CachedMapper; import com.l2jserver.service.database.MySQLDatabaseService.CachedMapper;
import com.l2jserver.service.database.MySQLDatabaseService.InsertUpdateQuery; import com.l2jserver.service.database.MySQLDatabaseService.InsertUpdateQuery;
import com.l2jserver.service.database.MySQLDatabaseService.Mapper; import com.l2jserver.service.database.MySQLDatabaseService.Mapper;
@@ -114,28 +114,18 @@ public class MySQL5CharacterDAO extends AbstractMySQL5DAO<L2Character>
} }
/** /**
* The {@link Mapper} instance * The {@link Mapper} for {@link L2Character}
*/ */
private final CharacterMapper mapper = new CharacterMapper(database); private final Mapper<L2Character> mapper = new CachedMapper<L2Character, CharacterID>(
database) {
/**
* Character mapper class
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
private final class CharacterMapper extends
CachedMapper<L2Character, CharacterID> {
public CharacterMapper(MySQLDatabaseService database) {
super(database);
}
@Override @Override
protected CharacterID createID(ResultSet rs) throws SQLException { protected CharacterID createID(ResultSet rs) throws SQLException {
return idFactory.createID(rs.getInt(CHAR_ID)); return idFactory.createID(rs.getInt(CHAR_ID));
} }
@Override @Override
protected L2Character map(CharacterID id, ResultSet rs) throws SQLException { protected L2Character map(CharacterID id, ResultSet rs)
throws SQLException {
final CharacterClass charClass = CharacterClass.valueOf(rs final CharacterClass charClass = CharacterClass.valueOf(rs
.getString(CLASS)); .getString(CLASS));
final CharacterTemplateID templateId = templateIdFactory final CharacterTemplateID templateId = templateIdFactory
@@ -176,63 +166,19 @@ public class MySQL5CharacterDAO extends AbstractMySQL5DAO<L2Character>
character.getAppearance().setFace( character.getAppearance().setFace(
CharacterFace.valueOf(rs.getString(APPEARANCE_FACE))); CharacterFace.valueOf(rs.getString(APPEARANCE_FACE)));
database.updateCache(character.getID(), character);
return character; return character;
} }
};
// @Override /**
// public L2Character map(ResultSet rs) throws SQLException { * The mapper for {@link CharacterID}
// final CharacterID id = idFactory.createID(rs.getInt(CHAR_ID)); */
// private final Mapper<CharacterID> idMapper = new Mapper<CharacterID>() {
// if (database.hasCachedObject(id)) @Override
// return (L2Character) database.getCachedObject(id); public CharacterID map(ResultSet rs) throws SQLException {
// return idFactory.createID(rs.getInt(CHAR_ID));
// final CharacterClass charClass = CharacterClass.valueOf(rs }
// .getString(CLASS)); };
// final CharacterTemplateID templateId = templateIdFactory
// .createID(charClass.id);
// final CharacterTemplate template = templateId.getTemplate();
//
// final L2Character character = new L2Character(
// template.getBaseAttributes());
//
// character.setID(id);
// character.setAccountID(accountIdFactory.createID(rs
// .getString(ACCOUNT_ID)));
// if (rs.getString(CLAN_ID) != null)
// character.setClanID(clanIdFactory.createID(rs.getInt(CLAN_ID)));
//
// character.setName(rs.getString(NAME));
//
// character.setRace(Race.valueOf(rs.getString(RACE)));
// character.setCharacterClass(CharacterClass.valueOf(rs
// .getString(CLASS)));
// character.setSex(Sex.valueOf(rs.getString(SEX)));
//
// character.setLevel(rs.getInt(LEVEL));
// // TODO load experience
// // TODO load sp
//
// character.setPoint(Point.fromXYZA(rs.getInt(POINT_X),
// rs.getInt(POINT_Y), rs.getInt(POINT_Z),
// rs.getDouble(POINT_ANGLE)));
//
// // appearance
// character.getAppearance().setHairStyle(
// CharacterHairStyle.valueOf(rs
// .getString(APPEARANCE_HAIR_STYLE)));
// character.getAppearance().setHairColor(
// CharacterHairColor.valueOf(rs
// .getString(APPEARANCE_HAIR_COLOR)));
// character.getAppearance().setFace(
// CharacterFace.valueOf(rs.getString(APPEARANCE_FACE)));
//
// database.updateCache(character.getID(), character);
//
// return character;
// }
}
@Override @Override
public L2Character load(final CharacterID id) { public L2Character load(final CharacterID id) {
@@ -255,6 +201,29 @@ public class MySQL5CharacterDAO extends AbstractMySQL5DAO<L2Character>
}); });
} }
@Override
public void load(final Clan clan) {
clan.getMembers().load(
database.query(new SelectListQuery<CharacterID>() {
@Override
protected String query() {
return "SELECT `" + CHAR_ID + "` FROM `" + TABLE
+ "` WHERE `" + CLAN_ID + "` = ?";
}
@Override
protected void parametize(PreparedStatement st)
throws SQLException {
st.setInt(1, clan.getID().getID());
}
@Override
protected Mapper<CharacterID> mapper() {
return idMapper;
}
}));
}
@Override @Override
public L2Character selectByName(final String name) { public L2Character selectByName(final String name) {
return database.query(new SelectSingleQuery<L2Character>() { return database.query(new SelectSingleQuery<L2Character>() {
@@ -301,17 +270,12 @@ public class MySQL5CharacterDAO extends AbstractMySQL5DAO<L2Character>
return database.query(new SelectListQuery<CharacterID>() { return database.query(new SelectListQuery<CharacterID>() {
@Override @Override
protected String query() { protected String query() {
return "SELECT * FROM `" + TABLE + "`"; return "SELECT `" + CHAR_ID + " FROM `" + TABLE + "`";
} }
@Override @Override
protected Mapper<CharacterID> mapper() { protected Mapper<CharacterID> mapper() {
return new Mapper<CharacterID>() { return idMapper;
@Override
public CharacterID map(ResultSet rs) throws SQLException {
return idFactory.createID(rs.getInt(CHAR_ID));
}
};
} }
}); });
} }

View File

@@ -61,21 +61,14 @@ public class MySQL5CharacterFriendDAO extends AbstractMySQL5DAO<CharacterID>
} }
/** /**
* The {@link Mapper} instance * The {@link Mapper} for {@link CharacterID}
*/ */
private final CharacterFriendMapper mapper = new CharacterFriendMapper(); private final Mapper<CharacterID> mapper = new Mapper<CharacterID>() {
/**
* The friend list mapper
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
private final class CharacterFriendMapper implements Mapper<CharacterID> {
@Override @Override
public CharacterID map(ResultSet rs) throws SQLException { public CharacterID map(ResultSet rs) throws SQLException {
return idFactory.createID(rs.getInt(CHAR_ID_FRIEND)); return idFactory.createID(rs.getInt(CHAR_ID_FRIEND));
} }
} };
@Override @Override
public List<CharacterID> load(final CharacterID id) { public List<CharacterID> load(final CharacterID id) {

View File

@@ -30,7 +30,6 @@ import com.l2jserver.model.id.object.factory.CharacterIDFactory;
import com.l2jserver.model.id.object.factory.ClanIDFactory; import com.l2jserver.model.id.object.factory.ClanIDFactory;
import com.l2jserver.model.world.Clan; import com.l2jserver.model.world.Clan;
import com.l2jserver.service.database.DatabaseService; import com.l2jserver.service.database.DatabaseService;
import com.l2jserver.service.database.MySQLDatabaseService;
import com.l2jserver.service.database.MySQLDatabaseService.CachedMapper; import com.l2jserver.service.database.MySQLDatabaseService.CachedMapper;
import com.l2jserver.service.database.MySQLDatabaseService.InsertUpdateQuery; import com.l2jserver.service.database.MySQLDatabaseService.InsertUpdateQuery;
import com.l2jserver.service.database.MySQLDatabaseService.Mapper; import com.l2jserver.service.database.MySQLDatabaseService.Mapper;
@@ -69,20 +68,9 @@ public class MySQL5ClanDAO extends AbstractMySQL5DAO<Clan> implements ClanDAO {
} }
/** /**
* The {@link Mapper} instance * The {@link Mapper} for {@link Clan}
*/ */
private final ClanMapper mapper = new ClanMapper(database); private final Mapper<Clan> mapper = new CachedMapper<Clan, ClanID>(database) {
/**
* Clan mapper class
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
private final class ClanMapper extends CachedMapper<Clan, ClanID> {
public ClanMapper(MySQLDatabaseService database) {
super(database);
}
@Override @Override
protected ClanID createID(ResultSet rs) throws SQLException { protected ClanID createID(ResultSet rs) throws SQLException {
return idFactory.createID(rs.getInt(CLAN_ID)); return idFactory.createID(rs.getInt(CLAN_ID));
@@ -94,7 +82,17 @@ public class MySQL5ClanDAO extends AbstractMySQL5DAO<Clan> implements ClanDAO {
clan.setID(id); clan.setID(id);
return clan; return clan;
} }
} };
/**
* The {@link Mapper} for {@link ClanID}
*/
private final Mapper<ClanID> idMapper = new Mapper<ClanID>() {
@Override
public ClanID map(ResultSet rs) throws SQLException {
return idFactory.createID(rs.getInt(CLAN_ID));
}
};
@Override @Override
public Clan load(final ClanID id) { public Clan load(final ClanID id) {
@@ -127,12 +125,7 @@ public class MySQL5ClanDAO extends AbstractMySQL5DAO<Clan> implements ClanDAO {
@Override @Override
protected Mapper<ClanID> mapper() { protected Mapper<ClanID> mapper() {
return new Mapper<ClanID>() { return idMapper;
@Override
public ClanID map(ResultSet rs) throws SQLException {
return idFactory.createID(rs.getInt(CLAN_ID));
}
};
} }
}); });
} }
@@ -150,7 +143,6 @@ public class MySQL5ClanDAO extends AbstractMySQL5DAO<Clan> implements ClanDAO {
protected void parametize(PreparedStatement st, Clan clan) protected void parametize(PreparedStatement st, Clan clan)
throws SQLException { throws SQLException {
int i = 1; int i = 1;
st.setInt(i++, clan.getID().getID()); st.setInt(i++, clan.getID().getID());
} }
}) > 0; }) > 0;

View File

@@ -34,6 +34,7 @@ import com.l2jserver.model.world.Item;
import com.l2jserver.model.world.L2Character; import com.l2jserver.model.world.L2Character;
import com.l2jserver.model.world.character.CharacterInventory; import com.l2jserver.model.world.character.CharacterInventory;
import com.l2jserver.service.database.DatabaseService; import com.l2jserver.service.database.DatabaseService;
import com.l2jserver.service.database.MySQLDatabaseService.CachedMapper;
import com.l2jserver.service.database.MySQLDatabaseService.Mapper; import com.l2jserver.service.database.MySQLDatabaseService.Mapper;
import com.l2jserver.service.database.MySQLDatabaseService.SelectListQuery; import com.l2jserver.service.database.MySQLDatabaseService.SelectListQuery;
import com.l2jserver.service.database.MySQLDatabaseService.SelectSingleQuery; import com.l2jserver.service.database.MySQLDatabaseService.SelectSingleQuery;
@@ -80,21 +81,14 @@ public class MySQL5ItemDAO extends AbstractMySQL5DAO<Item> implements ItemDAO {
/** /**
* The {@link Mapper} instance * The {@link Mapper} instance
*/ */
private final ItemMapper mapper = new ItemMapper(); private final Mapper<Item> mapper = new CachedMapper<Item, ItemID>(database) {
/**
* {@link Item} mapper class
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
private final class ItemMapper implements Mapper<Item> {
@Override @Override
public Item map(ResultSet rs) throws SQLException { protected ItemID createID(ResultSet rs) throws SQLException {
final ItemID id = idFactory.createID(rs.getInt(ITEM_ID)); return idFactory.createID(rs.getInt(ITEM_ID));
}
if (database.hasCachedObject(id))
return (Item) database.getCachedObject(id);
@Override
public Item map(ItemID id, ResultSet rs) throws SQLException {
final ItemTemplateID templateId = templateIdFactory.createID(rs final ItemTemplateID templateId = templateIdFactory.createID(rs
.getInt(TEMPLATE_ID)); .getInt(TEMPLATE_ID));
final ItemTemplate template = templateId.getTemplate(); final ItemTemplate template = templateId.getTemplate();
@@ -102,12 +96,20 @@ public class MySQL5ItemDAO extends AbstractMySQL5DAO<Item> implements ItemDAO {
item.setID(id); item.setID(id);
item.setOwnerID(charIdFactory.createID(rs.getInt(CHAR_ID))); item.setOwnerID(charIdFactory.createID(rs.getInt(CHAR_ID)));
database.updateCache(item.getID(), item);
return item; return item;
} }
} };
/**
* The {@link Mapper} for {@link ItemID}
*/
private final Mapper<ItemID> idMapper = new Mapper<ItemID>() {
@Override
public ItemID map(ResultSet rs) throws SQLException {
return idFactory.createID(rs.getInt(CHAR_ID));
}
};
@Override @Override
public Item load(final ItemID id) { public Item load(final ItemID id) {
@@ -164,12 +166,7 @@ public class MySQL5ItemDAO extends AbstractMySQL5DAO<Item> implements ItemDAO {
@Override @Override
protected Mapper<ItemID> mapper() { protected Mapper<ItemID> mapper() {
return new Mapper<ItemID>() { return idMapper;
@Override
public ItemID map(ResultSet rs) throws SQLException {
return idFactory.createID(rs.getInt(CHAR_ID));
}
};
} }
}); });
} }

View File

@@ -76,6 +76,13 @@ public class Clan extends AbstractObject implements
this.leaderID = leaderID; this.leaderID = leaderID;
} }
/**
* @return the members
*/
public ClanMembers getMembers() {
return members;
}
@Override @Override
public ClanID getID() { public ClanID getID() {
return (ClanID) super.getID(); return (ClanID) super.getID();

View File

@@ -16,8 +16,8 @@
*/ */
package com.l2jserver.model.world.clan; package com.l2jserver.model.world.clan;
import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Set; import java.util.Set;
import com.l2jserver.model.id.object.CharacterID; import com.l2jserver.model.id.object.CharacterID;
@@ -80,7 +80,7 @@ public class ClanMembers implements Iterable<CharacterID> {
* @param members * @param members
* the list of members ids * the list of members ids
*/ */
public void load(List<CharacterID> members) { public void load(Collection<CharacterID> members) {
this.members.addAll(members); this.members.addAll(members);
} }