Hibernate 学习(二)Hibernate注解形式配置

搭建Hibernate的过程

1.添加jar包
2.创建持久化类
3.Hibernate的配置文件(数据库相关信息,和Hibernate基本配置信息)
4.创建对象关系映射文件(基于配置文件的映射,还有基于注解的方式实现)
5.通过Hibernate API编写访问数据库的代码
这里写图片描述
对Hibernate映射文件详解,配置信息用来干嘛的在配置文件中都有详细的说明。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.iflytek.test.domain">
    <!-- 指定pojo和table之间的映射 -->
    <class name="Student" table="TB_STUDENT">
        <!-- pojo 属性和 数据库表字段进行映射 -->
        <!-- pojo中的主键属性 id hibernate中必须配置 -->
        <id name="id" column="ID" type="long">
            <!-- oracle数据库中id属性设置为自增长类型 -->
            <generator class="sequence">
                <param name="sequence">SEQ_STUDENT</param>
            </generator>
        </id>
        <!-- 可选属性 
            type:指定java类型
            not-null:属性不能为空
            unique:记录必须唯一
            length:对属性的长度进行检查
        -->
        <property name="name" column="NAME" type="string" not-null="true" length="20"></property>
    </class>
</hibernate-mapping>

对于实体之间一对一,一对多之间的这种映射关系的配置,留在通过属性配置ORM来说明,再此不使用配置文件的形式来实现。

Hibernate API提供发几个基本的CRUD方法
public class FirstTest {
    public static void main(String[] args) {

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction transaction = session.beginTransaction();
        Student stu = (Student) session.get(Student.class, 2l);
        System.out.println(stu.toString());
        Student s = new Student();
        s.setName("Lily");
        //session API几个基本的CRUD方法
        session.delete(s);
        session.update(s);
        session.saveOrUpdate(s);
        session.save(s);
        transaction.commit();
        session.close();

    }
}
现在开始基于注解的形式创建Hibernate项目

项目结构基本不变,配置文件中配置ORM映射做一个修改,删除Student.hbm.xml映射文件采用注解的形式。

 <!-- <mapping resource="com/iflytek/test/domain/Student.hbm.xml"/> -->
        <!-- 基于注解的形式配置ORM映射 -->
        <mapping class="com.iflytek.test.domain.Student"/>

对于Entity类加上注解

package com.iflytek.test.domain;

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


/**
 * @desc: Hibernate02
 * @author: star2013
 * @createTime: 2017年5月14日 上午12:12:05
 * @history:
 * @version: v1.0
 */
//注解称之为标注,标记为打一个标签
//@Entity,注册在类头上,将一个类声明为一个实体bean(即一个持久化POJO类) 
//@Table,注册在类头上,注解声明了该实体bean映射指定的表(table)。
//@SequenceGenerator主键生成策略,name别名,sequenceName数据库中的sequence名.一般两个值取一样
@Entity
@Table(name="TB_STUDENT")
@SequenceGenerator(name="SEQ_ID",sequenceName="SEQ_STUDENT")
public class Student {
    //@Id用来标识主属性列
    //标记主键生成策略
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SEQ_ID")
    private Long id;
    private String name;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }

}

测试以注解的形式配置ORM是否生效,运行程序观看控制台的打印信息:
这里写图片描述
从控制台中的信息可以看出,使用注解的形式来配置是生效了的,通过这样的方式可以有效的减少了每一个类写一个ORM映射文件的工作量,通过注解就可以完成基本的信息配置。

常用注解的配置信息解释

注解:实际上是一个注释,用来标记对象(字段,type,方法),为特殊用途,给某些程序读取使用
target:标记目标,type field method
@Retention:状态持续的范围(一般是配置运行状态生效)
@Entity,注册在类头上,将一个类声明为一个实体bean(即一个持久化POJO类) 。
@Table,注册在类头上,注解声明了该实体bean映射指定的表(table)。
@SequenceGenerator( name=”SEQ_ID”,sequenceName=”my_sequence”)
@Id用来标识主属性列,
标记主键生成策略
@GeneratedValue:@GeneratedValue(strategy=GenerationType.IDENTITY)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator=”SEQ_ID”)
@Column:标识列-属性,
@Transient用来注册不是数据库关联的属性
以上的@Id、@GeneratedValue、 @Column:可以写在属性也可写在属性对应的getter上。
@Transient注册在多余的属性上,在getter上时必须与以上的@Column等对应
@Column里面的属性
name=”列名” (用于处理当数据库的表与pojo属性不一样的情况)
unique=false该列是否设置唯一 默认false
nullable 该列是否可为空 默认false
insertable :该列在生成的insert语句中的出现 默认 true
updatable :该列在生成的update语句中的出现 默认 true
length :长度 默认255

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值