我正在尝试实施三层架构。我需要把数据库查询的连接语句放在哪里?
即如果我有一个Bill类,它将有两个表BillingMaster和BillingDetail。对于插入/更新/删除,我可以使用如下
Class BillingMaster
{
public int BillId;
public double BillAmt;
public void save()
{
.....
}
public void update()
{
.....
}
}
Class BillingDetatil
{
public int BillId;
public string Item;
public double Amount;
public void save()
{
.....
}
public void update()
{
.....
}
}
我需要获取数据并以表格格式加入billingmst和billingdet。我需要在哪里提供连接查询?
----------我修改了关于我从Kayaman和Ali那里获得的输入的问题----
我正在修改案例,就像我需要两份报告,例如客户明智的账单明细,账单中的日期范围
我可以编码
class BALBill
{
public dataset getCustWiseBillDetails()
{
DBManager oDBM=new DBManager() //Class supporting db operations
String strsql="select CustId,CustName,BillNo,BillAmt,Item,Amount FROM CustMst cm"
strSql+="\n join BillingMst bm on bm.CustId=cm.CustId"
strSql+="\n join BillingDet bd on bm.BillNo=bd.BillNo"
retrun oDBM.fnExecute(strSQL);
}
public dataset getBillsInADateRange(DateTime dtFrom,DateTime dtTo)
{
DBManager oDBM=new DBManager() //Class supporting db operations
String strsql="select BillNo,BillAmt,Item,Amount FROM BillingMst bm on bm.CustId=cm.CustId"
strSql+="\n join BillingDet bd on bm.BillNo=bd.BillNo"
strSql+="\n where BillDate between " + dtFrom " and " + dtTo
retrun oDBM.fnExecute(strSQL);
}
public sub SaveBillMst(BillingMst bM)
{
DBManager oDBM=new DBManager() //Class supporting db operations
String strsql="insert into BillingMst(BillNo,BillAmt)"
strsql+="\n values(" + bM.BillNo + ", " +bM.BillAmt+")"
oDBM.fnExecuteNonQuery(strSQL);
}
public sub SaveBillMst(List<BillingMst> bLM)
{
DBManager oDBM=new DBManager() //Class supporting db operations
foreach(BillingMst bM in BLM)
{
String strsql="insert into BillingMst(BillNo,BillAmt)"
strsql+="\n values(" + bM.BillNo + ", " +bM.BillAmt+")"
oDBM.fnExecuteNonQuery(strSQL);
}
}
public sub SaveBillDet(BillingDet bD)
{
DBManager oDBM=new DBManager() //Class supporting db operations
String strsql="insert into BillingMst(BillId,Item,Amount)"
strsql+="\n values(" + bD.BillNo + ", '" +bD.Item+"',"+bD.Amount+")"
oDBM.fnExecuteNonQuery(strSQL);
}
public sub SaveBillDet(List<BillingDet> bLD)
{
DBManager oDBM=new DBManager() //Class supporting db operations
foreach(BillingMst bD in bLD)
{
String strsql="insert into BillingMst(BillNo,BillAmt)"
strsql+="\n values(" + bM.BillNo + ", " +bM.BillAmt+")"
oDBM.fnExecuteNonQuery(strSQL);
}
}
public sub SaveBill(DALBill b)
{
saveBillMst(b.bM);
saveBillDet(b.bLD);
}
public sub SaveBill(List<DALBill> bL)
{
foreach(DALBill b in bL)
{
saveBillMst(b.bM);
saveBillDet(b.bLD);
}
}
}
class BillingMst
{
public int BillId;
public double BillAmt;
}
class BillingDet
{
public int BillId;
public string Item;
public double Amount;
}
class DALBill
{
public BillingMst bM;
public List<BillingDet> bLD;
}
我是在正确的道路上吗?
答案 0 :(得分:0)
您显然将它放在用于从数据库中读取数据的类中。您现在拥有CUD
个对象(创建,更新,删除),但您仍需要阅读。
选择取决于您,但请记住,您使用的方法并非最佳。如果要在单个事务中插入100个对象,该怎么办?你会在每个对象上调用save()
吗?用户是否负责交易?
更标准的方法是每个对象类型都有一个DAO
(数据访问对象),它将包含所有(CRUD)所需的操作。
有类似于你的解决方案(例如Ebean),但你可能想先学习“基本”方法,然后查看JPA / Hibernate和其他持久性解决方案。
答案 1 :(得分:0)
我相信这两个表会有它们之间的关系,每个详细记录都有Master's PK
为foreign key
,制作一个GetByPK
方法,用于检索提供的初始密钥的记录。 BillingMaster
。通过这种方式,您可以从两个表中获取信息,就像
BillingDetatil detail = new BillingDetatil();
detail.BillingMaster. // here you can access all the fields
与master表相同,如果要访问该master的所有子详细信息,请将List放入Master中
您将在BLL Business Logic Layer