delete

@Test
public void testDelete() { Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setBrithday(new Date()); Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(t);
System.out.println(t.getId());
session.getTransaction().commit(); Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.delete(t);
session2.getTransaction().commit();
} @Test
public void testDelete2() {
//删除不了
Teacher t = new Teacher();
t.setId(2); Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.delete(t);
session2.getTransaction().commit();
}

注意这个的区别 load返回的是代理对象,get直接加载

	@Test         //从数据库拿一条记录
public void testLoad() { Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//得到主键为1记录 然后变成一个对象
Teacher t = (Teacher)session.load(Teacher.class, 1);
//得到的是一个代理,并没有发出sql语句 需要的时候才发出
//比如说Teacher t = (Teacher)session.load(Teacher.class, 55);55不存在也不报错
session.getTransaction().commit();
System.out.println(t.getClass());<span style="font-family: Arial, Helvetica, sans-serif;"> //测是不是代理对象返回com.zjx.hibernate.Teacher_$$_javassist_1 (父类是teacher) 这个是代理对象</span> //System.out.println(t.getName()); 这句放这会报错,
} @Test
public void testGet() { Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher)session.get(Teacher.class, 1);
//当用get方法的时候是马上拿的,直接从数据库加载不产生延迟
//比如说Teacher t = (Teacher)session.load(Teacher.class, 55);55不存在会报错!!
session.getTransaction().commit();
System.out.println(t.getClass()); //测是不是代理对象 返回 com.zjx.hibernate.teacher 所以不是代理对象
//System.out.println(t.getName());
}

Update()方法

1 用来更新detached对象,更新完成之后成为persistent.

2 更新transient对象会报错. 更新自己设定id(前提是id在数据库中存在)的transient对象可以.

3 持久化的对象只要设定不同字段就会发生更新

4 更新部分更改的字段(三种方法)

l  XML设定property标签的update=true|false属性,

annotation设定@Column(updatable=false)属性,这种方式少用,不灵活.

l  XML设定class标签的dynamic-update=”true”属性,

同一个session中可以,跨session不行.跨session时的实现方法不过可以用session的merge().merge方法会先从数据库load,将得到的和数据库中的进行对比,再update更改过的字段.

JPA1.0 Annotation没有对应的属性,Hibernate

l  使用HQL(EJBQL)(建议使用)

public void testUpdate7() {

		//常用的方法
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//里面放的是 select or update 语句 类名 对象
Query q = session.createQuery("update Student s set s.name='z5' where s.id = 1");
q.executeUpdate();
session.getTransaction().commit(); }
	@Test
public void testSaveOrUpdate() { Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setBrithday(new Date()); Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.saveOrUpdate(t); //save session.getTransaction().commit();
//t变成托管对象
t.setName("t2"); Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.saveOrUpdate(t); //update
session2.getTransaction().commit(); } @Test
public void testClear() { Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher)session.load(Teacher.class, 1);
System.out.println(t.getName());//输出select语句 session.clear();//未加这条只有一个select语句 Teacher t2 = (Teacher)session.load(Teacher.class, 1);
System.out.println(t2.getName());
session.getTransaction().commit(); } @Test
public void testFlush() { Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher)session.load(Teacher.class, 1);
t.setName("tttt"); session.flush();//未加这条只有一句set语句 强制让缓存和 数据库数据做同步
//和clear的区别就是 clear不进行下面这句 t.setName("ttttt"); session.getTransaction().commit(); } @Test
public void testSchemaExport() { //自动建表
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

hibernate---CRUD的更多相关文章

  1. Hibernate CRUD操作

    版权声明:本文为博主原创文章,如需转载请标注转载地址 博客地址:http://www.cnblogs.com/caoyc/p/5594789.html  对于Hibernate的增删改查,我们还是用一 ...

  2. Hibernate框架--配置,映射,主键

    SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate,    基于持久层的框架(数据访问层使用)! Spring,   创建对象处理对象的依赖关系以及框架整合! Da ...

  3. 一起学习Hibernate: Hibernate01 —— Hibernate的概述与入门案例

    一 Hibernate的介绍 1 让我们从JDBC与替代它的框架Hibernate进行一下对比. 1.1 JDBC的缺点 1) 代码结构繁琐.每次书写sql语句操作数据库都得需要很多步; 2) 是面向 ...

  4. ssh架构之hibernate(五)hql语句狂练

    1.练习题 1.查询所有商品的名称[查询特定属性](只有一个参数的话可以使用List<String>接收数据)2.查询所有商品的名称和供应商[查询特定属性](多个参数可以使用List< ...

  5. ssh架构之hibernate(二)进阶学习

    1.JPA入门 JPA的认识:JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中Java持久层AP ...

  6. Hibernate框架基础

    Hibernate框架基础 Hibernate框架 ORM概念 O, Object 对象 R, Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Mapping 映射 OR ...

  7. java深入探究12-框架之Hibernate

    1.引入SSH框架 Struts框架,基于MVC 模式的应用层框架技术 Hibernate,基于持久层框架(数据访问层使用) Dao代码编写的几种方式: 1.原始jdbc操作,Connection/S ...

  8. springmvc4开发rest

    Spring MVC 4 RESTFul Web Services CRUD Example+RestTemplate Created on:  August 11, 2015  | Last upd ...

  9. springdata笔记2

    SpringData整合hibernate CRUD操作: pom.xml <?xml version="1.0" encoding="UTF-8"?&g ...

  10. springdata笔记

    SpringData整合hibernate CRUD操作: applicationContext.xml: <?xml version="1.0" encoding=&quo ...

随机推荐

  1. javscript处理XML DOM(待续)

    1.加载并解析XML文件 function loadXMLFile(url){ var xmldoc if(window.ActiveXObject){ xmldoc = new ActiveXObj ...

  2. winform的datagridview单元格输入限制和右键单击datagridview单元格焦点跟着改变

    在datagridview的EditingControlShowing事件里面添加代码: if (this.dgv_pch.Columns[dgv_pch.CurrentCell.ColumnInde ...

  3. sublime几个有用的快捷键

    几个有用的快捷键:Ctrl+D:选择多个相同字符串进行修改.选中字符串,按住Ctrl+D,继续选中下一个.Ctrl+Shift+L:将选中的内容切割成多行,然后每一行可以同时编辑Ctrl+J:将已选择 ...

  4. m3u8

    audo apt-get install pkg-configsudo apt-get install automake autoconf m4 libtool sudo apt-get instal ...

  5. 发布web项目时,忽略指定文件夹或文件

    参考:http://blogs.msdn.com/b/webdev/archive/2010/04/22/web-deployment-excluding-files-and-folders-via- ...

  6. WinForm 加载自定义控件闪烁问题

    WinForm加载多个自定义控件时,会出现很严重的闪烁问题,很卡,一块一块的加载(像打开网页时,网络很卡的那种感觉)简直没法忍受. 在网上搜索了好久,网上大部分的方法是一下4种,但是都不能有效的解决问 ...

  7. C 中 关于printf 函数中度剖析

    题外话  这篇博文主要围绕printf函数分析的,主要讲解printf 使用C的可变参数机制, printf是否可重入(是否线程安全), printf函数的源码实现. 正文 1.C中可变参数机制 我们 ...

  8. 源码解析之setContentView

    分享一下我以前学习时做到PPT中的一部分. 不难看出其实设置布局是由PhoneWindow来完成的. 然而我们要记住DecorView: 包括:状态栏,标题栏,内容 phoneWindow -> ...

  9. hdu 1212 Big Number

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1212 Big Number Description As we know, Big Number is ...

  10. .net 高效管理稀缺资源(数据库资源,文件资源等)

    MSDN建议按照下面的模式实现IDisposable接口: public class Foo: IDisposable { public void Dispose() { Dispose(true); ...