Hibernate注解开发示例
-------------------------------------------------------------------customer-----------------------------------------------------------------------------------------------------------------------------
@Entity /实体
@Table(name="t_customer") //数据库表的名称,
public class Customer {
@Id -------------主键
@GeneratedValue(strategy=GenerationType.IDENTITY) //主键生成策略,自动增长
//@GenericGenerator(name="myuuid",strategy="uuid") //代理主键为UUID时的操作
//@GeneratedValue(generator="myuuid")
private Integer id ;
private String name ;
@OneToMany(targetEntity=Order.class,mappedBy="c") //目标实体, mappBy="c"代表外键的维护由对方也就是Order来维护.相当于inverse=true,这时如果保存客户时,级联保存订单.是可以的,但是不能维护外键,必须在代码中添加订单和客户的关系.
@Cascade(CascadeType.SAVE_UPDATE ) //
private Set<Order> orders = new HashSet<Order>() ;
-------------------------------------------------------------------Order----------------------------------------------------------------------------------------------------------------------------
@Entity //实体
@Table(name="t_Order") //数据库表的名称,数据库名在核心配置文件有,在这不用写.
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id ; //用引用类型,便于转换字符串,为空时返回值为null.
private Double money;
private String receiverInfo;
@ManyToOne(targetEntity=Customer.class) //目标实体
@JoinColumn(name = "customer_id") //指定外键列
private Customer c ; //描述订单属于某一个客户
-------------------------------------------------------------------Test----------------------------------------------------------------------------------------------------------------------------
@Test
public void test01(){
//调用工具类,创建session.
Session session = HibernateUtils.openSession();
//开启事务
session.beginTransaction();
//创建
Customer c = new Customer();c.setName("wangwu");
Order o1 = new Order();o1.setMoney(1000.0); o1.setReceiverInfo("beijing");
Order o2 = new Order();o2.setMoney(1000.0);o2.setReceiverInfo("beijing");
//订单关联客户,保存订单时保存客户
//------------------------------------为了维护外键(要想显示外键必须写上)
o1.setC(c);o2.setC(c);
//session.save(o1);
//session.save(o2);
//客户关联订单,既保存客户时保存订单,为了进行级联操作
c.getOrders().add(o2); c.getOrders().add(o1);session.save(c);
//事务提交和session关闭
session.getTransaction().commit();
session.close();
-------------------------------------------------------------------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"> -----------configuration约束
<hibernate-configuration>
<session-factory>
<!-- 配置关于数据库连接的四个项 driverClass url username password -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernatetest</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!-- 设置连接提供者 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- c3p0连接池的配置 -->
<property name="hibernate.c3p0.max_size">20</property> <!-- 最大连接池 -->
<property name="hibernate.c3p0.min_size">5</property> <!-- 最小连接数 -->
<property name="hibernate.c3p0.timeout">120</property> <!-- 超时 -->
<property name="hibernate.c3p0.idle_test_period">3000</property> <!-- 空闲连接 -->
<!-- 可以将向数据库发送的sql显示出来 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 自动创建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 用于设置事务提交方式 -->
<property name="hibernate.connection.autocommit">false</property>
<!-- 配置hibernate的映射文件所在位置 如果用xml开发的话,Class换成resource-->
<mapping class="cn.itcast.domain.Customer" />
<mapping class="cn.itcast.domain.Order" />
</session-factory>
</hibernate-configuration>
-------------------------------------------------------------------删除操作 ----------------------------------------------------------------------------------------------------------------------------
@Test
public void test02(){
Session session = HibernateUtils.openSession();
session.beginTransaction();
//得到客户
Customer c = session.get(Customer.class, 2);
//得到订单
Order o = session.get(Order.class, 3);
//删除客户的订单
c.getOrders().remove(o);-------------------------------------在客户实体类的@OneTOMany括号里添加orphanRemoval=true
//session.delete(c);--------------------------------------------如果直接删除某个客户,在@OneTOMany下面使用hibernate提供的注解@cascade(CascadeType.delete)
//提交事务
session.getTransaction().commit();
session.close();
}
Hibernate注解开发示例的更多相关文章
- (转) Hibernate注解开发
http://blog.csdn.net/yerenyuan_pku/article/details/70162268 Hibernate注解开发 在Hibernate中我们一般都会使用注解,这样可以 ...
- Hibernate注解开发详解
*****************关于注解的简单介绍 详细介绍请点击这里注解详细教程 package com.tomowork.pojo; import org.hibernate.annotatio ...
- Hibernate注解开发、注解创建索引
1.注解的目的 简化繁琐的ORM映射文件(*.hbm)的配置 2.JPA和hibernate的关系 JPA:java persistence API,JPA注解是JavaEE的标准和规范. 两者的关系 ...
- Hibernate注解开发教程
目录 第一章 类级别注解 1-1 本章简介 一.Hibernate注解简介 二.JPA与Hibernate的关系 三.Hibernate注解的分类 1-2 准备工作 1-3 @Entity注解 1-4 ...
- Hibernate的应用与注解开发
Hibernate注解可以帮助我们大大简化hbm映射文件的配置,学习记录之. 先看示例: 1 package com.webShop.domain; 2 import java.io.Serializ ...
- 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)
轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...
- Hibernate Validation使用示例及讲解
Hibernate Validation使用示例及讲解 时间 -- :: ITeye-博客 原文 http://wdmcygah.iteye.com/blog/2174680 主题 Java 在项目开 ...
- JPA注解开发
JPA注解开发 jpa是sun公司的一个ORM规范,只有接口和注解,没有具体实现. jpa是EJB3中的. 单表常用注解 书写注解,并配置 @Entity @Table(name = "c_ ...
- Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式
①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...
随机推荐
- Python快速入门_1
注释 # 用#号字符开头注释单行 """ 三个引号可以注释多行 三个引号可以注释多行 三个引号可以注释多行 """ 原始数据类型和运算符 ( ...
- Jquery实现自动生成二级目录
在博客园开通博客以后,就看到某位博友写的js自动生成目录的文章,当时觉得生成目录能给阅读带来方便,所以就直接拿来使用了.用了一段时间以后,发现只能生成一级目录,不能生成多级目录,有点美中不足.所以想着 ...
- LaTeX 修订
LaTeX多人协同编辑的时候,修订起来与word相比较而言麻烦一些.不过随着技术的发展和需求的增多,会有越来越多的工具支持LaTeX的修订. (1)在线LaTeX ShareLaTeX是一个很优秀的在 ...
- DJango小总结二
1.Django请求的生命周期 武彦涛: 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 王腾: ...
- 键盘按键keyCode大全,js页面快捷键
字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 3 ...
- Flask插件---flask_script与flask_migrate
import app from flask_script import Manager from flask_migrate import Migrate,MigrateCommand my_app ...
- H5新特性-----type=file文件上传
1.语法 单文件上传:<input type="file" id="file1"/> 多文件上传:<input type="file ...
- 有关ie9 以下不支持placeholder属性以及获得焦点placeholder的移除
(一)placeholder 属性起到提示客户输入信息作用 (二)ie9以下出问题了 placeholder不支持 (三)解决办法 先贴html 加上jquery代码就可以了 关于表单获取焦点,chr ...
- CSS3中的Flexbox弹性布局(一)
CSS3引入了一种新的布局模式——Flexbox布局,即伸缩布局盒模型(Flexible Box),用来提供一个更加有效的方式制定.调整和分布一个容器里项目布局,即使它们的大小是未知或者动态的,这里简 ...
- java生成实体类的工具内部是如何实现的(mysql)
一.认识INFORMATION_SCHEMA数据库 INFORMATION_SCHEMA数据库提供了访问数据库元数据(数据的数据)的方式 该数据库中存放有数据库名.表名,列名.列的数据类型等各种数据 ...