我正在开发一个独立的J2SE应用程序(无法添加J2EE,Hibernate,Spring等等)。我需要设计代码架构的想法。
这是我的代码:
class PersonBean {
String name;
int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class PersonMapper{
PersonMapper(Connection conn){
}
PersonBean load(ResultSet rs){
PersonBean entity = new PersonBean();
entity.setId(rs.getInt("id"));
entity.setName(rs.getString("name"));
return entity;
}
PersonBean findById(int id){
String query = "SELECT * FROM Person where id = ?";
PreparedStatment stmt = conn.getPreparedStatement(query);
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next())
return load(rs);
else
return null;
}
List<PersonBean> findByName(String name) {}
}
我需要做些什么才能改进这种设计?
在对象世界中,Student对象扩展Person对象。但是在数据库中,Student和Person是两个不同的表,这导致为StudentBean和PersonBean创建两个不同的类,其中StudentBean不会扩展PersonBean。我是否需要在实体Bean对象层之上创建业务层?如果是这样如何设计?
我不知道如何开始浏览这个,任何链接也没关系。
答案 0 :(得分:1)
如果你希望能够拥有一个层次结构,你应该实现一个更好的映射器,它可以在加载Person和Student bean之间做区别。更好的方法是自己实现,类似于Hibernate或Spring的JdbcTemplate ...这将花费你一段时间。
但在此之前,我建议尝试sql2java,为您拥有的所有表格生成与您类似的结构,并且还允许您自定义它,以及数据结构是否更改,它可以重新生成。
答案 1 :(得分:0)
我选择艾伯特说的逻辑
我建议相同的,您可以使用ResultSetMetaData编程来获取所有列/伪列名称,这些名称将映射为
EMPLOYEE_NAME to employeeName setter method setEmployeeName on the fly
您可以使用Java Reflection调用setter方法,也可以使用apache BeanUtils
答案 2 :(得分:0)