Hibernate注解-annotation

Hibernate注解-annotation


在Hibernate中,通常配置对象关系映射的方式有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,俗话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,annotation的方式可以更简介,使得Hibernate程序的开发大大的简化。利用注解后,可不用定义持久化类对应的*.hbm.xml,而直接以注解方式写入持久化类的实现中。在Hibernate4以后已经将annotation的jar包集成进来了,如果使用Hibernate3的版本就需要引入annotation的jar包。

常用的注解

注解含义和作用
@Entity将一个类声明为一个持久化类
@Id声明了持久化类的标识属性(相当于数据表的主键)
@GeneratedValue定义标识属性值的生成策略
@Table为持久化类映射指定表(table)、目录(catalog)和schema的名称。默认值,持久化类名,不带包名
@UniqueConstraint定义表的唯一约束
@Lob表示属性将被持久化为Blob或者Clob类
@Column将属性映射到列
@Transient忽略这些字段和属性,不用持久化到数据库(不生成列)
@OneToOne一对一
@OneToMany一对多
@ManyToOne多对一
@ManyToMany多对多

注解编写的位置

第一种是把注解@Column(name = “xx”)放在field上,一种是把注解放在get方法上一般放在field上看起来比较集中、清晰;
第二种是把注解@Column(name = “xx”)放在get方法上,这种方式看起来比较散漫、不怎么清楚。

但是第一种方式实际上破坏了java面向对象的封装性,原因是一般我们写javaBean,成员变量通常定义为private,目的就是不让别人来直接访问私有属性,而我们把注解放在私有成员的变量上,就是默认Hibernate可以直接访问我们的私有的成员变量,所以我们定义属性为private,实际就没有多大意义了,至于Hibernate为什么能访问,Hibernate采用java的反射机制完全可以访问私有成员变量!所以应该放在get方法上,第二种方式就显得更加合理。

注解实现单表

1、编写实体类

Book.java

package cn.hibernate.pojo;

import javax.persistence.*;
import java.io.Serializable;
@Entity// 表示需要持久化的实体类
@Table(name = "book") // 表示实体类所对应的表,可以不写,默认值类名
public class Book implements Serializable {

    private Integer id;
    private String name;
    private Double price;
    private String author;

    @Id //主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) //自增
    @Column(name = "id")
    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

}

2、编写主配置文件

hibernate.cfg.xml

<!-- 添加实体类映射 -->
<mapping class="cn.hibernate.pojo.Book"/>

3、测试

@Test
public void testSave() {
	Session session = null;
	Transaction transaction = null;
	try {
		session = HibernateUtil.getSession();
		transaction = session.beginTransaction();
		Book book = new Book();
		book.setName("红楼梦");
		book.setPrice(50.5);
		book.setAuthor("曹雪芹&高鹗");
		session.save(book);
		transaction.commit();
	} catch (Exception e) {
		e.printStackTrace();
		transaction.rollback();
	} finally {
		HibernateUtil.closeSession();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值