hibernate---CRUD
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的更多相关文章
- Hibernate CRUD操作
版权声明:本文为博主原创文章,如需转载请标注转载地址 博客地址:http://www.cnblogs.com/caoyc/p/5594789.html 对于Hibernate的增删改查,我们还是用一 ...
- Hibernate框架--配置,映射,主键
SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate, 基于持久层的框架(数据访问层使用)! Spring, 创建对象处理对象的依赖关系以及框架整合! Da ...
- 一起学习Hibernate: Hibernate01 —— Hibernate的概述与入门案例
一 Hibernate的介绍 1 让我们从JDBC与替代它的框架Hibernate进行一下对比. 1.1 JDBC的缺点 1) 代码结构繁琐.每次书写sql语句操作数据库都得需要很多步; 2) 是面向 ...
- ssh架构之hibernate(五)hql语句狂练
1.练习题 1.查询所有商品的名称[查询特定属性](只有一个参数的话可以使用List<String>接收数据)2.查询所有商品的名称和供应商[查询特定属性](多个参数可以使用List< ...
- ssh架构之hibernate(二)进阶学习
1.JPA入门 JPA的认识:JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中Java持久层AP ...
- Hibernate框架基础
Hibernate框架基础 Hibernate框架 ORM概念 O, Object 对象 R, Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Mapping 映射 OR ...
- java深入探究12-框架之Hibernate
1.引入SSH框架 Struts框架,基于MVC 模式的应用层框架技术 Hibernate,基于持久层框架(数据访问层使用) Dao代码编写的几种方式: 1.原始jdbc操作,Connection/S ...
- springmvc4开发rest
Spring MVC 4 RESTFul Web Services CRUD Example+RestTemplate Created on: August 11, 2015 | Last upd ...
- springdata笔记2
SpringData整合hibernate CRUD操作: pom.xml <?xml version="1.0" encoding="UTF-8"?&g ...
- springdata笔记
SpringData整合hibernate CRUD操作: applicationContext.xml: <?xml version="1.0" encoding=&quo ...
随机推荐
- POJ C程序设计进阶 编程题#1:单词翻转
编程题#1:单词翻转 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一 ...
- C#中sizeof的用法实例分析
这篇文章主要介绍了C#中sizeof的用法,包括了常见的用法及注释事项,需要的朋友可以参考下. sizeof是C#中非常重要的方法,本文就以实例形式分析C#中sizeof的用法.分享给大家供大家参 ...
- 02-线性结构2 Reversing Linked List
由于最近学的是线性结构,且因数组需开辟的空间太大.因此这里用的是纯链表实现的这个链表翻转. Given a constant K and a singly linked list L, you are ...
- 实战Django:简易博客Part1
舍得学习新技能的时候,通常不喜欢傻读书--捧着一本阐述该项技能的书籍,然后傻看,一路看下来,脑子里塞满了新的概念.知识点,头是越来越大,但技能却几乎没掌握半分. 多年来,舍得养成了用做实例来学习新技能 ...
- 整齐地输出n的平方,立方
初学C语言,有许多搞不明白的地方.编程,最重要的就是实践.今天,我偶然间看到书上的练习,做了一个能整齐地输出n,n的平方,n的立方的小程序.首先,我先用伪代码设计程序: 提示用户输入表格上限,下限或退 ...
- 动态切换采用 CSplitterWnd 静态划分的视图布局(MFC)
标题读起来有些拗口,具体是什么情况,我们来看: 一.问题的提出 一个采用MFC开发的软件,其窗体视图采用CSplitterWnd三分,效果如下图所示: 图1 软件的默认视图布局 该MFC开发的软件功能 ...
- android Init 相关分析
Init.c主要工作 1. 初始化属性(包括建立/dev./proc等目录.初始化属性.log.执行init.rc等初始化文件中的action等). 2. 解析配置文件的命令(主要是init.rc文件 ...
- Run ionic web app in nodejs
首先需要express插件:sudo npm install express 将ionic project的www拷贝至wwwroot,新建server.js: var express = requi ...
- 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记
一:移植Boa(web服务器)到嵌入式Linux系统 一.Boa程序的移植 1.下载Boa源码 下载地址: http://www.boa.org/ 目前最新发行版本: 0.94.13 ...
- windows CE 6.0编译报BLDDEMO: There were errors building MY283错误解决办法
今天开始正式进入windows ce程序开发. 第一次编译windows ce6.0的系统,25分钟编译后报:BLDDEMO: There were errors building MY283 错误. ...