Hibernate最佳实践(一)

编写细粒度的类并通过<component>标签做映射。
    使用Adress类涵盖street,suburb,state,postcode属性。这样有利于代码重用并能够简化重构。

在持久类中声明identifier属性。
    Hibernate中identifier属性是可选的,但是有很多理由要求我们使用他们。我们推荐使用“合成”主键(即使用自动生成,没有任何业务含义的字段)。

确定自然主键。
    为所有的实例确定自然主键,并将他们映射到<natural-id>标签。实现equals()和hashCode()方法时比较组成自然主键的属性。

将每个类的映射放在自己的文件里。
    不要使用单一的映射文件。com.eg.Foo类的映射放在com/eg/Foo.hbm.xml文件里。这样做在团队开发环境中尤其明智。

将映射文件作为资源加载。
    将映射文件与他们所映射的类部署在一起。

考虑外部查询字符。

    如果你调用了非ANSI标准的SQL函数时这是一个很好的实现。将外部查询字符放在映射文件里能够使你的应用更加方便。

使用约束变量。

    就像在JDBC中一样,用“?”代替非常量。不要在查询中使用字符串拼接来约束变量的值!如果想做的更好,可以考虑在查询中使用命名的参数。

不要管理自己JDBC连接。

    Hibernate由应用管理JDBC连接。这一做法应视为最后手段。如果你不能使用内置的连接,可以考虑自己实现org.hibernate.connection.ConnectionProvider类。

考虑使用自定义类型。

    假设你有一个Java类型,比如库中的类,它需要被持久化但是不能提供作为组件的映射访问。你可以考虑实现org.hibernate.UserType。这个方法可以让你在自己实现的代码和Hibernate类型中自由转换。

在瓶颈点手工编写JDBC代码。

    在系统性能的关键点,很多操作直接用JDBC可能更有效。但是请在你明确知道的瓶颈点使用JDBC,并且不要以为直接使用JDBC必然更快。如果你直接使用JDBC,那么打开一个Hibernate的Session连接用它的JDBC连接是值得的。这样,你仍可以应用相同的事务策略和底层连接供应商。

了解Session类的刷新。

    Session不定时的与数据库同步持久类的状态。如果这个过程发生的太频繁可能影响实现。你有时可能需要通过禁用自动刷新来减少不必要的刷新,甚至需要在特定交易中改变查询和其他操作的顺序。

在三层架构中考虑使用超类。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值