注解代替了我们用的*.hbm.xml文件。简少了我们的代码量;应用简单。

@Override

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

单元测试注解

@Test

用途:用于测试

@Before

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

@After

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

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

替换hbm文件

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

@Table  :DB层表的名称

@Transient :不持久化某个属性

@Column:数据表中的字段名

@GenerateValue :主键生成策略

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

@OneToMany :

@ManyToMany

@OneToOne

@JoinColumn

@JoinTable

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

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

配置持久化类

Hibernate 注解可以替代hbm文件

看完了注解的意思我们用注解配置一对一;(我用的是idea;MyEclipse应该是一样的。)

先看实体类

员工实体类

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::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("232325199009092020");
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,);
System.out.println(dept.getDname());
System.out.println(dept.getEmps().iterator().next().getEname()); }
}

然后我们看运行结果

就是这样接下来我们看最后一个例子多对多双向关联。最后一个例子我们拿游戏和玩家来进行举例。

还是先看下实体类。

先看游戏的实体类

package cn.curry.entity4;

import javax.persistence.*;
import javax.swing.text.PlainDocument;
import java.util.HashSet;
import java.util.Set; /**
* Created by Curry on 2017/2/16.
*/
@Entity
@Table(name = "Game")
public class Game {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "sql_Game")
@SequenceGenerator(name="sql_Game",sequenceName = "sql_Game",allocationSize = ,initialValue = )
private Integer gid;
@Column
private String gname;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "PG",joinColumns = {@JoinColumn(name="gid")},inverseJoinColumns = {@JoinColumn(name="pid")})
private Set<Palyer> palyerSet=new HashSet<Palyer>(); public Integer getGid() {
return gid;
} public void setGid(Integer gid) {
this.gid = gid;
} public String getGname() {
return gname;
} public void setGname(String gname) {
this.gname = gname;
} public Set<Palyer> getPalyerSet() {
return palyerSet;
} public void setPalyerSet(Set<Palyer> palyerSet) {
this.palyerSet = palyerSet;
}
}

再看玩家的实体类

package cn.curry.entity4;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set; /**
* Created by Curry on 2017/2/16.
*/
@Entity
@Table(name = "Player")
public class Palyer {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "sql_Player")
@SequenceGenerator(name="sql_Player",sequenceName = "sql_Palyer",allocationSize = ,initialValue = )
private Integer pid;
@Column
private String pname;
@ManyToMany(cascade = CascadeType.ALL,mappedBy = "palyerSet")
private Set<Game> gameSet=new HashSet<Game>(); public Integer getPid() {
return pid;
} public void setPid(Integer pid) {
this.pid = pid;
} public String getPname() {
return pname;
} public void setPname(String pname) {
this.pname = pname;
} public Set<Game> getGameSet() {
return gameSet;
} public void setGameSet(Set<Game> gameSet) {
this.gameSet = gameSet;
}
}

最后看一下测试吧

package cn.curry.test;

import cn.curry.entity4.Game;
import cn.curry.entity4.Palyer;
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 MyTets4 {
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 testManyToMany(){
Game game1=new Game();
game1.setGname("NBA2K17"); Game game2=new Game();
game2.setGname("DNF"); Palyer palyer1=new Palyer();
palyer1.setPname("熊大"); Palyer palyer2=new Palyer();
palyer2.setPname("熊二"); game1.getPalyerSet().add(palyer1);
game1.getPalyerSet().add(palyer2); game2.getPalyerSet().add(palyer1);
game2.getPalyerSet().add(palyer2); palyer1.getGameSet().add(game1);
palyer1.getGameSet().add(game2); palyer2.getGameSet().add(game1);
palyer2.getGameSet().add(game2); session.save(game1);
session.save(game2);
}
}

我们看运行结果

到这里所有例子就写完了。如果有不明白我写的东西,或者觉得那里有问题可以留言交流。

还有idea16的使用也可留言交流下。

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

  1. 关于hibernate注解的简单应用

    @Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执行 @After 用途:单测方法走之后执行 注解的目标:替换小配置.替换h ...

  2. 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目

    研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...

  3. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  4. [Hibernate] 注解映射例子

    Hibernate 注解(Hibernate Annotation) 是一种比较新的方式,通过在 java 简单类增加注解,来声明 java 类和数据库表的映射,作用和 xml 文件相似.hibern ...

  5. Hibernate注解学习1

    由于项目的原因目前需要一些简单注解,于是就做了个hibernate注解的小demo,来记录一下. 1.需要引入jar包ejb3-persistence.jarhibernate-annotations ...

  6. Hibernate注解开发详解

    *****************关于注解的简单介绍 详细介绍请点击这里注解详细教程 package com.tomowork.pojo; import org.hibernate.annotatio ...

  7. Hibernate注解开发、注解创建索引

    1.注解的目的 简化繁琐的ORM映射文件(*.hbm)的配置 2.JPA和hibernate的关系 JPA:java persistence API,JPA注解是JavaEE的标准和规范. 两者的关系 ...

  8. hibernate 注解 联合主键映射

    联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解 ...

  9. Hibernate注解方式一对多自关联关系映射

    MySQL版数据库表结构   DROP TABLE IF EXISTS SYS_DICT_ITEM; CREATE TABLE SYS_DICT_ITEM( ITEM_CODE ) NOT NULL, ...

随机推荐

  1. 关于div宽度和高度的100%设定

    设置DIV大小的有两个属性width和height,以前在学习DIV每次给DIV设置100%宽度或高度时都很迷惑,不明白这个100%的宽度(高度)到底有多宽有多高?这个100%是从哪里得到的从哪里继承 ...

  2. jQuery.extend({...})分析

    作者:zccst 看一下是如何写的 jQuery.extend({ prop:"" method:function(){} }); 可以看出,这些方法是jQuery的静态属性和方法 ...

  3. mysql数据库中间件研究

    随着互联网的发展,数据量的不断增大. 单台实例已经远远无法满足业务的需要. 对数据库分库分表的需求不断的增加随之而来的就是数据库中间件的开发. 一. 单台实例主要面临下面几个问题: 1.  数据量太大 ...

  4. 学习c++语言应该牢记的50条准则,同样学习其他语言也一样

    1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programm ...

  5. MPU6050首例整合性6轴的姿态模块(转)

    源:MPU6050首例整合性6轴的姿态模块 Mpu6050为全球首例整合3轴陀螺仪.3轴加速器.含9轴融合演:MPU-6000为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速 ...

  6. js 设置url 参数值

    //设置url中参数值 function setParam(param,value){ var query = location.search.substring(1); var p = new Re ...

  7. 如何让搜索引擎抓取AJAX内容? 转

    越来越多的网站,开始采用"单页面结构"(Single-page application). 整个网站只有一张网页,采用 Ajax 技术,根据用户的输入,加载不同的内容. 这种做法的 ...

  8. Bzoj1479: [Nerrc1997]Puncher打孔机

    1479: [Nerrc1997]Puncher打孔机 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 22  Solved: 14[Submit][Sta ...

  9. MySQL-教学系统数据库设计

    根据大学教学系统的原型,我构建出如下ER关系图,来学习搭建数据库: 上面共有五个实体,分别是学生,教师,课程,院系,行政班级: 1.其中学生和课程的关系是多对多,即一个学生可以选择多门课程,而一个课程 ...

  10. JVM面试

    深入理解Java内存模型:http://www.cnblogs.com/skywang12345/p/3447546.html http://www.infoq.com/cn/articles/jav ...