Hibernate 註解(總結)

1、什麼是註解?java

  解析:來源:Hibernate提供了Hibernate Annotations擴展包,它能夠替換複雜的hbm.xml文件( Annotations擴展包是hibernate-annotation-3.4.0GA.zip)數據庫

     做用:使得Hibernate程序的開發大大的簡化。利用註解後,可不用定義持久化類對應的*.hbm.xml,而直接以註解方式寫入持久化類的實現中。session

2、註解配置持久化類經常使用註解。app

      註解                   含義和做用              
  @Entity   將 一個類聲明爲一個持久化類
  @Id   聲明瞭持久化類的標識屬性(至關於數據表的主鍵)
  @GeneratedValue   定義標識屬性值的生成策略
  @Table   爲持久化類映射指定表(table)、目錄(catalog)和schema的名稱。默認值,持久化類名,不帶包名
  @UniqueConstraint   定義表的惟一約束
  @Lob   表示屬性將被持久化爲Blob或者Clob類型
  @Column   將屬性映射到列
  @Transient   忽略這些字段和屬性,不用持久化到數據庫

三.測試

註解配置對象關聯關係ui

(一)@OneToOne創建持久化類之間一對一關聯關係this

場景一:員工對應一張身份證編碼

Emp(員工表)spa

package cn.ljm.entity;

import javax.persistence.*;

/**
 * Created by win7 on 2017/2/16.
 */
@Entity
@Table(name = "Emp2")
public class Emp {

    private Integer eid;
    @Column
    private String ename;

    private Idcard idcard;
    @OneToOne
    @JoinColumn(name = "iid")
    public Idcard getIdcard() {
        return idcard;
    }

    public void setIdcard(Idcard idcard) {
        this.idcard = idcard;
    }
    @Id
    @GeneratedValue
    public Integer getEid() {
        return eid;
    }

    public void setEid(Integer eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }
}

Idcard類hibernate

關鍵代碼:

  //mappedBy 表示由craid所在的對象維護關聯關係

  @OneToOne(mappedBy="cardid")

 1 package cn.ljm.entity;
 2 
 3 import javax.persistence.*;
 4 
 5 /**
 6  * Created by win7 on 2017/2/16.
 7  */
 8 @Entity
 9 @Table(name = "Idcard2")
10 public class Idcard {
11     @Id
12     @GeneratedValue
13     private Integer iid;
14     private String inum;
15     @OneToOne(mappedBy = "idcard",cascade = CascadeType.ALL)
16     private Emp emp;
17 
18     public Integer getIid() {
19         return iid;
20     }
21 
22     public void setIid(Integer iid) {
23         this.iid = iid;
24     }
25 
26     public String getInum() {
27         return inum;
28     }
29 
30     public void setInum(String inum) {
31         this.inum = inum;
32     }
33 
34     public Emp getEmp() {
35         return emp;
36     }
37 
38     public void setEmp(Emp emp) {
39         this.emp = emp;
40     }
41 }

測試類

 1 import cn.ljm.entity.Emp;
 2 import cn.ljm.entity.Idcard;
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.Transaction;
 6 import org.hibernate.cfg.Configuration;
 7 import org.junit.After;
 8 import org.junit.Before;
 9 import org.junit.Test;
10 
11 /**
12  * Created by win7 on 2017/2/16.
13  */
14 public class test {
15     Configuration cfg;
16     Session session;
17     Transaction tx;
18     @Before
19     public void myBefore(){
20         cfg=new Configuration().configure("hibernate2.cfg.xml");
21         SessionFactory factory=cfg.buildSessionFactory();
22         session= factory.getCurrentSession();
23         tx= session.beginTransaction();
24     }
25     @After
26     public void myAfter(){
27         tx.commit();
28     }
29     @Test
30     public void test1(){
31         Emp emp=new Emp();
32         Idcard idcard=new Idcard();
33         emp.setEname("123");
34         idcard.setInum("321");
35         idcard.setEmp(emp);
36         emp.setIdcard(idcard);
37         session.save(idcard);
38     }
39 }

 

二)@OneToMang  and @MangToOne(創建雙向關聯一對多多對一)

場景一:一個部門對應多個員工;多個員工對應一個部門

Emp類

複製代碼
package cn.happy.entity.one;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * 1.2 員工類
 * @author happy
 *
 */
@Entity
@Table
public  class Emp {
    @Id
   private Integer empId;
    @Column
   private String empName;
   
   
   @ManyToOne
   @JoinColumn(name="deptNo")
   private Dept dept;
   
    public Integer getEmpId() {
        return empId;
    }
    public void setEmpId(Integer empId) {
        this.empId = empId;
    }
    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }
    public Dept getDept() {
        return dept;
    }
    public void setDept(Dept dept) {
        this.dept = dept;
    }
}
複製代碼

 Dept類

 

複製代碼
package cn.happy.entity.one;
import java.util.HashSet;
import java.util.Set;
  //jpa註解
import javassist.expr.NewArray;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.GenericGenerators;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 * 1.1 部門表    uuid  guid  全球惟一編碼    自增列    序列   32位16進制數
 * 
 * @author happy
 * 
 */
   //Dept部門類能夠被HIbernate進行管理
    @Entity
    @Table(name="Dept")
    public class Dept {
        @Id
        //引用生成器
        @GeneratedValue
        private Integer deptNo;
        
        //默認Hibernate管理
        private String deptName;

        @OneToMany(mappedBy="dept")
        @LazyCollection(LazyCollectionOption.FALSE)
        private Set<Emp> emps=new HashSet<Emp>();
        
        public Set<Emp> getEmps() {
            return emps;
        }

        public void setEmps(Set<Emp> emps) {
            this.emps = emps;
        }

        public Integer getDeptNo() {
            return deptNo;
        }
    
        public void setDeptNo(Integer deptNo) {
            this.deptNo = deptNo;
        }
    
        public String getDeptName() {
            return deptName;
        }
    
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
    
    }
複製代碼

 

測試類

複製代碼
package cn.happy.entity.one;


import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.happy.entity.Dept;
import cn.happy.entity.Emp;
import cn.happy.until.HibernateUtil;


public class mangoneonemang {

    public static void main(String[] args) {
        Session session = HibernateUtil.currentSession();
        Transaction tx = session.beginTransaction();
        
//        Dept dept = (Dept)session.load(Dept.class, 21);
//        
//        System.out.println(dept.getDeptName());
        
        
        Emp emp = (Emp)session.load(Emp.class, 21);
        
        System.out.println(emp.getEmpName());
        
        tx.commit();
        HibernateUtil.closeSession();
        
        
    }
    
    
    
}
複製代碼

 

 

 (三)@MangToMang(創建雙向關聯一對多多對一)

場景一:一個員工對應多個項目;一個項目對應多個員工(多對多的關聯)

Employee類

關鍵代碼解讀:

  //準備的第三張表就是員工和項目的關係

    @JoinTable(
            name="Myproemp",//表的名字
            joinColumns=@JoinColumn(name="empid"),//emp員工和第三表的外鍵關係
            inverseJoinColumns=@JoinColumn(name="proid")//Project員工和第三表的外鍵關係
    )
複製代碼
package entity;

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

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

/*
 * 員工表
 * */
@Entity
@Table(name="MyEmployee")
public class Employee {
    @Id
    @GeneratedValue
    private Integer empid;//員工編號
    private String empname;//員工名稱
    //準備一個項目集合
    @ManyToMany(cascade=CascadeType.ALL)
    
    //準備的第三張表就是員工和項目的關係
    @JoinTable(
            name="Myproemp",//表的名字
            joinColumns=@JoinColumn(name="empid"),//emp員工和第三表的外鍵關係
            inverseJoinColumns=@JoinColumn(name="proid")//Project員工和第三表的外鍵關係
    )
    private Set<Project> pros=new HashSet<Project>();
    
    
    public Set<Project> getPros() {
        return pros;
    }
    public void setPros(Set<Project> pros) {
        this.pros = pros;
    }
    
    public Employee(String empname) {
        super();
        this.empname = empname;
    }
    public Employee(Integer empid, String empname) {
        this.empid = empid;
        this.empname = empname;
    }
    public Employee() {
    }
    public Integer getEmpid() {
        return empid;
    }
    public void setEmpid(Integer empid) {
        this.empid = empid;
    }
    public String getEmpname() {
        return empname;
    }
    public void setEmpname(String empname) {
        this.empname = empname;
    }
    
}
複製代碼

 

project類

關鍵代碼:

   //聲明員工集合

  @ManyToMany(mappedBy="pros")//將控制權交由員工

複製代碼
package entity;

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

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

/*
 * 項目表
 * */
@Entity
@Table(name="MyProject")
public class Project {
    @Id
    @GeneratedValue
    private Integer proid;//項目編號
    private String proname;//項目名稱
    //聲明員工集合
//    @ManyToMany(mappedBy="pros")//將控制權交由員工
    @ManyToMany(mappedBy="pros")
    private Set<Employee> emps=new HashSet<Employee>();
    
    
    public Set<Employee> getEmps() {
        return emps;
    }
    public void setEmps(Set<Employee> emps) {
        this.emps = emps;
    }
    
    
    public Project(String proname) {
        this.proname = proname;
    }
    public Integer getProid() {
        return proid;
    }
    public void setProid(Integer proid) {
        this.proid = proid;
    }
    public String getProname() {
        return proname;
    }
    public void setProname(String proname) {
        this.proname = proname;
    }
    public Project(Integer proid, String proname) {
        this.proid = proid;
        this.proname = proname;
    }
    public Project() {
    }
}
複製代碼

 

測試類

複製代碼
package test;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import util.HibernateUtil;
import entity.Employee;
import entity.Project;
/*
 * 多對多關係
 * */
public class Test {
    public static void main(String[] args) {
        //查詢
        //select();
        //添加數據
        innesrt();
    }
    
    //添加數據
    public static void innesrt(){
        //獲取Session 
        Session session=HibernateUtil.currentSession();
        
        //開啓事務
        Transaction tx = session.beginTransaction();
        //構建兩個項目
        Project pro1=new Project("項目一");
        Project pro2=new Project("項目二");
        //構建多個員工
        Employee emp1=new Employee("巴黎的雨季");
        Employee emp2=new Employee("盛夏的果實");
    
        //關係交由員工處理
        
        emp1.getPros().add(pro1);
        emp1.getPros().add(pro2);
        
        emp2.getPros().add(pro2);
        
        //保存
        session.save(emp1);
        session.save(emp2);
    
        
        //提交事務
        tx.commit();
        //關閉鏈接
        HibernateUtil.closeSession();
    }
    
    
    //查詢數據
    public static void select(){
        //獲取Session 
        Session session=HibernateUtil.currentSession();
        
        //開啓事務
        Transaction tx = session.beginTransaction();
        String hql="from Project";
        List<Project> list = session.createQuery(hql).list();
        for (Project item : list) {
            System.out.println(item.getProname()+item.getProid());
            for (Employee emp : item.getEmps()) {
                System.out.println(emp.getEmpid()+emp.getEmpname());
            }
        }
        //Project pro = (Project)session.get(Project.class, 3);
        //System.out.println(pro.getProname());
        //提交事務
        tx.commit();
        //關閉鏈接
        HibernateUtil.closeSession();
    }
    
    
    
}
相關文章
相關標籤/搜索