(1)helloworld:@Table、@Column、@Transient、@Temporal、@Enumerated

一、需要配置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">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
         <property name="connection.url">jdbc:mysql://localhost:3306/lianxi</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>


        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout sql错误调试用-->
        <property name="show_sql">true</property><!-- 当执行sql语句是,将sql语句在控制台打印,为true。一般都设为true -->
        <property name="format_sql">true</property><!-- 会将sql语句格式化显示 ,而不再一行显示信息
         create table student (
        id integer not null,
        name varchar(255),
        age integer,
        primary key (id)
          )        -->

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property><!-- 当没有这张表时,自动创建 ,create最常用-->
        <!-- update: 在编程的过程中,需要向表中添加新的字段,不用在数据库中添加新字段,程序运行起来后,会自动添加-->
        <!-- create-drop :使用 create-drop时,在显式关闭SessionFactory时,将drop掉数据库schema. -->
        <!-- validate:检查数据库中的表和配置文件中的字段是否一一对应 -->


         <mapping class="com.model.teacher"/>
    </session-factory>

</hibernate-configuration>

二、实体类

@Entity 注解将一个类声明为一个实体bean(即一个持久化POJO类)
//从这个包(javax.persistence.Entity)可以看出,是个标准,不依赖于hibernate
@Table(name="_Teacher") //当model类和数据库的表名,不一致时,应该在这里指定。在这里类名为:teacher,表名是:_Teacher。若不定义@Table时,系统自动使用默认值:实体的短类名(不包含包名)
public class teacher {
//实体中非static非transient的属性都可以被持久化,除非注解为@Trainsient。所有没有定义注解的属性相当于其上添加了@Basic注解。
    private int id;
    private String name;
    private int age;
    private String sex;
    private Date birthDate;
    private ZhiCheng zhicheng;

    @Id //必须加在getId上面
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }


    @Column(name="_name",
    length=10,nullable=false)//当类中属性名和数据库中字段名不一致时,通过这个注解,就能实现类中字段name到数据库字段_name的映射。但要注意要写在get方法上面
    //若对数据库中的属性字段有限制,可以在@Column中设定
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


    @Basic
    //对于没有写注解的属性默认等价于上面添加了@Basic注解
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }


    @Transient 
    //不希望该字段存入数据库中,
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }


    //new Date() 记录到数据库中,会是timestamp类型,既有日期也有时间。可以只记录时间或者日期。当TemporalType.DATE,就是只记录日期,而不记录时间,对应的数据库属性就变成了date类型
    @Temporal(TemporalType.DATE)
    public Date getBirthDate() {
        return birthDate;
    }
    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }


    @Enumerated(EnumType.ORDINAL)//当类型为STRING时,存入数据库的是字符串,字段类型是varchar,当类型为ORDINAL时,存入数据库的是索引值,字段类型是integer
    public ZhiCheng getZhicheng() {
        return zhicheng;
    }
    public void setZhicheng(ZhiCheng zhicheng) {
        this.zhicheng = zhicheng;
    }

}


public enum ZhiCheng {

    A,B,C
}

一、声明基本的属性映射
①@Basic注解 通过此注解可以声明属性的获取方式(fetch strategy)对于简单的属性,默认的获取方式是即时获取。当一个实体Bean的实例被创建时,hibernate会将这些属性的值从数据库中取出,保存在Bean的属性中,延迟获取(lazy fetch),如果一个属性的获取方式是延迟获取,hibernate在创建一个实体bean的实例时,不会即时将这个属性从数据库中读出,只是在该实体bean的这个属性第一次被调用时,hibernate才去获取对应的值,而不是不能获取该数据。
②@Temporal注解:在核心的JavaAPI中并没有定义时间精度,因此处理时间类型数据时,需要定义将其存储在数据库中所预期的精度。在数据库中,表示时间类型的数据有date、time、timestamp,默认情况下,即不写@Temporal情况下是timestamp.
③@Column注解:在建表时会用到,name(列名)、unique(唯一约束,类似主键特性,但是一个表可以有多个字段是唯一约束,只有一个主键)、nullable、insertable、updateable、length……
④@Enumerated:将枚举类型映射成一个顺序列(保存对应的序列值ORDINAL)或者一个字符串类型的列(保存相应的字符串STRING),默认是保存枚举的序列值,可以通过该注解改变

posted @ 2017-11-11 21:47  测试开发分享站  阅读(124)  评论(0编辑  收藏  举报