0. 贴上节hbm文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-3-6 16:43:30 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="hibernate_01.Students" table="STUDENTS">
<id name="sid" type="int">
<column name="SID" />
<generator class="assigned" />
</id>
<property name="sname" type="java.lang.String">
<column name="SNAME" />
</property>
<property name="gender" type="java.lang.String">
<column name="GENDER" />
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY" />
</property>
<property name="address" type="java.lang.String">
<column name="ADDRESS" />
</property>
</class>
</hibernate-mapping>

1.单一主键
 <id name="sid" type="int">
<column name="SID" />
<generator class="assigned" />
</id>
单一主键:指表中由某一列来充当主键
assigned 由java应用程序负责生成(手工赋值)
native 由底层数据库自动生成提示符,如果是MySQL就是increment,如果是Oracle就是sequence,等等。另外,即使手动赋值主键,也不会起作用。
<generator class="native" />mysql 中为AUTO_INCREMENT PRIMARY KEY
只要generator主键生成方式设置为native,即使设置了id,也是没有作用的。hibernate会调用数据库的ID增长方式
assigned 当为int时 默认0 其他默认null
2.基本类型(易出错)
     第一列是hibernate映射类型,  第二列是java类型的格式,    第三列是对应的标准sql类型的格式。
需要注意的:

<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY" />
</property>
date 表示日期:YYYY-MM-dd
time 表示时间:hh:mm:ss
tiemstamp 时间戳: 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,防止未读取就删除)
 <property name="hbm2ddl.auto">update</property>

 4.组件属性 
组件属性:
<component>标签表示,实体中成员变量的类型是用户自定义的类型。按hibernate的规则,基础类型使用<property>标签,而非基础类型就使用<component>标签。
<component>标签中,name表示这个对象的名字,class表示这个对象是哪个用户自定义类型。其中的property是指,用户自定义类型中的成员变量。
而声明了<component>的那个成员变量,在数据库中的表示方式是:这个用户自定义类型的成员变量中的成员变量,将以列的方式显示在数据库中。
即有该变量有三个成员变量,那么数据库中的表就多出对应的三列。
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<Students> studentsList=session.createQuery(hql).list();
for(Students students:studentsList){
System.out.println(students.toString());
} }
问题:查询能执行,但update&delete不能执行,后添加flush()强制输出sql语句也不成功。。(控制台输出删改语句,但表结构一直没变)
解决办法:开启事务http://www.cnblogs.com/zjfjava/p/6593398.html
小结:


(三)hibernate单表操作的更多相关文章

  1. Hibernate单表操作

    单一主键 assigned:由Java应用程序负责生成(即手工的赋值) native:由底层的数据库自动的生成标示符,如果是MySQL就是auto_increment,如果是Oracle就是seque ...

  2. hibernate课程 初探单表映射3-1 hibernate单表操作简介

    本章简介: 1 单一主键 2 基本类型 3 对象类型 4 组件属性 5 单表操作CRUD实例

  3. 深入学习之mysql(三)单表操作

    1.创建表的结构和数据 CREATE TABLE `t_student`( `id` INT PRIMARY KEY, `stuName` VARCHAR(10) NOT NULL, `age` IN ...

  4. Hibernate单表操作(一)——单一主键

    assigned由java应用程序负责生成.(手工赋值) native由底层数据库自己主动生成标识符,假设是MySQL就是increment,假设是oracle就是sequence.等等.

  5. 模型层之ORM、数据库和单表操作

    一.ORM简介 ORM是“对象-关系-映射”的简称,一般指持久化数据和实体对象的映射 1.1 什么是“持久化” 持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中( ...

  6. hibernate学习笔记(6)组件属性以及单表操作

    组件属性:实体类中的某个属性属于用户自定义类的对象: 作用:将两个实体类合并在一起组建成一个表 在hbm.xml文件中配置: 格式: <component name="取的名字&quo ...

  7. Django系列(三):单表操作

    1.ORM简介 MTV或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  8. Hibernate学习笔记(一)-->数据库单表操作

    Hibernate框架是一个全ORM映射框架,是一个非常流行的数据库操作框架之一,现在比较流行的还有MyBatis半ORM映射框架 在MyEclipse IDE开发工具中,可以很轻松的搭建Hibern ...

  9. c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--单表操作)

    一.概述 前面2篇文章,介绍了使用SqlCommand对象利用sql命令来操作数据库. 这篇文章我们来介绍使用c#的DataSet 和 DataAdaper对象操作操作数据库. 先来介绍下这两个对象是 ...

随机推荐

  1. 对于GTPv1协议头部的解析

    参考ETSI EN 301 347 GTP是GPRS Tunnelling Protocol 的简称.GTP分为GTPv0(已经淘汰),GTPv1 和GTPv2.下面,介绍的是GTPv1. GTPv1 ...

  2. JSP myecplise项目移植到ecplise

    把myecplise项目移植到ecplise的一些细节: 参考于http://www.cnblogs.com/liushuijinger/p/3396063.html 因为个人需要,需要把JSP项目从 ...

  3. 转:IntelliJ IDEA 2016.1.3注册破解激活

    IntelliJ IDEA 2016.1.3下载地址 https://download.jetbrains.8686c.com/idea/ideaIU-2016.1.3.exe 用注册码激活: 激活码 ...

  4. Microcontroller measures resistance without an ADC

    Sensors automate most of the processes in industry. Most of these sensors, such as those for ammonia ...

  5. Sublime的中文GBK显示乱码的解决方法

    import urllib2,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404' + 'e330c659d4bb41d3bdf022e94cab3cd ...

  6. 传输层TCPUDP 具体解释

    1.传输层存在的必要性 因为网络层的分组传输是不可靠的,无法了解数据到达终点的时间,无法了解数据未达终点的状态.因此有必要增强网络层提供服务的服务质量. 2.引入传输层的原因 面向连接的传输服务与面向 ...

  7. asp.net core更进内容

    ASP.NET Core 是对 ASP.NET 的一次意义重大的重构.本文介绍了 ASP.NET Core 中的一些新概念,并且解释了它们如何帮助你开发现代的 Web 应用程序. 章节: 什么是 AS ...

  8. Java垃圾回收精粹 — Part3

    Java垃圾回收精粹分4个部分,本篇是第3部分.在第3部分里介绍了串行收集器.并行收集器以及并发标记清理收集器(CMS). 串行收集器(Serial Collector) 串行收集器是最简单的收集器, ...

  9. Python学习(四)数据结构 —— set frozenset

    集合类型 set  frozenset 赋值及去重 set 是一个无序不重复元素集,还有个frozenset 类型(顾明思议,就是不可改变元素的集合): 基本功能包括关系测试和消除重复元素:set支持 ...

  10. iOS:判断引导页首次出现、版本更新

    判断引导页首次出现方式: //选择根控制器 +(void)chooseRootViewController{ //初始化Window窗口 [AppDelegate Delegate].window = ...