更好的方法是将这个Servlet / bean传递表名从servlet转换为java中的bean类

时间:2012-09-29 02:17:08

标签: java jsp servlets javabeans

我有一堆接近100的产品,并且每个产品在DB中都有自己的表,为此我已经为每个产品实现了搜索功能,现在我正在考虑重用代码,因为除了少数参数和表名之外逻辑都保持不变,

String test = request.getParameter(“test”);

test是下拉列表,其中包含有关产品的信息,

我想的方式是

if ( test.equals(ProductA)) {
          List<searchbean> list = dao.fetchDBRecords(tableA,other parameters of form);
        }

列表中的参数将传递给sql查询。

现在我的问题是,对于多个产品使用单个类是否有意义,或者为每个产品分别设置更有意义。

我问这个有两个原因,在一段时间内,我的代码库似乎增加了很多(300多个类),我需要一种方法来控制它进一步增长。这经常被处理? 。 如果我使用单个类来购买多个产品,我是否会遇到任何我需要注意的并发问题。

2 个答案:

答案 0 :(得分:0)

我不喜欢“每个产品的类别”或“每个产品的表格”模型。每次添加或删除产品时,都不必修改代码。你将不得不稍微抽象地思考一下这个问题,但只要你没有走得太远而造成无法识别的混乱,它就值得。

你总是要担心并发问题,但我认为这两种设计都是如此。

你有300多个课程,你会增加更多?你担心并发?当然并发很重要,但你必须首先驯服你的设计。

答案 1 :(得分:0)

  1. 确保不通过从请求中获取参数并注入查询来创建SQL注入问题。
  2. 您应该为所有产品使用相同的类。如果某些产品具有其他功能,请使用属性映射(首选),或使用继承从主产品类派生子产品。
  3. 对于所有产品使用一个类,没有任何并发​​问题。您只能从多个线程使用类的实例(不是类,而是类的实例)时遇到并发问题。
  4. 你的方式,你会有超过300个比较(if(parameter.equals(product1){...})。更通用的方法是预填充哈希映射并使用查找值参数为关键:

    Map&lt; String,String&gt; tableNameMap = new HashMap&lt; String,String&gt;(); tableNameMap.put( “参数1”, “表1”);
    tableNameMap.put( “param2的”, “表2”);

    String paramValue = request.getParameter(“test”);
    String tableName = tableNameMap.get(paramValue);