Hibernate操作表单
来源:互联网 发布:手机直播源码教程 编辑:程序博客网 时间:2024/05/18 09:02
单表操作
单一主键
(1)assigned 由java应用程序负责生成(手工赋值)
(2)native 由底层数据库自动生成标示符,如果是MySQL就是increment,如果是Oracle就是sequence,等等
Ps1:assigned注意:如果实体类中设置的主键id是基本类型int的话,则可以不用赋值,系统默认值为0;如是引用类型Integer话,则默认值为null,不赋值系统则报错。
Ps2:native注意:系统会自动选择该数据库对应的自动增值方式,从1开始。即使手动给他赋值,也不会起作用,但也不会报错。
hibernates数据类型
特别关注date和timestamp类型
数据类型
Java中blob对象
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。
在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
在持久类中添加一个blob类型的picture,利用hibernate对数据库进行操作
@Testpublic void testWriteBlob() throws Exception{ //先获得照片文件 File f=new File("C:\\Users\\john\\Pictures\\tag.jpg"); //获得照片文件输入流 InputStream input =new FileInputStream(f); //创建一个Blob对象 Blob image=Hibernate.getLobCreator(session).createBlob(input, input.available()); //设置照片属性 user user=new user(); user.setId(1); user.setPassword("rose"); user.setUsername("rose"); user.setPicture(image); //保存 session.save(user);}
**记得把配置文件中的 <property name="hbm2ddl.auto">update</property>
**
改成update
这段代码会在原有的数据表的基础上更新数据表,添加一个字段名为picture的longblob类型的对象。
可以再写一个测试方法用来读取该图片是否已经写进数据库中
@Test public void testReadBlob() throws Exception{ user user=(user)session.get(user.class, 1); //获得Blob对象 Blob image=user.getPicture(); //获得照片输入流 InputStream input=image.getBinaryStream(); //创建输出流 File f=new File("C:\\Users\\john\\Pictures\\copytag.jpg"); //获得输出流 OutputStream output=new FileOutputStream(f); //创建缓冲区 byte[] buff=new byte[input.available()]; input.read(buff); output.write(buff); input.close(); output.close();}
如果在该路径下找到了文件名为copytag.jpg的文件,则表明该写入成功
-hibernate还有一种类型是组件属性
组件属性:实体类中的某个属性属于用户自定义类的对象;
作用:将两个实体类合并在一起组建成一个表;
在hbm.xml文件中配置:
格式:
<component name="取的名字" class="完整类名"><property name="类中属性" column="对应生成数据库中列属性名"></component>
完整类名:如果该类有包名,则需要加上包名,且用(.点 )来连接。
单表的CURD操作,即增删改查,会用到以下几个方法
1、save()
2、update()
3、delete()
4、get/load(查询单个记录)
get/load方法的区别
1.数据不存在,get方法返回null。
2.load方法,抛出ObjectNotFoundException
3.调用get方法后,直接发出sql语句,返回一个实体对象。
4.调用load方法后,返回一个代理对象,就是假的对象,里面只有实体对象的id存在,用到实体对象的其他属性时,才会发出sql获取一个完整的实体对象。
####openSession与getCurrentSession的区别?
1、前者每次都是创建新的session对象,而后者使用单例模式,每次创建都是相同的对象。openSession在使用完毕后需要显式地关闭,而getCurrentSession在事务提交之后会自动关闭。
2、他们都是来自于SessionFactory,如果使用getCurrentSession方法则需要在hibernate.cfg.xml文件中进行配置:
如果是本地事务(jdbc事务)
<propertyname="hibernate.current_session_context_class">thread</property>
如果是全局事务(jta事务)
<propertyname="hibernate.current_session_context_class">jta</property>
最后,总结一下开发Hibernate的步骤
(1)编写配置文档hibernate.cfg.xml
(2)编写实体类。注意:每一个实体类都要与数据库中的一张表一一对应,实体类的编写要遵循JavaBean的要求。
(3)生成对应实体类的映射文件并添加到配置文档中
(4)调用Hibernate API进行测试
- Hibernate表单操作
- Hibernate操作表单
- Hibernate表单操作
- hibernate 操作
- hibernate操作
- 【Hibernate】Hibernate 操作对象
- hibernate初探之表单映射
- 多表单操作
- jQuery 操作 表单
- 使用JavaScript操作表单
- jQuery表单常用操作
- jQuery表单常用操作
- 使用JavaScript操作表单
- jquery 操作表单元素
- jQuery表单常用操作
- 使用JavaScript操作表单
- jquery操作表单元素
- 常用表单操作
- Ubuntu中配置shadowsocks代理
- 136. Single Number and与、或、异或、取反、左移和右移运算
- [无向图简单环计数 状压DP] Codeforces 11D Beta Round #11 D. A Simple Task
- 两步快速配置java环境
- 构建jscript.debug包
- Hibernate操作表单
- LeetCode 第50题 Pow(x, n) [log(n)]
- POJ 2610 Dog & Gopher G++
- openlayers与echarts3的结合使用
- 一个有趣的题目【二分答案,2-SAT,线段树优化】
- css样式选择器
- Git操作的命令
- Struts的数据处理方式
- [BZOJ4449][Neerc2015][分治][最短路]Distance on Triangulation