ORM

来源:互联网 发布:蓄水池压力的算法 编辑:程序博客网 时间:2024/06/06 08:24

坚持每天写博文,积累下开发中的点点滴滴
- ORM:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换,可以理解为对象到关系型数据库的映射
- ORM框架java对象和数据库一一对应关系
这里写图片描述

  • 问题:java对象是怎么样变成数据库里面的表记录的?
    通过xxx.hbm.xml

  • 映射文件中有表中所需的必要数据,可不可以让hibernate自动建表?
    答案是可以,可以在配置文件中新增一个配置

  <property name="hbm2ddl.auto">create-drop</property>
  • 当属性值是create-drop时,运行保存方法结果为:

//hibernate启动,检测是否有同名表,如果有删掉
Hibernate: drop table if exists user
//创建表,长度等使用默认
Hibernate: create table user (user_id bigint not null auto_increment, user_name varchar(255), user_passWord varchar(255), primary key (user_id))
//执行保存操作
Hibernate: insert into user (user_name, user_passWord) values (?, ?)
//hibernate关闭,删掉该表
Hibernate: drop table if exists user
细究之,是sessionFactory的创建和关闭时创建和删除表。
这里写图片描述
当我把sessionFactory关闭的代码注释掉以后,hibernate并没有进行删除表操作

  • 当属性值是create时,跟create-drop相比只是在最后不删表
    注意:此时更改数据不能成功,因为每次都是重新建表,更新方法找不到需要更新的数据,create这种一般只会在单个数据测试的时候用一下。
    注意:会出现有删除表信息实际却没有删掉,因为有主外键关联

  • 当属性值是update时,如果表不存在就创建表,操作完成以后数据存在且支持修改,一般在多个测试方法时测试使用,或者在web测试时使用。
    注意:我在映射文件里面注释掉一个字段,结果是被注释的字段不消失(长度等属性也不会更改),但是再添加数据时没有此字段
    注意:hibernate的domain层的字段一定要使用封装类型不能使用基本类型

  • 以字段方式操作,此时在domain需要给此字段一个固定值。
 <!--   <property name="age" column="age" access="field"></property> -->
  • 当属性值是validate是用来验证的,当不希望映射文件改动表的结构的时候使用。别人给了一个sql文件,即表已经存在的时候验证使用。但是映射不匹配的时候会报错