Hibernate注解开发之类级别的注解

Hibernate的注解类别可以分为

类级别的注解

属性级别的注解    

关联映射的注解

首先介绍类级别的注解

@Entity(映射实体类注解)

    @Entity(name = "数据库中的表的名称")

    name: 可选, 对应数据库中的一张表, 若表名和实体类名相同, 则可以省略.

    在使用@Entity时需要指定主键属性

例子:

配置文件hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://192.168.5.134:3306/hibernate_mysql</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <!--配置方言
        -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!--是否展示sql语句
        -->
        <property name="show_sql">true</property>
        <!--格式化sql
        -->
        <property name="format_sql">true</property>
        <!--建表策略
        -->
        <property name="hbm2ddl.auto">update</property>
        <!--如果使用的是本地事务(jdbc事务 本地事务:数据库只有一个)
        -->
        <property name="hibernate.current_session_context_class">thread</property>
        <!--如果使用的是全局事务(jta事务 全局事务:数据库有多个)
        -->
        <!--<property name="hibernate.current_session_context_class">jta</property>-->
        <!--创建的实体类对应的表
        -->
        <!--<mapping class="com.idea.hibernate.oto_bfk.Students05"/>-->
        <!--<mapping class="com.idea.hibernate.oto_bfk.IdCard02"/>-->

        <mapping class="com.idea.hibernate.mto_fk.Students06"/>
        <mapping class="com.idea.hibernate.mto_fk.ClassRoom"/>
    </session-factory>
</hibernate-configuration>

实体类Students

@Entity(name = "Students") //映射成关系型数据库中的一张表
//javax.persistence.Entity ==> jpa注解
public class Students {

    @Id //设置为主键
    @GeneratedValue(strategy = GenerationType.AUTO) //主键自增
    private int sid; //学号
    private String sname; //姓名
    private String gender; //性别
    private Date birthday; //出生日期
    private String major; //专业
    private String address; //地址

    public Students() {
    }

    public Students(int sid, String sname, String gender, Date birthday, String major, String address) {
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.birthday = birthday;
        this.major = major;
        this.address = address;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

 测试

@Test
public void testSchemaExport(){
    //创建hibernate配置对象
    Configuration configuration = new Configuration().configure();
    //创建服务注册对象
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
    //生成SssionFactory
    SessionFactory  sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    //生成SchemaExport对象
    SchemaExport schemaExport = new SchemaExport(configuration);
    schemaExport.create(true, true);
}

控制台输出

数据库结果 

@Table(标注表的注解)

    @Table(name = "", catalog = "", schema = "")

    一般和@Entity注解配合使用, 也是用在类上

    name: 可选, 映射表的名称, 默认表名和实体名称一样, 只有在不一致的情况下才需要指定表名

    catalog: 可选, 表示catalog目录名称, 默认为空

    schema: 可选, 表示schema模式名称, 默认为空

    schema和catalog的区别: 一个数据库系统由多个catalog组成, 一个catalog由多个schema组成(mysql和oracle不支持catalog属性), mysql的schema的值默认是数据库的名称, oracle默认是用户的id

@Entity
@Table(name = "t_students", schema = "hibernate_mysql")
//javax.persistence.Entity ==> jpa注解
public class Students {...}

控制台输出

数据库结果

@ Embeddable(标注嵌入类的注解)

    表示一个非Entity类可以嵌入到另一个Entity类中作为一个属性而存在

    由于不是一个Entity类, 所以其所标注的类不会映射成一张表

新建一个Address的非Entity类, 标上@Embeddable注解

//地址类
@Embeddable  //表示这是一个非Entity的嵌入类, 该类在另一个实体类中充当属性
public class Address {

    private String postCode;  //邮编
    private String address;  //地址
    private String phone;  //联系电话

    public Address() {
    }

    public Address(String postCode, String address, String phone) {
        this.postCode = postCode;
        this.address = address;
        this.phone = phone;
    }

    public String getPostCode() {
        return postCode;
    }

    public void setPostCode(String postCode) {
        this.postCode = postCode;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

    

数据库结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值