HIbernate的增删改
数据库是oracle
以一对多为例:user50一的一方 order50是多的一方
首先是实体类:
这里的实体是双向关系,既通过user50可以找到order50,通过order50可以找到user50
user实体类:
package com.c50.entity;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;
//代表此类参与ORM映射,此注解必须要有
@Entity
//代表user这个类映射了一个表user50,如果表名和类名一样,此注解可以省略
@Table(name="user50")
public class User {
//主键,此注解必须要有
@Id
//数据库表中主键列名为id,如果实体类属性名和列名相同,此注解可以省略
@Column(name="id")
//主键的维护策略
@GenericGenerator(name="inc50",strategy="increment")
@GeneratedValue(generator="inc50")
private Integer userID;
private String name;
private Integer age;
@Column(name="birth")
//此属性是日期类型,time:只保存时间 date:只保存日期 timestamp:(默认)日期+时间
@Temporal(TemporalType.DATE)
private Date birthday;
//关系属性
//mappedBy="对方中映射着外键的关系属性"=="order类中关系属性为user"
@OneToMany(mappedBy="user")
//ALL:增删改都可以级联(cascade)
//save-update:增加和更新可以级联
//delete:删除可以级联
//如果不设置,则增删改都不可以级联
//注意:查询例外,不受级联权限的控制,默认级联。
@Cascade(value=CascadeType.DELETE)
private Set<Order> orders=new HashSet<Order>();
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
public User(){}
public User(Integer userID, String name, Integer age, Date birthday) {
super();
this.userID = userID;
this.name = name;
this.age = age;
this.birthday = birthday;
}
public Integer getUserID() {
return userID;
}
public void setUserID(Integer userID) {
this.userID = userID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User [userID=" + userID + ", name=" + name + ", age=" + age
+ ", birthday=" + birthday + "]";
}
}
order实体类:
package com.c50.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="order50")
public class Order {
@Id
@GenericGenerator(name="inc50",strategy="increment")
@GeneratedValue(generator="inc50")
private Integer id;
private Double price;
private String note;
//关系属性
@ManyToOne
@JoinColumn(name="user_id")
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
@Override
public String toString() {
return "Order [id=" + id + ", price=" + price + ", note=" + note + "]";
}
public Order(){}
public Order(Integer id, Double price, String note) {
super();
this.id = id;
this.price = price;
this.note = note;
}
}
测试代码:
package com.c50.test;
import java.util.Date;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.c50.entity.Order;
import com.c50.entity.Passport;
import com.c50.entity.User;
import com.c50.entity.User;
import com.c50.util.HibernateUtil;
public class TestOne2Many {
@Test
public void testQuery(){
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//User user=(User)session.get(User.class,2);
Order order=(Order)session.get(Order.class,1);
/*for(Order order:user.getOrders()){
System.out.println(order);
}
System.out.println(user);*/
tx.commit();
}
/**
* 1.单独插入主表:和单表插入无异。略
* 2.单独插入从表:为已有的主表附加数据
*/
@Test
public void testInsert(){
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//查询主表数据
User user=(User)session.get(User.class,1);
//创建从表数据
Order order=new Order(null,500.50,"c50");
//维护关系:告知order,其从属哪个user,以获得外键来源
order.setUser(user);
//保存
session.save(order);
tx.commit();
}
/**
* 3.同时插入双方:级联插入
*/
@Test
public void testInsert2(){
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//创建双方数据
User user=new User(null,"liwenhao",18,new Date());
Order order=new Order(null,300.50,"c50");
//维护关系
user.getOrders().add(order);//使得user可以携带order一起入库保存
order.setUser(user);//使得order有外键来源
//保存
session.save(user);
tx.commit();
}
/**
* 删除 1.输出主表:级联删除
*/
@Test
public void testDelete(){
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//查询要删除的主表
User user=(User)session.get(User.class, 3);
//删除
session.delete(user);
tx.commit();
}
/**
* 删除 2.单独删除从表:和单表操作无异
*/
@Test
public void testDelete2(){
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//查询要删除的从表
Order order=(Order)session.get(Order.class,5);
//删除
session.delete(order);
tx.commit();
}
/**
* 更新:
* 1.单独更新一方
* 2.级联更新双方 更新时的注意: 如果A不是孤立的表,且,A上明确映射了外键的话,则在更新A时,就不能直接更新new出来的A, 而是应该先查询,改属性,更新(事务内部加载出的数据)
*/
@Test
public void testUpdate(){
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//1.获取数据
User User=(User)session.get(User.class,6);
//2.修改属性
User.setName("cuiyafeng55");
User.setAge(19);
//更新
session.update(User);
tx.commit();
}
}
HIbernate的增删改的更多相关文章
- Hibernate全套增删改查+分页
1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...
- SpringMVC整合Hibernate实现增删改查之按条件查询
首先我贴出我项目的结构,只完成了条件查询的相关代码,增删改没有写. 1.新建一个动态Web工程,导入相应jar包,编写web.xml配置文件 <context-param> <par ...
- Hibernate的增删改查
一.搭建Hibernate开发环境,这里就不说了,直接说环境搭好后的事情. 二.项目的目录结构
- hibernate实现增删改查的各种方法
1>接口(主要是增删改查的接口)BaseDao.java /** * * @author fly.zhou */ public interface IBaseDao { //增加对应实体的一条记 ...
- EasyUI + Spring MVC + hibernate实现增删改查导入导出
(这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...
- hibernate之增删改查demo
package dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import o ...
- Hibernate基础增删改查语法
1.创建好Hibernate项目,创建好实体类和测试类,如果不会创建Hibernate项目的同学,点此处:http://www.cnblogs.com/zhaojinyan/p/9336174.htm ...
- (四)Hibernate的增删改查操作(1)
Hiberntae的查找操作有多种: 1. 使用Criteria接口查询 Query_Criteria.java package action; import java.util.ArrayList ...
- hibernate学习笔记之四 Hibernate的增删改查
采用JUnit测试,继承TestCase import java.util.Date; import junit.framework.TestCase; import org.hibernate.Se ...
随机推荐
- ubuntu 安装配置jdk+eclipse+android sdk
共5步: 1.安装jdk 2.安装eclipse 3.安装android-sdk 4.安装adb 5.在eclipse中安装ADT 1.安装jdk 之前已经安装好了. 用下面的命令安装,只需一些时间, ...
- Android蓝牙实例(和单片机蓝牙模块通信)
最近做毕设,需要写一个简单的蓝牙APP进行交互,在网上也找了很多资料,终于给搞定了,这里分享一下^_^. 1.Android蓝牙编程 蓝牙3.0及以下版本编程需要使用UUID,UUID是通用唯一识别码 ...
- 第一篇使用Markdown的文章
一级标题 1 计算机 |计算机|科学| Foo 这段文字需要被强调 this is H1 ========== this is H2 ---------- 这是H1 这是H2 这是H3 这是H6 断好 ...
- 《Python核心编程》部分错误纠正(勘误表)(持续更新)
Chapter 3: 例3-1 makeTextFile.py #!/usr/bin/env python 'makeTextFile.py' import os ls = os.linesep #g ...
- ADO.Net 增、删、改、查(基本项)
数据访问 对应命名空间:System.Data.SqlClient; SqlConnection:连接对象 SqlCommand:命令对象 SqlDataReader:读取器对象 CommandTex ...
- [No00003B]string格式的日期时间字符串转为DateTime类型
新建console程序,复制粘贴直接运行: /**/ //using System.Globalization;//代码测试大致时间2015/11/3 15:09:05 //方法一:Convert.T ...
- luogu1328[NOIP2014 T1]生活大爆炸版石头剪刀布
题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...
- koala编译scss文件时不支持中文字体的解决方案
第一种方案:在scss文件第一行加上这行代码@charset "utf-8"; 第二种方案: scss文件编译时候使用ruby环境,出现 Syntax error: Invalid ...
- HTML 学习笔记 CSS3(过度 transition)
通过 CSS3,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果.请把鼠标移动到下面的元素上: 先看一下这个代码 实现旋转放大的效 ...
- usb驱动开发22之驱动生命线
我们总是很喜欢高潮,不是吗?那就好好对待她哦.我们来看一下linux中的高潮部分设备是怎么从Address进入Configured的. usb_set_configuration函数的代码就不贴了,可 ...