整理笔记---Hibernate的Annotation(注解)

Hibernate的Annotation(注解)
【简单的配置】
User.java

package com.xing.annotation.entity;

import javax.persistence.*;
import java.util.Date;

/**
 * @Entity:让当前的类被数据库所管理(注意这里导入的jar包不是Hibernate的包)
 * @Table:设置在数据库中要创建的对应表的名称
 *
 * */
@Entity
@Table(name="t_user")
public class User {

    private int id;
    private String userName;
    private String passWord;
    private String nickName;
    private Date born;

    /**
     * @Id:设置当前表的Id
     * @GeneratedValue:表示设置当前字段为该表的唯一主键,并且为自增
     * */
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    /**
     * @Column:设置当前字段在数据库表中的名称
     * */
    @Column(name = "user_name")
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public Date getBorn() {
        return born;
    }

    public void setBorn(Date born) {
        this.born = born;
    }
}

【将映射文件加入Hibernate.cfg.xml配置文件】

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

    <session-factory>
        <!-- 配置数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 配置数据库连接驱动-->
        <property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <!-- 配置打印sql -->
        <property name="show_sql">true</property>
        <!-- 配置  自动完成类到数据表的转换-->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 加入实体类的映射文件-->
        <mapping class="com.xing.annotation.entity.User"></mapping>

    </session-factory>
</hibernate-configuration>

【实现简单的Many-To-One配置】
many:Student.java

package com.xing.annotation.entity;


import javax.persistence.*;

@Entity
@Table(name="t_student")
public class Student {

    private int id ;
    private String name ;
    private String no ;
    private ClassRoom classRoom ;

    @Id
    @GeneratedValue
    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 String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }
    /**
     * @JoinColumn:在多的一方设置一的一方在数据库中的外键名称
     * @ManyToOne(fetch = FetchType.LAZY)  设置它的延迟加载
     * */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "class_id")
    public ClassRoom getClassRoom() {
        return classRoom;
    }

    public void setClassRoom(ClassRoom classRoom) {
        this.classRoom = classRoom;
    }
}

one:ClassRoom.java

package com.xing.annotation.entity;


import com.xing.entity.*;

import javax.persistence.*;
import java.util.Set;

@Entity
@Table(name="t_class_room")
public class ClassRoom {
    private int id;
    private String name ;
    private int grade;

    private Set<Student> students ;

    @Id
    @GeneratedValue
    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 int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    /**
     * @OneToMany(mappedBy="classRoom"):设置由当前对象在对方的属性名称来维护关系,如果不加mappedBy它就不能知道由谁
     * 来维护关系,它就会加一个中间表
     * */
    @OneToMany(mappedBy = "classRoom")
    public Set<Student> getStudents() {
        return students;
    }

    public void setStudents(Set<Student> students) {
        this.students = students;
    }
}

【实现简单的one-to-one】
Person.java

package com.xing.annotation.entity;


import javax.persistence.*;
@Entity
@Table(name = "t_person")
public class Person {
    private int id ;
    private String name ;
    private IDCard card ;

    @Id
    @GeneratedValue
    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;
    }

    @OneToOne(mappedBy = "person")
    public IDCard getCard() {
        return card;
    }

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

IDCard.java

package com.xing.annotation.entity;


import javax.persistence.*;

/**
 * Created by Administrator on 2016/8/3.
 */
@Entity
@Table(name="t_id_card")
public class IDCard {

    private int id;
    private String no ;
    private Person person ;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

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

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    @OneToOne
    @JoinColumn(name = "p_id")
    public Person getPerson() {
        return person;
    }

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

one-to-one:只要注意设置那方维护关系,那么将外键加载那一方,不维护关系的那一方,设置one-to-one的时候要设置mappedBy让有外键的一方来维护关系
【简单配置Many-to-many】
Admin.java

package com.xing.annotation.entity;

import javax.persistence.*;
import java.util.Set;
@Entity
@Table
public class Admin {

    private int id;
    private String name;
    private Set<Role> roles ;

    @Id
    @GeneratedValue
    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;
    }
    /**
     * 由我在对方的属性来维护关系
     * */
    @ManyToMany(mappedBy = "admins")
    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }
}

Role.java

package com.xing.annotation.entity;


import javax.persistence.*;
import java.util.Set;

@Entity
@Table(name = "t_role")
public class Role {

    private int id;
    private String name ;
    private Set<Admin> admins ;

    @Id
    @GeneratedValue
    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;
    }

    /**
     * @JoinTable:加入中间表,joinColumns:加入我在对方的外键名称,inverseJoinColumns:加入对方在我的外键名称
     * */
    @ManyToMany
    @JoinTable(name = "t_admin_role",joinColumns = {@JoinColumn(name="rid")},inverseJoinColumns = {@JoinColumn(name = "aid")})
    public Set<Admin> getAdmins() {
        return admins;
    }

    public void setAdmins(Set<Admin> admins) {
        this.admins = admins;
    }
}

这里设置role来维护关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值