当然,这可能对你有用。不过,对于这个问题的未来读者,我会更完整一点:
但是您编写的许多查询可能是特定于数据库的,或者依赖于某些关键字才能有效。以一个常见的查询为例。您想列出数据库中的所有产品,但一次向用户显示 10 个:
MySQL:
select * from products LIMIT 0,10
然后对于接下来的 10 行:
select * from products LIMIT 10,10
等等
太棒了,因此用户可以将 MySQL 用于数据库。那么如果他们使用另一个免费且非常流行的数据库 postgres 怎么办?该查询不起作用:
SELECT * FROM product LIMIT 10 OFFSET 10
所以你的代码不像你想象的那样可移植。
解决此问题的一种方法是为您计划执行的所有查询/访问创建自己的接口(接口查询,接口访问),然后根据数据库方言(MySQL,postgres)创建一个可以实例化的查询工厂等)并创建 MySQLQueryImpl 和 PostGresQueryImpl(均实现 Query 接口)。
不幸的是,您必须对某些数据库调用进行两次编码,或者将它们自己移到属性文件中。您还可以将查询因子设计为从属性文件中实例化(就像您最初想要的那样),并允许将来其他用户实现他们自己的查询,因此可扩展性就在那里,您不必自己做所有事情。
或者...
另一种选择,可能更优雅和防错(嗯......也许)是让别人为你做这件事。Hibernate是一个非常常用的工具,可以为您抽象出数据库读/写,并且可以根据需要配置为使用不同的数据库,只有它具有多年的经验和错误修复。这不是最容易学习的东西(对于复杂的查询和连接等),但对于基本模型和到数据库的映射,它将为您提供您想要的一切以及更多,包括非常轻松和懒惰地打开/关闭缓存的能力加载数据,这样您就不会引入数千条您不会使用的记录。创建和强化这样的系统需要很长时间。