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 ...
随机推荐
- php无法加载Memcache缓存模块问题及Memcache的安装
今天早上去迁移网站发现打开网站报错 然后我去phpinfo.php看了一下,果然我的测试页里面有加载到Memcache这个模块,如下图: 这时候,既然发现了问题的所在我们就要去排查问题,当前这个问题呢 ...
- Creating a Unique File Name
If you are working with files or file attachments in PeopleCode, you will typically want to create a ...
- c# await 关键字错误
private void OnUnlockCommand(object parameter) { StorageFile file = await Windows.Storage.Applica ...
- 开篇 hello 内Cool超人
经过一年时间看到asp.net mvc一直被受微软开发团队的注重.与之相比的silverlight我感觉到有点力不从心.除去silverlight第一次运行要安装Runtime不说,产品不可能只运行在 ...
- 在 PHP 中结合 Ajax 技术进行图片上传
前面几则日志中讲述了在 PHP 中上传文件,相信大家对 PHP 中如何进行文件上传已经初步掌握.本文来继续探讨在 PHP 中上传文件的技术,不同的是,本次上传将仅限于图片文件的上传,并且将采用 Aja ...
- C#高级功能(二)LINQ 和Enumerable类
介绍LINQ之前先介绍一下枚举器 Iterator:枚举器如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.我们将以创建一个简单化的 ...
- PHP引用文件
require: 可能多次执行的代码用require效率要稍高 require_once: 唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含 include: 语句包含并运行指定 ...
- USB设备驱动
在Linux 内核中,使用usb_driver 结构体描述一个USB 设备驱动,usb_driver 结构体的定义如代码清单20.11 所示.代码清单20.11 usb_driver 结构体 stru ...
- Test,Nginx Hello World Module
ngx_addon_name=ngx_http_mytest_module HTTP_MODULES="$HTTP_MODULES ngx_http_mytest_module" ...
- Python学习教程(learning Python)--2 Python简单函数设计
本节讨论Python程序设计时为何引入函数? 为何大家都反对用一堆堆的单个函数语句完成一项程序的设计任务呢? 用一条条的语句去完成某项程序设计时,冗长.不宜理解,不宜复用,而采用按功能模块划分成函数, ...