Database BCED模式-实体加载程序方法

Database BCED模式-实体加载程序方法,database,load,controls,entity,boundary,Database,Load,Controls,Entity,Boundary,本周五我要参加一个“软件工程”考试,但有一点我不明白,我的老师也无法解释 我必须基于边界控制器实体(BCE)模式创建一个具有持久性(数据库或顺序文件,但我将使用SQLite)的项目。我应该使用save/load方法实现实体类,这些方法将数据放入持久层或从持久层检索数据。他们用刀 例如: public class someEntity { private int someData; public void set_someData (int _someData) {this.some

本周五我要参加一个“软件工程”考试,但有一点我不明白,我的老师也无法解释

我必须基于边界控制器实体(BCE)模式创建一个具有持久性(数据库或顺序文件,但我将使用SQLite)的项目。我应该使用save/load方法实现实体类,这些方法将数据放入持久层或从持久层检索数据。他们用刀

例如:

public class someEntity
{
   private int someData;

   public void set_someData (int _someData) {this.someData = _someData;}
   public int  get_someData ()              {return this.someData;}

   public void save ()
   {
      DAO dao = new DAO ();

      dao.openConnection ();
      dao.insert (this.someData);
      dao.closeConnection ();
   }
到目前为止,一切都很清楚

在实现“load”方法时,我希望使用搜索参数(数据库中的主键)用数据库中的数据“填充”实体实例。但是,如果我想让所有人在1980年之前出生,我能做什么

在我看来,唯一的解决方案是在控制器类中实现以下内容

ArrayList <people> pList= new ArrayList ();
people p;

for (int i = 1900 ; i < 1980 ; i++)
{
  p = new people ();

  if (p.load (i) == true); //returns true if has found corresponding entry in db
  {
     pList.add(i);
  }
}
Company c = new Company;

c.load ("thatCompany");

for (int i = 0 ; i < c.getEmployee_amount () ; i++)
{
   // get ith employee from list
   // test if was born before '80
   //do something, else do other thing
}
ArrayList pList=new ArrayList();
人p;
对于(int i=1900;i<1980;i++)
{
p=新人();
if(p.load(i)=true);//如果在数据库中找到了相应的条目,则返回true
{
pList.添加(i);
}
}
这太疯狂了,不是吗

因此,我需要一个返回集合的“loader”方法,这样我就可以在DAO中实现一个方法,通过一个简单的SQL查询返回1980年以前出生的所有人。只有当控制类直接与DAO对话,忽略BCE模式规则时,才能做到这一点


如果这是一个真正的问题,我如何解决它呢?

只需在DAO中创建一个方法来执行SQL查询,如下所示:

SELECT * FROM people p WHERE p.born < '1980-01-01';
p.born<'1980-01-01'中的人物p中选择*;
别忘了在born列上创建索引

另外,在咖啡馆里找一个1980年以前出生并在特定公司工作的单身汉

您可以使用限制

SELECT p.* FROM people p p.company = c.id WHERE p.born < '1980-01-01' and p.company_id = 'thatcompany' LIMIT 1
从p.p.company=c.id的人员中选择p.*,其中p.born<'1980-01-01'和p.company\u id='thatcompany'限制1

(假设p.company\u id是一个FK列)

我一直在考虑一个解决方案:

i、 我有一个“雇员”实体,一个“雇员”在“公司”工作

这可以表示为:

public class company
{
  private String name;
  private int employee_amount;
  private ArrayList <employee> works;

  //setter, getters and save methods...

  public void load (String _name)
  {
     DAO dao = new DAO ();
     employee e;

     dao.openConnection ();
     works = dao.searchByCompany (_name);    
     dao.closeConnection ();

     this.name = _name;
     this.employee_amount = e.length ();
  }
上市公司
{
私有字符串名称;
私人国际雇员单位金额;
私人ArrayList作品;
//setter、getter和save方法。。。
公共无效加载(字符串_名称)
{
DAO=newdao();
雇员e;
openConnection();
works=dao.searchByCompany(_name);
dao.closeConnection();
this.name=\u name;
this.employee_amount=e.length();
}
在DAO中,将实现searchByCompany方法

public ArrayList <employee> searchByCompany (String name)
{
  ArrayList <employee> to_return = new ArrayList ();

  //stuff....

   rs = stmt.executeQuery ("SELECT * FROM Employees WHERE Company = '" + name + "'");

  //get rs fields and put everything into to_return

  return to_return;
}
public ArrayList searchByCompany(字符串名称)
{
ArrayList to_return=新建ArrayList();
//东西。。。。
rs=stmt.executeQuery(“从公司=“+name+””的员工中选择*”;
//获取rs字段并将所有内容放入到返回中
返回到_返回;
}
所以,当我需要搜索80年以前出生的著名员工时,我将以下代码放入控制器类

ArrayList <people> pList= new ArrayList ();
people p;

for (int i = 1900 ; i < 1980 ; i++)
{
  p = new people ();

  if (p.load (i) == true); //returns true if has found corresponding entry in db
  {
     pList.add(i);
  }
}
Company c = new Company;

c.load ("thatCompany");

for (int i = 0 ; i < c.getEmployee_amount () ; i++)
{
   // get ith employee from list
   // test if was born before '80
   //do something, else do other thing
}
公司c=新公司;
c、 加载(“该公司”);
对于(int i=0;i

这是正确的工作方式吗?

谢谢你的回答:)……好的,但当我这样做时,我会得到一个包含多个条目的结果集,而我只需要一个条目。如果我选择第一个结果集条目并将其加载到实体实例中,那么我可能需要重复这个操作:我创建实体,调用load方法,然后load方法执行该查询。我会有相同的结果集,我会选择第二个条目,但我就是做不到……或者不做?。PS:对不起我的英语,我知道,有时我会犯可怕的错误:我很抱歉,但无法理解你到底想做什么。是的,你可能会得到多行。你是想找一个1980年以前出生并在特定公司工作的人吗?是的因为每个表项都应该有一个实体实例,所以它不是“load”方法属于实体类,而不是集合……但是如果我可以使用下面的代码,(这是对empolyees容器的搜索,而不是对自己的搜索)我想问题已经解决了……我只是添加了一个查询,以获取1980年之前出生并在特定公司工作的单身人士。请看一看。