• Hibernate Annotation (Hibernate 注解)


    进入:http://www.hibernate.org

    说明文档:

    英文:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

    中文:http://docs.jboss.org/hibernate/annotations/3.4/reference/zh_cn/html_single/

    下载:hibernate annotation 3.4.0 GA

    得到:hibernate-annotations.jar

       hibernate-commons-annotation.jar

       ejb3-persistence.jar

    数据库:mysql

    category表:id,name,description       <Pk>id

    product表:id,name ,price, description ,category_id                  <pk>id  <fk>category_id

    新建java project项目:

    Add Hibernate Capabilities

    hibernate.cfg.xml

     1 <?xml version='1.0' encoding='UTF-8'?>
     2 <!DOCTYPE hibernate-configuration PUBLIC
     3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     5 
     6 <!-- Generated by MyEclipse Hibernate Tools.                   -->
     7 <hibernate-configuration>
     8 
     9  <session-factory>
    10   <property name="dialect">
    11    org.hibernate.dialect.MySQLDialect
    12   </property>
    13   <property name="connection.url">
    14    jdbc:mysql://localhost:3307/users
    15   </property>
    16   <property name="connection.username">root</property>
    17   <property name="connection.password">root</property>
    18   <property name="connection.driver_class">
    19    com.mysql.jdbc.Driver
    20   </property>
    21   <property name="myeclipse.connection.profile">
    22    mysqlusers
    23   </property>
    24   <property name="format_sql">true</property>
    25   <property name="show_sql">true</property>
    26   <property name="current_session_context_class">thread</property>
    27   <mapping class="com.b510.examples.Product" />
    28   <mapping class="com.b510.examples.Category" />
    29 
    30  </session-factory>
    31 
    32 </hibernate-configuration>

    利用Hibernate的逆向工程生成:

    Category.java      and           Product.java   

    Category.java

     1 package com.b510.examples;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 // 标准注解
     7 
     8 import javax.persistence.CascadeType;
     9 import javax.persistence.Column;
    10 import javax.persistence.Entity;
    11 import javax.persistence.FetchType;
    12 import javax.persistence.GeneratedValue;
    13 import javax.persistence.Id;
    14 import javax.persistence.OneToMany;
    15 import javax.persistence.Table;
    16 
    17 //增加的注解
    18 
    19 import org.hibernate.annotations.GenericGenerator;
    20 
    21 //当前的类是一个持久化类,是Category这个类。他映射了一个表category。所对应的 数据库是users
    22 //这句:@Table(name = "category", catalog = "users")  可以省略
    23 @Entity
    24 @Table(name = "category", catalog = "users")
    25 
    26 public class Category implements java.io.Serializable {
    27 
    28  private static final long serialVersionUID = 3240281547213597385L;
    29  private Integer id;
    30  private String name;
    31  private String description;
    32  private Set<Product> products = new HashSet<Product>(0);
    33 
    34  
    35  public Category() {
    36  }
    37 
    38  public Category(String name, String description, Set<Product> products) {
    39   this.name = name;
    40   this.description = description;
    41   this.products = products;
    42  }
    43 
    44  // 主键 :@Id    主键生成方式:strategy = "increment"
    45  //映射表中id这个字段,不能为空,并且是唯一的
    46  @GenericGenerator(name = "generator", strategy = "increment")
    47  @Id
    48  @GeneratedValue(generator = "generator")
    49  @Column(name = "id", unique = true, nullable = false)
    50  public Integer getId() {
    51   return this.id;
    52  }
    53 
    54  public void setId(Integer id) {
    55   this.id = id;
    56  }
    57 
    58  //映射表中name这个字段 ,长度是500
    59  @Column(name = "name", length = 500)
    60  public String getName() {
    61   return this.name;
    62  }
    63 
    64  public void setName(String name) {
    65   this.name = name;
    66  }
    67  
    68  //映射表中description这个字段 ,长度是500
    69  @Column(name = "description", length = 500)
    70  public String getDescription() {
    71   return this.description;
    72  }
    73 
    74  public void setDescription(String description) {
    75   this.description = description;
    76  }
    77 
    78  //级联操作:cascade = CascadeType.ALL
    79  //延迟加载:fetch = FetchType.LAZY
    80  //映射:mappedBy = "category"
    81  //一对多方式
    82  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "category")
    83  public Set<Product> getProducts() {
    84   return this.products;
    85  }
    86 
    87  public void setProducts(Set<Product> products) {
    88   this.products = products;
    89  }
    90 
    91 }

    Product.java

     1 package com.b510.examples;
     2 
     3 import javax.persistence.Column;
     4 import javax.persistence.Entity;
     5 import javax.persistence.FetchType;
     6 import javax.persistence.GeneratedValue;
     7 import javax.persistence.Id;
     8 import javax.persistence.JoinColumn;
     9 import javax.persistence.ManyToOne;
    10 import javax.persistence.Table;
    11 import org.hibernate.annotations.GenericGenerator;
    12 
    13 
    14 @Entity
    15 @Table(name = "product", catalog = "users")
    16 public class Product implements java.io.Serializable {
    17 
    18  private static final long serialVersionUID = -1546206493725028472L;
    19  private Integer id;
    20  private Category category;
    21  private String name;
    22  private String price;
    23  private String descripton;
    24 
    25  
    26  public Product() {
    27  }
    28 
    29  public Product(Category category, String name, String price,
    30    String descripton) {
    31   this.category = category;
    32   this.name = name;
    33   this.price = price;
    34   this.descripton = descripton;
    35  }
    36  
    37  @GenericGenerator(name = "generator", strategy = "increment")
    38  @Id
    39  @GeneratedValue(generator = "generator")
    40  @Column(name = "id", unique = true, nullable = false)
    41  public Integer getId() {
    42   return this.id;
    43  }
    44 
    45  public void setId(Integer id) {
    46   this.id = id;
    47  }
    48 
    49  //延迟加载:多对一方式
    50  //关联信息:外键name = "category_id"
    51  @ManyToOne(fetch = FetchType.LAZY)
    52  @JoinColumn(name = "category_id")
    53  public Category getCategory() {
    54   return this.category;
    55  }
    56 
    57  public void setCategory(Category category) {
    58   this.category = category;
    59  }
    60 
    61  @Column(name = "name", length = 500)
    62  public String getName() {
    63   return this.name;
    64  }
    65 
    66  public void setName(String name) {
    67   this.name = name;
    68  }
    69 
    70  @Column(name = "price", length = 10)
    71  public String getPrice() {
    72   return this.price;
    73  }
    74 
    75  public void setPrice(String price) {
    76   this.price = price;
    77  }
    78 
    79  @Column(name = "descripton", length = 500)
    80  public String getDescripton() {
    81   return this.descripton;
    82  }
    83 
    84  public void setDescripton(String descripton) {
    85   this.descripton = descripton;
    86  }
    87 
    88 }

    测试代码:

    HibernateTest.java

     1 /**
     2  * 
     3  */
     4 package com.b510.examples;
     5 
     6 import java.util.Set;
     7 
     8 import org.hibernate.Session;
     9 import org.hibernate.SessionFactory;
    10 import org.hibernate.cfg.AnnotationConfiguration;
    11 import org.hibernate.cfg.Configuration;
    12 
    13 /**
    14  *
    15  * @author XHW
    16  *
    17  * @date 2011-7-20
    18  *
    19  */
    20 public class HibernateTest {
    21 
    22  public static void main(String[] args) {
    23   HibernateTest test=new HibernateTest();
    24   test.add();
    25   test.find();
    26  }
    27  public void add(){
    28  Configuration config=new AnnotationConfiguration();
    29  config.configure();
    30  SessionFactory sessionFactory=config.buildSessionFactory();
    31  Session session=sessionFactory.getCurrentSession();
    32  session.beginTransaction();
    33  Category c=(Category)session.get(Category.class, 5);
    34  
    35  Product p=new Product();
    36  p.setName("计算机科学与技术");
    37  p.setPrice("123");
    38  p.setDescripton("计算机科学与技术,好啊,真是红啊");
    39  
    40  p.setCategory(c);
    41  c.getProducts().add(p);
    42  
    43  session.save(p);
    44  session.getTransaction().commit();
    45  }
    46  
    47  
    48  public void find(){
    49   Configuration config=new AnnotationConfiguration();
    50   config.configure();
    51   SessionFactory sessionFactory=config.buildSessionFactory();
    52   Session session=sessionFactory.getCurrentSession();
    53   session.beginTransaction();
    54   Category c=(Category)session.get(Category.class, 5);
    55    System.out.println("id: "+c.getId()+"  name:"+c.getName());
    56    Set<Product> p=c.getProducts();
    57    for(Product product:p){
    58     System.out.println("id:"+product.getId()+"  name:"+product.getName()+"  description:"+product.getDescripton());
    59    }
    60    session.getTransaction().commit();
    61  }
    62 }

    运行效果:

     1 log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
     2 log4j:WARN Please initialize the log4j system properly.
     3 Hibernate: 
     4     select
     5         category0_.id as id1_0_,
     6         category0_.description as descript2_1_0_,
     7         category0_.name as name1_0_ 
     8     from
     9         users.category category0_ 
    10     where
    11         category0_.id=?
    12 Hibernate: 
    13     select
    14         products0_.category_id as category5_1_,
    15         products0_.id as id1_,
    16         products0_.id as id0_0_,
    17         products0_.category_id as category5_0_0_,
    18         products0_.descripton as descripton0_0_,
    19         products0_.name as name0_0_,
    20         products0_.price as price0_0_ 
    21     from
    22         users.product products0_ 
    23     where
    24         products0_.category_id=?
    25 Hibernate: 
    26     select
    27         max(id) 
    28     from
    29         product
    30 Hibernate: 
    31     insert 
    32     into
    33         users.product
    34         (category_id, descripton, name, price, id) 
    35     values
    36         (?, ?, ?, ?, ?)
    37 Hibernate: 
    38     select
    39         category0_.id as id5_0_,
    40         category0_.description as descript2_5_0_,
    41         category0_.name as name5_0_ 
    42     from
    43         users.category category0_ 
    44     where
    45         category0_.id=?
    46 id: 5  name:xml33
    47 Hibernate: 
    48     select
    49         products0_.category_id as category5_1_,
    50         products0_.id as id1_,
    51         products0_.id as id4_0_,
    52         products0_.category_id as category5_4_0_,
    53         products0_.descripton as descripton4_0_,
    54         products0_.name as name4_0_,
    55         products0_.price as price4_0_ 
    56     from
    57         users.product products0_ 
    58     where
    59         products0_.category_id=?
    60 id:9  name:计算机科学与技术  description:计算机科学与技术,好啊,真是红啊

    ========================================================

    More reading,and english is important.

    I'm Hongten

     

    大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
    Hongten博客排名在100名以内。粉丝过千。
    Hongten出品,必是精品。

    E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

    ========================================================

  • 相关阅读:
    整合Spring与Hibernate
    基本正则
    vue权限指令
    vue数字动态转换大写
    element ui 表格动态生成多级表头、一级表头,可无限嵌套
    vuex和vue-router全家桶
    element表格内容过多title提示
    HBuilder打包App方法
    mui底部选项卡切换页面
    mui框架的地步选项卡公用加载对应页面demo
  • 原文地址:https://www.cnblogs.com/hongten/p/java_hibernate_annotation.html
Copyright © 2020-2023  润新知