1. 程式人生 > >Hibernate的註解似開發

Hibernate的註解似開發

lib import 註意 這一 員工 orm框架 join ons 屬性

技術分享圖片

掛有@的接口和一些描述元註解

本次開發使用的註解

@Id

必須,定義了映射到數據庫表的主鍵的屬性,一個實體只能有一個屬性被映射為主鍵

@Table

可選,通常和@Entity配合使用,只能標註在實體的class定義處,表示實體對應的數據庫表的信息

@Entity

必須,name為可選,對應數據庫中一的個表

@GeneratedValue

可選,

strategy:表示主鍵生成策略,有AUTOINDENTITYSEQUENCETABLE 4種,分別表示讓ORM框架自動選擇、根據數據庫的Identity字段生成、根據數據庫表的Sequence

字段生成、以及根據一個額外的表生成主鍵。默認為AUTO

generator:表示主鍵生成器的名稱,這個屬性通常和ORM框架相關。例如,Hibernate可以指定uuid等主鍵生成方式

默認不寫采用的是本地的主鍵生成策咯native

@Column

可選 ,描述了數據庫表中該字段的詳細定義

@Transient

可選,表示該屬性並非一個到數據庫表的字段的映射,ORM框架將忽略該屬性

@OneToMany

可選,

OneToMany指定了一對多的關系,mappedBy="room"指定了由哪一方一方來維護關聯關系mappedBy指的是多的一方對

1的這一方的依賴的屬性,(註意:如果沒有指定由誰來維護關聯關系,則系統會給我們創建一張中間表)

@JoinColumn(name = "deptno")

通過 JoinColumn name屬性指定了外鍵的名稱 deptno (註意:如果我們不通過JoinColum來指定外鍵的名稱,系統會給我們聲明一個名稱)

@ManyToOne(cascade = CascadeType.ALL)

ManyToOne指定了多對一的關系

CascadeType.PERSIST:級聯新增

CascadeType.MERGE:級聯合並

CascadeType.REFRESH:級聯刷新

CascadeType.REMOVE:級聯刪除

CascadeType.ALL:以上四種都是

Passanger表關系定義如下:

@ManyToOne(cascade = { CascadeType.PERSIST,CascadeType.MERGE})

一對一的實例:

一個人對應著一張身份證

package cn.baby.entity;

import javax.persistence.*;
import java.io.Serializable;

/**
 * 人
 * 人與省份證一對一
 * Created by Administrator on 2018/1/3.
 */
@Entity
@Table(name = "PERSON")
public class Person implements Serializable{
    @Id
    @GeneratedValue
    private int id;
    @Column
    private String name;
    //不要初始化,初始化會使對象處於臨時狀態,會使保存的時候拋異常 
    @OneToOne
    //申明一個外鍵
    @JoinColumn(name = "pk_id")
    private Card card;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Card getCard() {
        return card;
    }

    public void setCard(Card card) {
        this.card = card;
    }
}

  

package cn.baby.entity;

import javax.persistence.*;
import java.io.Serializable;

/**
 * 省份證
 * 一對一
 * Created by Administrator on 2018/1/3.
 */
@Table(name = "CARD")
@Entity
public class Card implements Serializable{
    @Id
    @GeneratedValue
    private int id;
    //誰維護表的關系card,保存時,只需要保存card就行
    @OneToOne(mappedBy = "card",cascade = CascadeType.ALL)
    private Person person;

    public int getId() {
        return id;
    }

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

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

 測試類

//一對一
    @Test
    public void onetoone(){
        Person person=new Person();
        Card card=new Card();
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        person.setName("威哥");
        card.setPerson(person);
        person.setCard(card);
        session.save(card);
        transaction.commit();

    }

  一對多

一個部門對應著對個員工

package cn.baby.entity;

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * 部門表
 * 一個部門下有多個員工
 * Created by Administrator on 2017/12/28.
 */
@Entity
@Table(name = "DEPT5")
public class Dept implements Serializable {
    @Id
    @GeneratedValue
    private Integer deptNo;
    @Column
    private String deptName;
    //一個部門下有多個員工 植入set集合 一對多,一定是set集合不是hashset,但是底層實現的是他
    @OneToMany(mappedBy = "dept", cascade = CascadeType.ALL)
    private Set<Emp> emps=new HashSet<Emp>();

    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;
    }

    public Set<Emp> getEmps() {
        return emps;
    }

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

  

package cn.baby.entity;

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * 員工表
 * 一個員工對應著一個部門
 * Created by Administrator on 2017/12/28.
 */
@Table(name = "EMP5")
@Entity
public class Emp implements Serializable {
    @Id
    @GeneratedValue
    private Integer empNo;
    @Column
    private String empName;
    //一個員工對應著一個部門,植入一個部門屬性
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "deptno")
    private Dept dept;
    //mappedBy誰維護關系,mappedBy指定的是屬性名稱
    @ManyToMany(mappedBy = "emps",cascade = CascadeType.ALL)
    private Set<Project> projects=new HashSet<Project>();

    public Set<Project> getProjects() {
        return projects;
    }

    public void setProjects(Set<Project> projects) {
        this.projects = projects;
    }

    public Integer getEmpNo() {
        return empNo;
    }

    public void setEmpNo(Integer empNo) {
        this.empNo = empNo;
    }

    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;
    }
}

  測試類:

//一對多
    @Test
    public void onetomany(){
        Dept dept=new Dept();
        dept.setDeptName("技術部");
        Emp emp=new Emp();
        emp.setEmpName("小黃");
        Emp emp1=new Emp();
        emp1.setEmpName("小黑");
        emp.setDept(dept);
        emp1.setDept(dept);
        dept.getEmps().add(emp);
        dept.getEmps().add(emp1);
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        session.save(dept);
        transaction.commit();

    }

  多對對

一個員工可以寫多個項目

一個項目可以被多個員工寫

package cn.baby.entity;

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * 員工表
 * 一個員工對應著一個部門
 * Created by Administrator on 2017/12/28.
 */
@Table(name = "EMP5")
@Entity
public class Emp implements Serializable {
    @Id
    @GeneratedValue
    private Integer empNo;
    @Column
    private String empName;
    //一個員工對應著一個部門,植入一個部門屬性
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "deptno")
    private Dept dept;
    //mappedBy誰維護關系,mappedBy指定的是屬性名稱
    @ManyToMany(mappedBy = "emps",cascade = CascadeType.ALL)
    private Set<Project> projects=new HashSet<Project>();

    public Set<Project> getProjects() {
        return projects;
    }

    public void setProjects(Set<Project> projects) {
        this.projects = projects;
    }

    public Integer getEmpNo() {
        return empNo;
    }

    public void setEmpNo(Integer empNo) {
        this.empNo = empNo;
    }

    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;
    }
}

  

package cn.baby.entity;

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * 項目表
 * 多對多
 * Created by Administrator on 2017/12/28.
 */
@Entity
@Table(name = "PROJECT5")
public class Project implements Serializable {
    @Id
    @GeneratedValue
    private Integer proNo;
    @Column
    private String proName;
    @ManyToMany(cascade = CascadeType.ALL)
    //中間表    中間表的名稱        本實體對應中間表的列                      另一個實體對應中間表的列
    @JoinTable(
            name = "proemp5",
            joinColumns = @JoinColumn(name = "proid"),
    inverseJoinColumns = @JoinColumn(name = "empid"))
    //員工集合
    private Set<Emp> emps=new HashSet<Emp>();

    public Integer getProNo() {
        return proNo;
    }

    public void setProNo(Integer proNo) {
        this.proNo = proNo;
    }

    public String getProName() {
        return proName;
    }

    public void setProName(String proName) {
        this.proName = proName;
    }

    public Set<Emp> getEmps() {
        return emps;
    }

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

 測試類

  //duo對多
    @Test
    public void manytomany(){

        Emp emp=new Emp();
        emp.setEmpName("小黃");
        Emp emp1=new Emp();
        emp1.setEmpName("小黑");
        Project project=new Project();
        project.setProName("易買網");
        Project project1=new Project();
        project1.setProName("易買網1");
        emp.getProjects().add(project);
        emp.getProjects().add(project1);
        emp1.getProjects().add(project);
        project.getEmps().add(emp);
        project1.getEmps().add(emp);
        project.getEmps().add(emp1);
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        session.save(emp);
        session.save(emp1);
        transaction.commit();

    }

  

Hibernate的註解似開發