您的位置:首页 > 其它

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

2017-05-13 23:32 351 查看

搭建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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate