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

    代码;

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>

     <session-factory>
      <property name="dialect">
       org.hibernate.dialect.MySQLDialect
      </property>
      <property name="connection.url">
       jdbc:mysql://localhost:3307/users
      </property>
      <property name="connection.username">root</property>
      <property name="connection.password">root</property>
      <property name="connection.driver_class">
       com.mysql.jdbc.Driver
      </property>
      <property name="myeclipse.connection.profile">
       mysqlusers
      </property>
      <property name="format_sql">true</property>
      <property name="show_sql">true</property>
      <property name="current_session_context_class">thread</property>
      <mapping class="com.b510.examples.Product" />
      <mapping class="com.b510.examples.Category" />

     </session-factory>

    </hibernate-configuration>

    利用Hibernate的逆向工程生成:

    Category.java      and           Product.java   

    Category.java

    package com.b510.examples;

    import java.util.HashSet;
    import java.util.Set;

    // 标准注解

    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;

    //增加的注解

    import org.hibernate.annotations.GenericGenerator;

    //当前的类是一个持久化类,是Category这个类。他映射了一个表category。所对应的 数据库是users
    //这句:@Table(name = "category", catalog = "users")  可以省略
    @Entity
    @Table(name = "category", catalog = "users")

    public class Category implements java.io.Serializable {

     private static final long serialVersionUID = 3240281547213597385L;
     private Integer id;
     private String name;
     private String description;
     private Set<Product> products = new HashSet<Product>(0);

     
     public Category() {
     }

     public Category(String name, String description, Set<Product> products) {
      this.name = name;
      this.description = description;
      this.products = products;
     }

     // 主键 :@Id    主键生成方式:strategy = "increment"
     //映射表中id这个字段,不能为空,并且是唯一的
     @GenericGenerator(name = "generator", strategy = "increment")
     @Id
     @GeneratedValue(generator = "generator")
     @Column(name = "id", unique = true, nullable = false)
     public Integer getId() {
      return this.id;
     }

     public void setId(Integer id) {
      this.id = id;
     }

     //映射表中name这个字段 ,长度是500
     @Column(name = "name", length = 500)
     public String getName() {
      return this.name;
     }

     public void setName(String name) {
      this.name = name;
     }
     
     //映射表中description这个字段 ,长度是500
     @Column(name = "description", length = 500)
     public String getDescription() {
      return this.description;
     }

     public void setDescription(String description) {
      this.description = description;
     }

     //级联操作:cascade = CascadeType.ALL
     //延迟加载:fetch = FetchType.LAZY
     //映射:mappedBy = "category"
     //一对多方式
     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "category")
     public Set<Product> getProducts() {
      return this.products;
     }

     public void setProducts(Set<Product> products) {
      this.products = products;
     }

    }

    Product.java

    代码:

    package com.b510.examples;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    import org.hibernate.annotations.GenericGenerator;


    @Entity
    @Table(name = "product", catalog = "users")
    public class Product implements java.io.Serializable {

     private static final long serialVersionUID = -1546206493725028472L;
     private Integer id;
     private Category category;
     private String name;
     private String price;
     private String descripton;

     
     public Product() {
     }

     public Product(Category category, String name, String price,
       String descripton) {
      this.category = category;
      this.name = name;
      this.price = price;
      this.descripton = descripton;
     }
     
     @GenericGenerator(name = "generator", strategy = "increment")
     @Id
     @GeneratedValue(generator = "generator")
     @Column(name = "id", unique = true, nullable = false)
     public Integer getId() {
      return this.id;
     }

     public void setId(Integer id) {
      this.id = id;
     }

     //延迟加载:多对一方式
     //关联信息:外键name = "category_id"
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "category_id")
     public Category getCategory() {
      return this.category;
     }

     public void setCategory(Category category) {
      this.category = category;
     }

     @Column(name = "name", length = 500)
     public String getName() {
      return this.name;
     }

     public void setName(String name) {
      this.name = name;
     }

     @Column(name = "price", length = 10)
     public String getPrice() {
      return this.price;
     }

     public void setPrice(String price) {
      this.price = price;
     }

     @Column(name = "descripton", length = 500)
     public String getDescripton() {
      return this.descripton;
     }

     public void setDescripton(String descripton) {
      this.descripton = descripton;
     }

    }

    测试代码:

    HibernateTest.java

    代码:

    /**
     * 
     */
    package com.b510.examples;

    import java.util.Set;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.cfg.Configuration;

    /**
     *
     * @author XHW
     *
     * @date 2011-7-20
     *
     */
    public class HibernateTest {

     public static void main(String[] args) {
      HibernateTest test=new HibernateTest();
      test.add();
      test.find();
     }
     public void add(){
     Configuration config=new AnnotationConfiguration();
     config.configure();
     SessionFactory sessionFactory=config.buildSessionFactory();
     Session session=sessionFactory.getCurrentSession();
     session.beginTransaction();
     Category c=(Category)session.get(Category.class, 5);
     
     Product p=new Product();
     p.setName("计算机科学与技术");
     p.setPrice("123");
     p.setDescripton("计算机科学与技术,好啊,真是红啊");
     
     p.setCategory(c);
     c.getProducts().add(p);
     
     session.save(p);
     session.getTransaction().commit();
     }
     
     
     public void find(){
      Configuration config=new AnnotationConfiguration();
      config.configure();
      SessionFactory sessionFactory=config.buildSessionFactory();
      Session session=sessionFactory.getCurrentSession();
      session.beginTransaction();
      Category c=(Category)session.get(Category.class, 5);
       System.out.println("id: "+c.getId()+"  name:"+c.getName());
       Set<Product> p=c.getProducts();
       for(Product product:p){
        System.out.println("id:"+product.getId()+"  name:"+product.getName()+"  description:"+product.getDescripton());
       }
       session.getTransaction().commit();
     }
    }

    运行效果:

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
    log4j:WARN Please initialize the log4j system properly.
    Hibernate: 
        select
            category0_.id as id1_0_,
            category0_.description as descript2_1_0_,
            category0_.name as name1_0_ 
        from
            users.category category0_ 
        where
            category0_.id=?
    Hibernate: 
        select
            products0_.category_id as category5_1_,
            products0_.id as id1_,
            products0_.id as id0_0_,
            products0_.category_id as category5_0_0_,
            products0_.descripton as descripton0_0_,
            products0_.name as name0_0_,
            products0_.price as price0_0_ 
        from
            users.product products0_ 
        where
            products0_.category_id=?
    Hibernate: 
        select
            max(id) 
        from
            product
    Hibernate: 
        insert 
        into
            users.product
            (category_id, descripton, name, price, id) 
        values
            (?, ?, ?, ?, ?)
    Hibernate: 
        select
            category0_.id as id5_0_,
            category0_.description as descript2_5_0_,
            category0_.name as name5_0_ 
        from
            users.category category0_ 
        where
            category0_.id=?
    id: 5  name:xml33
    Hibernate: 
        select
            products0_.category_id as category5_1_,
            products0_.id as id1_,
            products0_.id as id4_0_,
            products0_.category_id as category5_4_0_,
            products0_.descripton as descripton4_0_,
            products0_.name as name4_0_,
            products0_.price as price4_0_ 
        from
            users.product products0_ 
        where
            products0_.category_id=?
    id:9  name:计算机科学与技术  description:计算机科学与技术,好啊,真是红啊

  • 相关阅读:
    观察者模式(Observer)
    外观模式(三层解耦)
    建造者模式(Builder)
    简单工厂
    单例模式(Winform窗体的实现)
    20180213 字符串spilt方法,字符串打包zip方法
    20180212第一发:Python与Json编码解码举例
    Eclipse插件Fat Jar
    java学习之浅谈多线程4SwingWorker
    Android SDK manager 闪退
  • 原文地址:https://www.cnblogs.com/chenying99/p/2476664.html
Copyright © 2011-2022 走看看