Java 插入数据库的最佳方法?
我有一个需求,我需要从对象中插入到数据库中,该对象包含关于表名和每个列的值的信息。 你能不能给我一些建议,说明用Hibernate实现这一点的最佳方法 Java类Java 插入数据库的最佳方法?,java,database,hibernate,design-patterns,Java,Database,Hibernate,Design Patterns,我有一个需求,我需要从对象中插入到数据库中,该对象包含关于表名和每个列的值的信息。 你能不能给我一些建议,说明用Hibernate实现这一点的最佳方法 Java类 public class InsertDataDetails { public String tableName; public List ColumnDetails> columnDetails; } public class ColumnDetails { public String columnName;
public class InsertDataDetails {
public String tableName;
public List ColumnDetails> columnDetails;
}
public class ColumnDetails {
public String columnName;
public String columnValue;
}
目前,我正在考虑创建一个本机查询,并使用Session.executequery执行它。然而,我正在寻找更好的设计,在那里我们可以使用DTO类和hibernate特性。所有这些建议都过于以关系为中心,过于简单化。我建议你放弃这种方法 您应该根据您试图解决的问题来考虑对象,而不是持久性。如果您想使用Hibernate,它可以将问题的OO表示映射到关系模式 我还建议您阅读Martin Fowler的著作,了解持久性问题通常是如何用对象来解决的 谷歌的数据访问对象。下面是一个简单的通用示例,它很容易通过Hibernate和extend实现:
package persistence;
public interface GenericDao<K, V> {
V find(K id);
List<V> find();
K insert(V value);
void update(V value);
void delete(V value);
}
包持久化;
公共接口通用DAO{
V find(K id);
列表查找();
K插入(V值);
无效更新(V值);
无效删除(V值);
}
关于对象的持久性问题已经解决了很多次,而且已经尽了最大的努力。您的建议并不代表对现有技术的有意义的改进。所有这些建议都过于以关系为中心,过于简单化。我建议你放弃这种方法 您应该根据您试图解决的问题来考虑对象,而不是持久性。如果您想使用Hibernate,它可以将问题的OO表示映射到关系模式 我还建议您阅读Martin Fowler的著作,了解持久性问题通常是如何用对象来解决的 谷歌的数据访问对象。下面是一个简单的通用示例,它很容易通过Hibernate和extend实现:
package persistence;
public interface GenericDao<K, V> {
V find(K id);
List<V> find();
K insert(V value);
void update(V value);
void delete(V value);
}
包持久化;
公共接口通用DAO{
V find(K id);
列表查找();
K插入(V值);
无效更新(V值);
无效删除(V值);
}
关于对象的持久性问题已经解决了很多次,而且已经尽了最大的努力。你提出的建议并不代表对最新技术的有意义的改进。虽然你的问题没有提到春天,但我认为值得提出这个项目 这为您提供了非常强大的持久性存储库,无需声明接口之外的任何实现 例如:
public interface UserRepository extends JpaRepository<User,Long> {}
然而,为了使用它,你需要遵循@Duffymo的建议,围绕它们所代表的对象而不是它们的持久性来建模你的类。虽然你的问题没有提到Spring,但我认为值得提出这个项目 这为您提供了非常强大的持久性存储库,无需声明接口之外的任何实现 例如:
public interface UserRepository extends JpaRepository<User,Long> {}
然而,为了使用它,你需要遵循@Duffymo的建议,围绕它们所代表的对象而不是它们的持久性来建模你的类。你文章的最后一段似乎过于苛刻,不符合堆栈溢出的精神。谢谢你的回复。我们已经为您提到的类似接口提供了一个实现类。问题是如何从InsertDataDetails类创建DTO对象();使用你的模型类。你文章的最后一段似乎过于苛刻,不符合堆栈溢出的精神。谢谢你的回复。我们已经为您提到的类似接口提供了一个实现类。问题是如何从InsertDataDetails类创建DTO对象();只需使用您的模型类即可。+1用于推荐Spring。这是一个很好的主意,但我敢打赌这肯定超出了计划的范围。谢谢你的建议。我们也在使用Spring,并且还有一个类似于您提到的实现类。请您解释一下“围绕它们所表示的对象而不是它们的持久性来建模您的类”。+1推荐Spring。这是一个很好的主意,但我敢打赌这肯定超出了计划的范围。谢谢你的建议。我们也在使用Spring,并且还有一个类似于您提到的实现类。请您解释一下“围绕类所表示的对象而不是它们的持久性来建模类”。