zoukankan      html  css  js  c++  java
  • 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:计算机科学与技术,好啊,真是红啊
    复制代码
    出处:http://www.cnblogs.com/hongten/archive/2011/07/20/java_hibernate_annotation.html
     
  • 相关阅读:
    HDU Railroad (记忆化)
    HDU 1227 Fast Food
    HDU 3008 Warcraft
    asp vbscript 检测客户端浏览器和操作系统(也可以易于升级到ASP.NET)
    Csharp 讀取大文本文件數據到DataTable中,大批量插入到數據庫中
    csharp 在万年历中计算显示农历日子出错
    csharp create ICS file extension
    CSS DIV Shadow
    DataTable search keyword
    User select fontface/color/size/backgroundColor设置 字体,颜色,大小,背景色兼容主流浏览器
  • 原文地址:https://www.cnblogs.com/cyh123/p/3169866.html
Copyright © 2011-2022 走看看