Hibernate注解

       前一篇文章说了下Spring的注解,下面继续聊下Hibernate的注解。
       用过Hibernate的同学应该都知道,Hibernate的配置文件其实蛮麻烦的,虽然我们可以通过MyEclipse等集成环境可以自动生成,但是当项目大了,文件那么多就显得很笨重了。所以在最近版本的Hibernate中,就出现了一种基于Java5注释的方法。借助Hibernate Annotation库,可以通过对实体类注释的方式摆脱繁琐的配置文件。也就是可以不用定义持久化类对应的 *.hbm.xml文件,直接以注解方式写入持久化类中实现。

1. 使用Hibernate注解的相关配置
  1. 第一步,环境与jar包:
    至少需要具备 Hibernate 3和Java 5。除了标准的 Hibernate JAR 和依赖项之外,还需要添加hibernate3.2.jar,hibernate-annotations- 3.3.0.jar,hibernate-commons-annotations.jar和ejb3-persistence.jar 。这样就可以使用hibernate的annotation了。
    注意:Hibernate注解使用了ejb JPA的注解,所以,下面安装配置hibernate annotation环境时,需要导入ejb的包。(他俩的关系就比如:JPA是接口,Hibernate注解是一个比较好的实现)
  2. XML的相关配置
    现在很多项目都会是用Spring框架,我在这里晒一个结合Spring的Hibernate配置,这里是在Spring的配置文件中配置的。

       
       
    1. <!-- 配置SessionFactoryBean -->
    2. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    3. <!--dataSource属性指定要用到的数据源,因此在Hibernate的核心配置文件中就无需再配置与数据库连接相关的属性-->
    4. <property name="dataSource" ref="xxDataSource" />
    5. <property name="hibernateProperties">
    6. <props>
    7. <!-- Hibernate基本配置 -->
    8. <!-- Hibernate对PostgreSQL数据库的方言支持-->
    9. <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
    10. <!--连接池大小-->
    11. <prop key="hibernate.connection.pool_size">10</prop>
    12. ....
    13. </props>
    14. </property>
    15. <!-- 加入使用注解的实体类 -->
    16. <property name="annotatedClasses">
    17. <list>
    18. <value>com.xx.xx(具体实体类路径)</value>
    19. <value>com.xx.xx(具体实体类路径)</value>
    20. ...
    21. </list>
    22. </property>
    23. <!-- 也可以用扫描的方式-->
    24. <property name="packagesToScan">
    25. <list>
    26. <value>com.onjava.modelplanes.domain.*</value>
    27. </list>
    28. </property>
    29. </bean>

    值得注意的一点就是:除了常用的Hibernate配置外,还需要对需要注解的实体类或者包进行配置。

    2. 一些开发常用的注解

    一般像一些比较复杂的注解,基本用的很少,比如持久化POJO类跟数据库表:一对多,多对多。这个就比较麻烦了,我们在企业的项目中宁愿选择新建一个其他的对象包含这两个实体,而不是做这么多复杂的配置。讲道理,完全用注解配置对于一些维护方面个人觉得稍微有一点影响。所以这里也就罗列一些简单的常用的注解:

  • 常用注解

       
       
    1. @Entity —— 注释声明该类为持久类。
    2. @Id —— 注解声明了该实体bean的标识属性(对应表中的主键)。
    3. @Table —— 注解声明了该实体bean映射指定的表(table),目录(catalog)和schema的名字
    4. @Temporal(TemporalType.TIMESTAMP)--声明时间格式
    5. @Transient --将忽略这些字段和属性,不用持久化到数据库.适用于,在当前的持久类中,某些属性不是用于映射到数据表,而是用于其它的业务逻辑需要,这时,须将这些属性进行transient的注解.否则系统会因映射不到数据表相应字段而出错.
    6. @Column —— 注解声明了属性到列的映射。该注解有如下的属性
    7. name 可选,列名(默认值是属性名)
    8. unique 可选,是否在该列上设置唯一约束(默认值false)
    9. nullable 可选,是否设置该列的值可以为空(默认值false)
    10. insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
    11. updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
    12. length 可选,列长度(默认值255)
    13. @GeneratedValue —— 注解声明了主键的生成策略。该注解有如下属性
    14. strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType. AUTO
    15. GenerationType.AUTO 主键由程序控制
    16. GenerationType.TABLE 使用一个特定的数据库表格来保存主键
    17. GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型)
    18. GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用)
    19. generator 指定生成主键使用的生成器(可能是orcale中的序列)。
    20. @SequenceGenerator —— 注解声明了一个数据库序列。该注解有如下属性
    21. name 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的“gernerator”值中
    22. sequenceName 表示生成策略用到的数据库序列名称。
    23. initialValue 表示主键初始值,默认为0.
    24. allocationSize 每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50.
    25. @GenericGenerator —— 注解声明了一个hibernate的主键生成策略。支持十三种策略。该注解有如下属性
    26. name 指定生成器名称
    27. strategy 指定具体生成器的类名(指定生成策略)。
    28. parameters 得到strategy指定的具体生成器所用到的参数。
  • 案例:
    这里拿项目中的一个实体类做下简单的描述,基本的用法呢也就这样,太复杂的不建议去配置。
 
 
  1. package com.hik.gcs.sysConfig.entity;
  2. import java.util.Date;
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.Id;
  6. import javax.persistence.Table;
  7. @Entity
  8. @Table(name="user_info")
  9. /* 配置Sequence生成器,name为生成器名称,sequenceName为数据中的序列名称 */
  10. @SequenceGenerator(name="s_user_info", allocationSize=1, initialValue=100,sequenceName="s__user_info")
  11. public class UserInfo {
  12. private Integer userId; //用户id
  13. private String userName;//用户名
  14. private String userPwd;//用户密码
  15. @Id
  16. @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "s_user_info")
  17. @Column(name = "user_id", unique = true, nullable = false)
  18. public Integer getUserId() {
  19. return userId;
  20. }
  21. public void setUserId(Integer userId) {
  22. this.userId = userId;
  23. }
  24. @Column(name = "user_name", unique = true, nullable = false)
  25. public String getUserName() {
  26. return userName;
  27. }
  28. public void setUserName(String userName) {
  29. this.userName = userName;
  30. }
  31. @Column(name = "user_pwd", nullable = true)
  32. public String getUserPwd() {
  33. return userPwd;
  34. }
  35. public void setUserPwd(String userPwd) {
  36. this.userPwd = userPwd;
  37. }
  38. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值