博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(三)hibernate单表操作
阅读量:4959 次
发布时间:2019-06-12

本文共 3012 字,大约阅读时间需要 10 分钟。

 

 

0.  贴上节hbm文件
 
1.单一主键
单一主键:指表中由某一列来充当主键assigned 由java应用程序负责生成(手工赋值)native 由底层数据库自动生成提示符,如果是MySQL就是increment,如果是Oracle就是sequence,等等。另外,即使手动赋值主键,也不会起作用。
mysql 中为AUTO_INCREMENT PRIMARY KEY 只要generator主键生成方式设置为native,即使设置了id,也是没有作用的。hibernate会调用数据库的ID增长方式 assigned 当为int时 默认0 其他默认null
2.基本类型(易出错)
第一列是hibernate映射类型,  第二列是java类型的格式,    第三列是对应的标准sql类型的格式。
 
需要注意的:
 
date 表示日期:YYYY-MM-ddtime 表示时间:hh:mm:sstiemstamp 时间戳: yyyy-MM-dd hh:mm:ss另外,映射的数据类型设置会决定最后数据库中的类型。比如我们在Java程序中使用的是java.util.Date类型定义变量Birthday。但在映射关系的配置文档中对应的type改成date类型,那么最后保存在数据库 的Birthday类型就是date,也就是YYYY-MM-dd,而非java.util.Date(或者timestamp)的YYYY-MM-dd hh:mm:ss。
3.对象类型 3.1  常见类型
java中clob是大文本数据类型,blob是能存储大量二进制的数据类型。 3.2 hibernate写入对象类型数据     3.2.1 演示用Blob类型将照片文件存储进数据库
3.2.2 演示如何从数据库读取存入的图片,即Blob数据。(在此之前需要将配置文件中的create改为update,防止未读取就删除)
update

4.组件属性
组件属性:
标签表示,实体中成员变量的类型是用户自定义的类型。按hibernate的规则,基础类型使用
标签,而非基础类型就使用
标签。
标签中,name表示这个对象的名字,class表示这个对象是哪个用户自定义类型。其中的property是指,用户自定义类型中的成员变量。而声明了
的那个成员变量,在数据库中的表示方式是:这个用户自定义类型的成员变量中的成员变量,将以列的方式显示在数据库中。 即有该变量有三个成员变量,那么数据库中的表就多出对应的三列。
5.单表操作CRUD实例 save&  update&  delete&    get/load
@Test    public void testGetStudents(){        Students s=(Students) session.get(Students.class, 1);  //.get(查询表对应的类对象, 查询对象的主键);        System.out.println(s.toString());            }        @Test    public void testLoadStudents(){        Students s=(Students) session.load(Students.class, 1);  //.load(查询表对应的类对象, 查询对象的主键);        System.out.println(s.toString());            }        @Test    public void testUpdateStudents(){        Students s=(Students) session.get(Students.class, 1);          s.setGender("女");        session.update(s);        session.flush();    }        @Test    public void testDeleteStudents(){        Students s=(Students) session.get(Students.class, 2);          System.out.println(s.toString());        session.delete(s);        session.flush();    }
get/load(查询单个记录)的区别:1.  在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。    load方法会在调用之后返回一个代理对象。该代理对象只保存了实体对象的主键ID,直到使用对象的非主键属性时才会发出sql语句。2.  查询数据库中不存在的数据时,get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException
查询所有记录:
@Test    public void testQueryAllStudents(){         String hql="from Students";        List
studentsList=session.createQuery(hql).list(); for(Students students:studentsList){ System.out.println(students.toString()); } }
问题:查询能执行,但update&delete不能执行,后添加flush()强制输出sql语句也不成功。。(控制台输出删改语句,但表结构一直没变) 解决办法:开启事务 小结:

 

 

转载于:https://www.cnblogs.com/zjfjava/p/6593183.html

你可能感兴趣的文章
C/C++判断文件是否存在
查看>>
基础总结1
查看>>
随机算法
查看>>
洛谷 P1443 马的遍历
查看>>
AutoMapper中的Map和DynamicMap——高手注重细节,思考和总结
查看>>
html5离线应用application cache
查看>>
sqlserver 获取实例上用户数据库的数据字典
查看>>
【伯乐在线】每个程序员都该知道的编码准则
查看>>
Priority_queue详解
查看>>
痛苦的版本对齐
查看>>
C++内存分配
查看>>
programming review (c++): (2)binary tree, BFS, DFS, recursive, non-recursive
查看>>
windows 查看端口占用情况
查看>>
php基础-字符串处理
查看>>
Java中的注解以及应用 @Deprecated @SupressWarning @Override
查看>>
oracle自治事务(PRAGMA AUTONOMOUS_TRANSACTION)
查看>>
6.5.4稀疏表示与基筛选
查看>>
Codeforces Round #310 (Div. 2)简洁题解
查看>>
.Net Sokcet 异步编程
查看>>
tp js结合时间戳
查看>>