关于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()); }
}
我们来看一下结果:
好了,今天就先写这些例子。如果有什么问题可以交流。
关于hibernate注解的简单应用的更多相关文章
- hibernate注解的简单应用
注解代替了我们用的*.hbm.xml文件.简少了我们的代码量:应用简单. @Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执 ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
- Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)
然后是项目下的文件:完整的项目请看 上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...
- [Hibernate] 注解映射例子
Hibernate 注解(Hibernate Annotation) 是一种比较新的方式,通过在 java 简单类增加注解,来声明 java 类和数据库表的映射,作用和 xml 文件相似.hibern ...
- Hibernate注解学习1
由于项目的原因目前需要一些简单注解,于是就做了个hibernate注解的小demo,来记录一下. 1.需要引入jar包ejb3-persistence.jarhibernate-annotations ...
- Hibernate注解开发详解
*****************关于注解的简单介绍 详细介绍请点击这里注解详细教程 package com.tomowork.pojo; import org.hibernate.annotatio ...
- Hibernate注解开发、注解创建索引
1.注解的目的 简化繁琐的ORM映射文件(*.hbm)的配置 2.JPA和hibernate的关系 JPA:java persistence API,JPA注解是JavaEE的标准和规范. 两者的关系 ...
- hibernate 注解 联合主键映射
联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解 ...
- Hibernate注解方式一对多自关联关系映射
MySQL版数据库表结构 DROP TABLE IF EXISTS SYS_DICT_ITEM; CREATE TABLE SYS_DICT_ITEM( ITEM_CODE ) NOT NULL, ...
随机推荐
- java 自动备份MySQL 数据库(转载)
1 package com.learn4j.bat; public class Backup { private String user_name;// 数据库用户名 private String u ...
- ios 设置屏幕方向的两种方法
第一种:通过人为的办法改变view.transform的属性. 具体办法: view.transform一般是View的旋转,拉伸移动等属性,类似view.layer.transform,区别在于Vi ...
- kvm下Windows激活方式小计
使用kvm创建widnwos镜像模板,镜像模板默认是已经激活的正版系统,但是使用程序拷贝部署到不同的机器后发现已经激活的系统变成未激活状态,我们需求就是需要拷贝到不同的机器也能显示是正版系统 网上找了 ...
- S3C2440 TFTLCD驱动详解
S3C2440自带有LCD控制器,该控制器主要有以下接口 仅仅说TFT显示器,TFT显示器的时序如下 TFT显示器的驱动是以行列的形式逐点扫描过来的,驱动时钟有三种,一种是行时钟,一种是列时钟,还有一 ...
- Thinking in scala (3)----求平方根
采用“牛顿法”求一个数的平方根 object sqrt { def main(args:Array[String])={ println( sqrt(args(0).toDouble)) } def ...
- AOP:代理思想 (没有考虑到Spring)
文件目录: package com.wangcf.entity; public class User { private int id; private String name; private St ...
- JavaScript DOM节点操作总结
节点类型 节点类型主要有三种:元素节点,属性节点和文本节点. 而对DOM的主要也就是围绕元素节点和属性节点的增删改查.下面就分别从对元素节点的操作和对属性节点的操作来介绍. 元素节点 查 在对DOM进 ...
- IOS开发-UI学习-NSBundle和NSURL的区别(读取文件以及写入文件)
NSBundle和NSURL的区别: 在项目的工程中添加一个文件,本例程添加的是aa.txt,文件的内容为百度: www.baidu.com,现在要使用NSBundle和NSURL分别去获取内容,代码 ...
- IOS开发-OC学习-NSTimer的使用
上一篇博客中在改变属性值的时候使用了timer进行自动改变.关于NSTimer的更详细的用法如下: 定义一个NSTimer类型的timer,和一个count,其中timer是定时器,count是计数的 ...
- 【Xilinx-Petalinux学习】-07-OpenCV的软硬件处理速度对比
有空了设计一个hls的图像处理IP. 通过hls设计ip模块实现opencv的图像处理. 对比软件和硬件的图像处理速度.