关于hibernate注解的简单应用

@Override

用途:重写父类的同名方法

单元测试注解

@Test

用途:用于测试

@Before

用途:单测方法走之前执行

@After

用途:单测方法走之后执行

注解的目标:替换小配置。替换hbm文件

@Entity  :标识实体类(被持久化)

@Table  :DB层表的名称

@Transient :不持久化某个属性

@Column:数据表中的字段名

@GenerateValue :主键生成策略

-----------------关联-------------------------------------------------------------------------------------------------------

@OneToMany :

@ManyToMany

@OneToOne

@JoinColumn

@JoinTable

Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射。

在Hibernate3.3之前,需单独下载注解开发包。

配置持久化类

Hibernate注解可以代理hbm文件。

下面我们来用行动看看效果:

员工实体类:

package cn.curry.entity2;

import javax.persistence.*;

/**
 * Created by Curry on 2017/2/16.
 */
@Entity
@Table(name = "Emp2")
public class Emp {

    private Integer eid;
    @Column
    private String ename;

    private Idcard idcard;
    @OneToOne
    @JoinColumn(name = "iid")
    public Idcard getIdcard() {
        return idcard;
    }

    public void setIdcard(Idcard idcard) {
        this.idcard = idcard;
    }
    @Id
    @GeneratedValue
    public Integer getEid() {
        return eid;
    }

    public void setEid(Integer eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

}身份实体类:
package cn.curry.entity2;
import javax.persistence.*;

/**
 * Created by Curry on 2017/2/16.
 */
@Entity
@Table(name = "Idcard2")
public class Idcard {
    @Id
    @GeneratedValue
    private Integer iid;
    private String inum;
    @OneToOne(mappedBy = "idcard",cascade = CascadeType.ALL)
    private Emp emp;

    public Integer getIid() {
        return iid;
    }

    public void setIid(Integer iid) {
        this.iid = iid;
    }

    public String getInum() {
        return inum;
    }

    public void setInum(String inum) {
        this.inum = inum;
    }

    public Emp getEmp() {
        return emp;
    }

    public void setEmp(Emp emp) {
        this.emp = emp;
    }
}下面我们看一下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">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="connection.username">curry</property>
        <property name="connection.password">curry</property>

        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="show_sql">true</property>

        <property name="hbm2ddl.auto">update</property>
        <!--和当前线程绑定 -->
        <property name="current_session_context_class">thread</property>

        <!--<mapping resource="cn/curry/entity/Grade.hbm.xml"/>
        <mapping resource="cn/curry/entity/Student.hbm.xml"/>-->
       <!-- 一对一-->
        <mapping class="cn.curry.entity2.Emp"/>
        <mapping class="cn.curry.entity2.Idcard"/>

       <!-- 一对多双向关联-->
        <mapping class="cn.curry.entity3.Emp"/>
        <mapping class="cn.curry.entity3.Dept"/>

        <!--多对多双向关联-->
        <mapping class="cn.curry.entity4.Game"/>
        <mapping class="cn.curry.entity4.Palyer"/>

    </session-factory>
</hibernate-configuration>

下面我们在测试一下:package cn.curry.test;

import cn.curry.entity2.Emp;

import cn.curry.entity2.Idcard;

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

/**

 * Created by Curry on 2017/2/16.

 */

public class MyTest2 {

    Session session=null;

    Transaction tx;

    @Before

    public void before(){

        session = HibernateUtil.currentSession();

        tx=session.beginTransaction();

    }

    @After

    public void after(){

        tx.commit();

        HibernateUtil.closeSession();

    }

    @Test

    public void testOneToOne(){

        Emp emp=new Emp();

        emp.setEname("小明");

        Idcard idcard=new Idcard();

        idcard.setInum("88888888888");

        idcard.setEmp(emp);

        emp.setIdcard(idcard);

        session.save(idcard);

    }

}

好了!看一下运行结果吧!

接下来我们再看一对多双向关联的配置

我们重新写一个例子,这次我们用员工和部门的列子来说;

首先还是先看实体类,注意看配置,看注解的书写,看每个属性的配置。

部门实体类:

package cn.curry.entity3;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 * Created by Curry on 2017/2/16.
 */
@Entity
@Table(name="Dept02")
public class Dept {
    @Id
    @GeneratedValue
    private Integer did;
    @Column
    private String dname;
    @OneToMany(mappedBy = "dept",cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    private Set<Emp> emps=new HashSet<Emp>();

    public Integer getDid() {
        return did;
    }

    public void setDid(Integer did) {
        this.did = did;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public Set<Emp> getEmps() {
        return emps;
    }

    public void setEmps(Set<Emp> emps) {
        this.emps = emps;
    }
}员工实体类:
package cn.curry.entity3;

import javax.persistence.*;

/**
 * Created by Curry on 2017/2/16.
 */
@Entity
@Table(name = "Emp02")
public class Emp {
    @Id
    @GeneratedValue
    private Integer eid;
    @Column
    private String ename;
    @ManyToOne
    @JoinColumn(name="did")
    private Dept dept;

    public Integer getEid() {
        return eid;
    }

    public void setEid(Integer eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }
}

hibernate.cfg.xml文件已经在前面写好了

下面我们看看测试类:

package cn.curry.test;

import cn.curry.entity3.Dept;
import cn.curry.entity3.Emp;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * Created by Curry on 2017/2/16.
 */
public class MyTest3 {
    Session session=null;
    Transaction tx;
    @Before
    public void before(){
        session = HibernateUtil.currentSession();
        tx=session.beginTransaction();
    }
    @After
    public void after(){
        tx.commit();
        HibernateUtil.closeSession();
    }
    @Test
    public void testOneToOne(){
        Dept dept=new Dept();
        dept.setDname("财务部");
        Emp emp=new Emp();
        emp.setEname("小明");

        dept.getEmps().add(emp);
        emp.setDept(dept);

        session.save(dept);
    }
    @Test
    public void select(){
        Dept dept =session.get(Dept.class,3);
        System.out.println(dept.getDname());
        System.out.println(dept.getEmps().iterator().next().getEname());

    }
}我们来看一下结果:

好了,今天就先写这些例子。如果有什么问题可以交流。


				
时间: 2024-10-27 16:38:06

关于hibernate注解的简单应用的相关文章

Hibernate注解方式开发实体类

Hibernate注解 1.@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog="",schema="") 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息 name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名 catalog:可选,表示Cat

[Hibernate] 注解映射例子

Hibernate 注解(Hibernate Annotation) 是一种比较新的方式,通过在 java 简单类增加注解,来声明 java 类和数据库表的映射,作用和 xml 文件相似.hibernate 注解可以用来增强,或者替换 xml 的映射声明方式. hibernate 注解功能需要使用下面三个 jar 文件 hibernate-annotations.jar ejb3-persistence.jar hibernate-commons-annotations.jar 代码的目录结构如

hibernate 注解annotation

转自jpa&hibernate注解 物理连接:http://www.blogjava.net/oxidy/archive/2013/06/06/400266.html @Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog="",schema="") 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体

Hibernate学习之简单应用

前言:博主在学到Spring的时候,要开始做项目了,突然觉得好像有点虚,之前学过的Hibernate框架的简单应用好像又忘记了.所以返回来,做个小笔记. 简单来讲,Hibernate框架是利用对象-关系型数据映射(ORM)实现持久化(将数据存入可持久保存的存储设备中). 怎么用呢?这里有一个小demo,实现的是基于Annotation(注解)实现CRUD(增删改查).可以简单分为三步. ① 创建实体类entity(这里的实体类就是UserInfo吧),实体类在此处的作用就跟JavaBean或PO

Hibernate注解开发(未完待续)

1.注解的目的 简化繁琐的ORM映射文件(*.hbm)的配置 2.JPA和hibernate的关系 JPA:java persistence API,JPA注解是JavaEE的标准和规范. 两者的关系可以简单理解为JPA是接口,Hibernate是实现,但是其功能是JPA的超集. Hibernate如何实现与JPA的关系? 通过hibernate-core,hibernate-entitymanager,hibernate-annotation三个组件实现. 程序开发中一般使用JPA注解,便于程

hibernate注解

慕课网:http://www.imooc.com/learn/524 一.类级别注解 简介 使用注解的目的:为了简化繁琐的ORM映射文件(*.hbm)的配置 JPA(Java Persistence API)与hibernate的关系:JPA是标准接口,hibernate是实现(hibernate的功能是jpa的超集,功能更强大) hibernate如何实现与JPA的关系:通过hibernate-annotation.hibernate-entitymanager.hibernate-core三

Hibernate学习一:Hibernate注解CascadeType

http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hibernate学习一:Hibernate注解CascadeType 博客分类: Hibernate hibernate 一.概念 现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理.从中抽象出一个多对多的例子user-bar. 主控方user:多对多里面里面会有第三张表user_b

(十) 使用Hibernate 注解

Hibernate里有两种注解 : Hibernate 注解 JPA注解 主键生成机制 : http://www.cnblogs.com/ph123/p/5692194.html 案例一:   用注解对非复合主键的表生成配置文件 package bean; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.p

Hibernate注解总结:

Hibernate注解总结: 首先我们都知道Hibernate框架是持久层的一个框架,用于对数据的访问和操作.个人觉得其强大就在于它可以使用HQL语句来进行快速的增.删.改的操作,也可以使用Sql语句来进行数据操作,很是方便快捷,备受大型项目青睐,之前所做的都是用的MyBatis感觉比MyBatis要方便些.但是有些人会认为说开发人员理应熟练使用sql语句,对MyBatis更欢迎.智者见智仁者见仁.我就从我平时使用的注解说起吧: @id:这个想必大家都不会陌生的,在实体类中定以主键的标识. @E