• Hibernate中注解的开发


             在利用注解开发数据库持久层曾经,须要学习一个规范JPA(Java Persistence API),这也是SUN公司提出的数据库的持久化规范。

    就类似于JDBC。Servlet,JSP等规范一样。而Hibernate框架就实现了此规范,我们能够通过注解和配置文件来实现此规范。前边的学习都是建立在配置文件的基础上,而注解开发如今也处于一种趋势。毕竟它大大提高了开发速度。

     

            看一下注解在Hibernate框架中的开发知识。

     

            一。首先须要导入支持注解开发的jar包:

    hibernate-annotations.jar

    hibernate-commons-annotations.jar (Hibernate中支持注解开发的jar包)

     

    ejb3-persistence.jar(API规范的jar包)

     

    slf4j/slf4j-api-1.5.0.jar

    slf4j-log4j12-1.5.0.jar

    log4j-1.2.15.jar  (支持日志输出的jar包。注意版本号的匹配)

     

            二。在Hibernate框架进行注解开发时,主要是取代实体和数据表的映射文件,而核心配置文件里的。数据库的连接等等,还是须要xml配置文件,进行配置的。先看一下Hibernate中经常使用的注解:

     

               1。@Entity : 表示当前的类为实体类,声明在类的前面。

    能够将当前类和数据库的表和字段进行关联映射。

     

               2。@Table:表示映射的表,声明在类的前面

     

               3,@Id:表示主键的映射,声明在主键的get方法前边,默认情况下主键利用assigned(用户提供)生成策略。假设想要设置API规范提供了四种主键生成策略:

    @GeneratedValue(strategy=GenerationType.AUTO)      相当于Hibernate框架的native主键生成策略

    @GeneratedValue(strategy=GenerationType.IDENTITY)  相当于Hibernate框架的identity主键生成策略。适用于MySQL,SQL Server

    @GeneratedValue(strategy=GenerationType.SEQUENCE)  相当于Hibernate框架的sequence主键生成策略,适用于Oracle,DB2

    @GeneratedValue(strategy=GenerationType.TABLE)     使用一张单表管理主键值。

             默认情况下API规范是不支持Hibernate框架中的uuid的主键生成策略,假如我们想要使用。须要我们进行添加主键生成器,例如以下:

    @GenericGenerator(name="hibernate-uuid",strategy="uuid")

    @GeneratedValue(generator="hibernate-uuid")

     

               4,@Column : 表示映射属性。和表的字段进行关联

     

               5。@ManyToOne : 表示映射关系中的多对一

     

               6。@JoinColumn : 表示外键映射属性,和表的外键字段进行关联

     

               7,@OneToMany : 表示映射关系中的一对多,这里须要注意,一对多时,外键的维护须要翻转交给多的一方进行维护,须要配置反转属性mappedBy,属性取值为多的一方的映射属性名称。相当于xml配置文件里的Inverse="true"。

     

               8,@OrderBy : 表示排序字段

     

               9,@Transient : 表示声明瞬时属性,不和数据库的字段发生关联,也就是没有表中列与之映射。

     

             等等吧,事实上我感觉这些属性和xml配置文件属性都是一一相应的。及时不一样。也会有与之类似的属性进行实现其功能,所以我们能够对照着使用。

    当然这里仅仅是一些经常使用的。当我们须要时还须要我们查看文档进行编写。

            

              三。看一个简单的利用主键开发的实体类吧,这里就不须要我们再编写配置文件了:

     

    @Entity  
    @Table(name="t_org")  
    public class Org {  
      
        private String id;  
        private String name;  
        private String code;  
        private String manager;  
        private String remark;  
        private String createtime;  
        private String updatetime;  
          
        private OrgType orgType;  
          
        private String pid;  
          
        @Transient  
        public String getPid() {  
            return pid;  
        }  
      
        public void setPid(String pid) {  
            this.pid = pid;  
        }  
      
        private Org parentOrg;  
          
        private Set<Org> childOrgSet ;  
      
        @Id  
        @GenericGenerator(name="hibernate-uuid", strategy="uuid")  
        @GeneratedValue(generator="hibernate-uuid")  
        public String getId() {  
            return id;  
        }  
      
        public void setId(String id) {  
            this.id = id;  
        }  
      
        public String getName() {  
            return name;  
        }  
      
        public void setName(String name) {  
            this.name = name;  
        }  
      
        public String getCode() {  
            return code;  
        }  
      
        public void setCode(String code) {  
            this.code = code;  
        }  
      
        public String getManager() {  
            return manager;  
        }  
      
        public void setManager(String manager) {  
            this.manager = manager;  
        }  
      
        public String getRemark() {  
            return remark;  
        }  
      
        public void setRemark(String remark) {  
            this.remark = remark;  
        }  
      
        @Column(updatable=false)  
        public String getCreatetime() {  
            return createtime;  
        }  
      
        public void setCreatetime(String createtime) {  
            this.createtime = createtime;  
        }  
      
        @Column(insertable=false)  
        public String getUpdatetime() {  
            return updatetime;  
        }  
      
        public void setUpdatetime(String updatetime) {  
            this.updatetime = updatetime;  
        }  
      
        @ManyToOne  
        @JoinColumn(name="orgTypeId")  
        public OrgType getOrgType() {  
            return orgType;  
        }  
      
        public void setOrgType(OrgType orgType) {  
            this.orgType = orgType;  
        }  
      
        @ManyToOne  
        @JoinColumn(name="pid", updatable=false)  
        public Org getParentOrg() {  
            return parentOrg;  
        }  
      
        public void setParentOrg(Org parentOrg) {  
            this.parentOrg = parentOrg;  
        }  
      
        @OneToMany(mappedBy="parentOrg")  
        @JoinColumn(name="pid")  
        @OrderBy("code")  
        public Set<Org> getChildOrgSet() {  
            return childOrgSet;  
        }  
      
        public void setChildOrgSet(Set<Org> childOrgSet) {  
            this.childOrgSet = childOrgSet;  
        }  
    }  


             四。当然用了注解的开发方式,我们的核心配置文件就须要我改动了,这里就须要Hibernate的AnnotationSessionFactoryBean工厂类了,

    <!-- Hibernate核心对象 -->  
        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
              <!--省略……-->  
             <!--指定进行了Hibernate注解开发的包。方便框架进行扫描设置-->  
             <property name="packagesToScan">  
                <list>  
                    <value>com/ljh/ppp/domain</value>  
                </list>  
            </property>  
        </bean>  

           这样Hibernate框架的注解开发基本上就算完成了,整体感觉是比較高效的。我们没写一个类一个方法,顺便将注解编写了,这样我们就不用专门用来编写映射文件了。掌握好注解的开发,在非常多时候能够大大提高我们的效率。当然还有其他框架的注解运用,后边总结。

  • 相关阅读:
    4--Python入门--Python数据集合类型--集合
    3--Python入门--Python数据集合类型--元组
    2--Python入门--Python数据集合类型--列表
    1--Python 入门--Python基础数据类型
    1--Testng功能简介
    2--JAVA+Maven+TestNG搭建接口测试框架搭建
    2--linux命令--查看磁盘空间
    登录功能测试总结
    在Linux环境下搭建Tomcat+mysql+jdk环境
    如何在Linux系统下挂载光盘
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6935310.html
Copyright © 2020-2023  润新知