设计:更新部分数据库记录的最佳方法是什么?
Design: What is the best approach to updating part of a database record?
此问题涉及最佳设计方法,而不是特定的技术技巧。我有一个数据库 table,其中包含系统用户的详细信息,即:用户名、密码、名字、姓氏(这些属性只能由管理员更改)。用户记录的其余部分包含地址、phone号码、手机号码等(这些属性只能由用户更改)。
因此我需要 2 个表单,一个 'admin' 表单和一个 'user' 表单,每个表单都有一组不同的 editable 字段,以及适当的基于角色的安全性来控制用法。
这里有两种我可以采用的方法:
方法 1. 每个表单都有自己的支持 bean,仅表示表单上的 editable 字段。在 'Save' 上,支持 bean 调用特定的 DAO 方法(例如 UpdateUser_Admin 或 UpdateUser_User)来执行用户记录的部分更新。因此,这种方法涉及 2 种形式、每种形式的支持 bean 和 DAO class.
中的 2 种方法。
方法 2. 和以前一样有 2 个表单,但是每个表单都通过使用 editable 字段的输入字段和非 edi[= 的隐藏字段来重新创建整个用户对象29=] 字段。两种形式都将使用表示所有用户属性的相同支持 bean。 DAO 中只需要一种方法 - 更新用户记录中的所有字段。
第二种方法对我来说似乎很有意义,但我是开发新手,如果我遗漏了什么,请读者提出建议,我将不胜感激。我已经考虑过将用户 table 拆分为 2 个单独的 table,但在这种情况下这不切实际。谢谢你的建议。
- 作为规则:不要创建只更新单个字段/属性的 DAO 方法。
- 不要将
User
实体拆分为 2 个表。
- 创建 DAO 是为了管理实体,因此 每个 class 使用一个 DAO,并且每个 DAO 只编写一个更新方法。
如果您不确定是否拥有完整的实体,请在服务层中执行此步骤
- 从表单中获取数据(至少要更新 id 和字段)
- 从数据库中检索
Object
代表实体(例如 DAO::readById(id)
)
- 在java
Object
中更新您需要的字段
致电DAO::update
注意: 我省略了将 DTO
填充到 DBO
个对象
此问题涉及最佳设计方法,而不是特定的技术技巧。我有一个数据库 table,其中包含系统用户的详细信息,即:用户名、密码、名字、姓氏(这些属性只能由管理员更改)。用户记录的其余部分包含地址、phone号码、手机号码等(这些属性只能由用户更改)。
因此我需要 2 个表单,一个 'admin' 表单和一个 'user' 表单,每个表单都有一组不同的 editable 字段,以及适当的基于角色的安全性来控制用法。
这里有两种我可以采用的方法:
方法 1. 每个表单都有自己的支持 bean,仅表示表单上的 editable 字段。在 'Save' 上,支持 bean 调用特定的 DAO 方法(例如 UpdateUser_Admin 或 UpdateUser_User)来执行用户记录的部分更新。因此,这种方法涉及 2 种形式、每种形式的支持 bean 和 DAO class.
中的 2 种方法。方法 2. 和以前一样有 2 个表单,但是每个表单都通过使用 editable 字段的输入字段和非 edi[= 的隐藏字段来重新创建整个用户对象29=] 字段。两种形式都将使用表示所有用户属性的相同支持 bean。 DAO 中只需要一种方法 - 更新用户记录中的所有字段。
第二种方法对我来说似乎很有意义,但我是开发新手,如果我遗漏了什么,请读者提出建议,我将不胜感激。我已经考虑过将用户 table 拆分为 2 个单独的 table,但在这种情况下这不切实际。谢谢你的建议。
- 作为规则:不要创建只更新单个字段/属性的 DAO 方法。
- 不要将
User
实体拆分为 2 个表。 - 创建 DAO 是为了管理实体,因此 每个 class 使用一个 DAO,并且每个 DAO 只编写一个更新方法。
如果您不确定是否拥有完整的实体,请在服务层中执行此步骤
- 从表单中获取数据(至少要更新 id 和字段)
- 从数据库中检索
Object
代表实体(例如DAO::readById(id)
) - 在java
Object
中更新您需要的字段
致电
DAO::update
注意: 我省略了将
DTO
填充到DBO
个对象