Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更好的方法是在java中将表名从Servlet传递到bean类_Java_Jsp_Servlets_Javabeans - Fatal编程技术网

更好的方法是在java中将表名从Servlet传递到bean类

更好的方法是在java中将表名从Servlet传递到bean类,java,jsp,servlets,javabeans,Java,Jsp,Servlets,Javabeans,我有一堆接近100个的产品,每个产品在数据库中都有自己的表,为此我为每个产品实现了搜索功能,现在我考虑重用代码,因为除了少数参数和表名,rest逻辑都保持不变 字符串测试=request.getParametertest 测试是包含产品信息的下拉列表 我当时的想法是 if ( test.equals(ProductA)) { List<searchbean> list = dao.fetchDBRecords(tableA,other parameters of

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

字符串测试=request.getParametertest

测试是包含产品信息的下拉列表

我当时的想法是

if ( test.equals(ProductA)) {
          List<searchbean> list = dao.fetchDBRecords(tableA,other parameters of form);
        }
列表中的参数将传递给sql查询

现在我的问题是,对多个产品使用一个类是否有意义,或者对每个产品使用单独的类是否更有意义

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

我不喜欢每个产品的类或每个产品模型的表。您不应该在每次添加或删除产品时都修改代码。你将不得不抽象地思考这个问题,但只要你不走得太远,不造成无法识别的混乱,这是值得的

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

你有300多个课程,你还打算增加更多吗?你担心并发性?当然,并发性很重要,但您必须首先驯服您的设计

通过从请求中获取参数并注入到查询中,确保不会产生SQL注入问题。 您应该对所有产品使用相同的类。如果某些产品具有其他功能,请首选使用属性映射,或使用继承从主产品类派生子产品。 对所有产品使用一个类不会产生任何并发问题。使用一个类的实例(不是一个类而是多个线程中的一个类的实例)只会产生并发问题。 按照您的操作方式,如果parameter.equalsproduct1{…},您将拥有300多个可比项。更通用的方法是预填充哈希映射并使用参数作为键查找值:

Map tableNameMap=新HashMap; tableNameMap.putparam1,表1; tableNameMap.putparam2,表2

String paramValue=request.getParametertest; 字符串tableName=tableNameMap.getparamValue


如果我正确理解了这个问题,我们就不能在这种情况下实现继承吗。就像拥有一个具有某些命令行为的超级产品类,并使其他产品进行扩展??您可以这样做,但这仍然意味着在添加产品时创建一个新的子类。我认为很容易想象一个通用的产品类和支持模式会很好地工作。是的,但是如果所有的产品不共享相同的行为呢??您将如何在一个类中实现这一点。。我只是好奇:我敢肯定,当他们进入客户手中时,他们的行为并不相同,但就他们在商业中出现的各种系统而言,他们的行为完全相同:库存、购买、订购、运输等。你不相信亚马逊为每种产品都有一个新的表,是吗?我不确定亚马逊是否为每种产品都提供了新的表格,但如果我们共享一个表格并为所有产品提供了通用表格,那么很明显,我们正在创建一种依赖关系,这会阻碍未来的增长,并会在我们想为这些产品添加额外功能时产生问题,当然,我们总是有办法创建一个桥接表并将其链接到主表。但是这种方法有可能会溢出到其他产品。谢谢Tony,让我重构它并为它创建一个映射。你也可以详细说明你的第2部分的属性映射。第1部分我会注意的,第3点就是我所想的。也许我需要测试一下,看看它是如何运行的。我刚刚实现了你的建议,现在我不需要接近100条if-then语句。谢谢Tony.property映射:与其使用表列作为附加属性,不如创建表propertiesobject\u id、name、value。在java中,它是属性的映射,例如颜色、红色。width,2.5等…我做了同样的事情,但我的缺点是,每个产品的表定义不同。因此我不能重用DAO类。也许Duffy是对的,有时设计问题真的很麻烦。通用表定义可以节省很多,但它涉及到业务和扩展性方面的权衡。也许我会慢慢地解决这个问题。现在它已经开始运行了。