当前页面: 开发资料首页 → J2EE 专题 → 轻量级的关系/对象映射--Amber进阶
摘要: 本文推荐的一个叫Amber的框架提供了一种相反的轻量级实现。这种实现利用Java注解(annotations)来管理JavaBeans的CRUD周期(Create Read Update Delete)。事务处理被交还给数据库,而XML映射描述符则被注解代替。本文所面向的读者是那些对不使用XML描述符来有效操纵数据库感兴趣的Java中级开发者。
public class Jedi {
private Integer _id;
private String _name;
private Double _forceRating;
private Integer _age;
private Boolean _alive;
@ColumnAssociation(name="jedi_id")
public void setId( Integer id ) {
_id = id;
}
@ColumnAssociation(name="name")
public void setName( String name ) {
_name = name;
}
@ColumnAssociation(name="force_rating")
public void setForceRating( Double fr ) {
_forceRating = fr;
}
@ColumnAssociation(name="age")
public void setAge( Integer age ) {
_age = age;
}
@ColumnAssociation(name="alive")
public void setAlive( Boolean alive ) {
_alive = alive;
}
@ParameterAssociation(name="@jedi_id",
index=0, isAutoIdentity=true)
public Integer getId() {
return _id;
}
@ParameterAssociation(name="@name", index=1)
public String getName() {
return _name;
}
@ParameterAssociation(name="@force_rating",
index=2)
public Double getForceRating() {
return _forceRating;
}
@ParameterAssociation(name="@age", index=3)
public Integer getAge() {
return _age;
}
@ParameterAssociation(name="@alive", index=4)
public Boolean getAlive() {
return _alive;
}
}String driverClassName =
"com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url =
"jdbc:microsoft:sqlserver://" +
"localhost;databasename=jedi;" +
"user=use;pwd=theforce";
Amber's Connector is associated with a String, alias under which it remains accessible from the ConnectorFactory. Here, we're going to use the alias starwars.
Amber的Connector使用一个String作为别名来从ConnectorFactory获取连接,接下来,我们将使用别名starwars。
ConnectorFactory.getInstance().add(
"starwars", driverClassName, url
);
Connector connector =
ConnectorFactory.createConnector( "starwars" );
BeanReader reader =
new BeanReader( Jedi.class, connector );
CollectionjediList =
reader.executeCreateBeanList(
"select * from jedi"
);
public class Fighter {
private Integer _id;
private Integer _jediId;
private String _name;
private Double _firepowerRating;
private Boolean _turboLaserEquipped;
@ColumnAssociation(name="fighter_id")
public void setId( Integer id ) {
_id = id;
}
@ColumnAssociation(name="jedi_id")
public void setJediId( Integer jediId ) {
_jediId = jediId;
}
@ColumnAssociation(name="name")
public void setName( String name ) {
_name = name;
}
@ColumnAssociation(name="firepower_rating")
public void setFirepowerRating( Double firepowerRating ) {
_firepowerRating = firepowerRating;
}
@ColumnAssociation(name="turbo_laser_equipped")
public void setTurboLaserEquipped(
Boolean turboLaserEquipped ) {
_turboLaserEquipped = turboLaserEquipped;
}
@ParameterAssociation(name="@fighter_id",
index=0,isAutoIdentity=true)
public Integer getId() {
return _id;
}
@ParameterAssociation(name="@jedi_id",index=1)
public Integer getJediId() {
return _jediId;
}
@ParameterAssociation(name="@name",index=2)
public String getName() {
return _name;
}
@ParameterAssociation(name="@firepower_rating",
index=3)
public Double getFirepowerRating() {
return _firepowerRating;
}
@ParameterAssociation(name="@turbo_laser_equipped",
index=4)
public Boolean getTurboLaserEquipped() {
return _turboLaserEquipped;
}
}public class Jedi {
private Integer _id;
private String _name;
private Double _forceRating;
private Integer _age;
private Boolean _alive;
private ArrayList _fighterList =
new ArrayList();
@ColumnAssociation(name="jedi_id")
public void setId( Integer id ) {
_id = id;
}
@ColumnAssociation(name="name")
public void setName( String name ) {
_name = name;
}
@ColumnAssociation(name="force_rating")
public void setForceRating( Double forceRating ) {
_forceRating = forceRating;
}
@ColumnAssociation(name="age")
public void setAge( Integer age ) {
_age = age;
}
@ColumnAssociation(name="alive")
public void setAlive( Boolean alive ) {
_alive = alive;
}
@ParameterAssociation(name="@jedi_id",
index=0, isAutoIdentity=true)
public Integer getId() {
return _id;
}
@ParameterAssociation(name="@name", index=1)
public String getName() {
return _name;
}
@ParameterAssociation(name="@force_rating",
index=2)
public Double getForceRating() {
return _forceRating;
}
@ParameterAssociation(name="@age", index=3)
public Integer getAge() {
return _age;
}
@ParameterAssociation(name="@alive", index=4)
public Boolean getAlive() {
return _alive;
}
public ArrayList getFighterList() {
return _fighterList;
}
public void setFighterList( ArrayList fighterList ) {
_fighterList = fighterList;
}
} Connector connector =
ConnectorFactory.getInstance().createConnector( "starwars" );
BeanReader jediReader =
new BeanReader( Jedi.class, connector );
BeanReader fighterReader =
new BeanReader( Fighter.class, connector );
CollectionjediList =
reader.executeCreateBeanList( "select * from jedi" );
for( Jedi jedi : jediList ) {
String query =
"select * from fighter where jedi_id = " + jedi.getId();
Collectionfighters =
fighterReader.executeCreateBeanList( query );
jedi.setFighterList(
new ArrayList( fighters ) );
}
Connector connector =
ConnectorFactory.getInstance().createConnector( "starwars" );
BeanWriter writer =
new BeanWriter( Jedi.class, connector );
writer.executeStringUpdate(
sampleBean, "UpdateJedi" );
UpdateJedi
@name='Obi Wan Kenobi', @jedi_id=1000,
@alive=1, @force_rating=6.0, @age=30
Jedi newJedi = new Jedi();
newJedi.setName( "Mace Windu");
newJedi.setAge( 40 );
newJedi.setAlive( false );
newJedi.setForceRating( 9.7 );
Connector connector =
ConnectorFactory.getInstance().createConnector( "starwars" );
BeanWriter writer =
new BeanWriter( Jedi.class, connector );
writer.executeStringInsert(
newJedi, "InsertJedi" );
InsertJedi
@name='Mace Windu', @alive=0,
@force_rating=9.7, @age=40
Connector connector =
ConnectorFactory.createConnector( "starwars" );
BeanWriter writer =
new BeanWriter( Fighter.class, connector );
connector.execute(
"delete from fighters where jedi_id = " + jedi.getId() );
for( Fighter fighter : fighters ) {
fighter.setJediId( jedi.getId() );
connector.executeStringInsert(
fighter, "InsertFighter" )
}
InsertFighter @jediId=..., @name="...";