Hibernate 1.0

什么是ORM(对象/关系映射)
利用面向对象思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,
于是要编写很多和底层数据库相关的SQL语句。
需要一种可行的ORM框架技术
其他主流的ORM框架技术:
1.MyBatis:前身是著名的iBatis
2.Toplink:后被Oracle收购,并重新包装为AS TopLink
3.EJB:本身是JAVAEE的规范
Hibernate简介
导入Hibernate必须的jar包
hibernate-release-4.2.4.Final\lib\required
导入Mysql的jdbc驱动
mysql-connector-java-5.1.7-bin.jar
导入Junit4的jar包
junit-4.10.jar
编写第一个Hibernate小例子
使用Junit进行测试
@Test:测试方法
@Before:初始化方法
@After:释放资源

Hibernate进阶
1.hibernate.cfg.xml常用配置
hibernate.show_sql
是否把Hibernate运行时的SQL语句输出到控制台,编码阶段便于测试。
hibernate.format_sql
输出到控制台的SQL语句是否进行排版,便于阅读。建议设置为true.
hbm2ddl.auto
可以帮助有java代码生成数据库脚本,进而生成具体的表结构。create/update/create-drop/validate
hibernate.default_schema
默认的数据库
hibernate.dialect
配置Hibernate数据库方言,Hibernate可针对特殊的数据库进行优化。
2.session简介
不建议直接使用jdbc的connection操作数据库,而是通过使用session操作数据库。
Session可以理解为操作数据库的对象。
Session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用,
把对象保存在关系数据库中需要调用session的各种方法,如:save(),update(),delete(),createQuery();
3.transaction简介(事务)
hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式。所以用session保存对象时,
如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。
如果你想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式。(不推荐)
4.session详解
如何获得session对象
1.openSession
2.getCurrentSession
如果使用getCurrentSession需要在hibernate.cfg.xml文件中进行配置:
如果是本地事务(jdbc事务)

<propertyname = "hibernate.current_session_context_class">thread</property>
如果是全局事务(jta事务)
    <propertyname = "hibernate.current_session_context_class">jta</property>

openSeesion与getCurrentSession的区别
1.getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要你手动关闭。
如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
2.openSession每次创建新的session对象,getCurrentSession使用现有的session对象。
5.对象关系映射常用配置

<hibernate-mapping
    schema="schemaName"
    catalog = "catalogName"
    default-cascade = "cascade_style"  //级联风格
    default-access = "field|property|ClassName"  //访问策略
    default-lazy = "true|false"  //加载策略
    package = "packagename"
/>
<class 
    name = "ClassName"
    table = "tableName"
    batch-size = "N"
    where = "condition"
    entity-name = "EntityName"
/>
<id 
    name = "propertyName"
    type = "typeName"
    column = "columnName"
    length = "length"
    <generator class = "generatorClass" />
</id>

Hibernate单表操作
1.单一主键
assigned 由java应用程序负责生产(手工赋值)
native 由底层数据库自动生成标识符,如果是MySQL就是increment,如果是Oracle就是sequence.
2.基本类型
3.对象类型
MySQL不支持标准SQL的CLOB类型,在MySQL中,用TEXT,MEDIUMTEXT及LONGTEXT类型来表示长度超过255的长文本数据。
4.组件属性
实体类中的某个属性属于用户滴定仪的类的对象。

<component name = "address" class = "Address">
    <property name = "postcode" column = "POSTCODE"></property>
    <property name = "phone" column = "PHONE"></property>
    <property name = "address" column = "ADDRESS"></property>
</component>

5.单表操作CRUD实例
save
update
delete
get/load(查询单个记录)
get/load的区别
在不考虑缓存的情况下,get方法会在调用之后立刻向数据库发出sql语句,返回持久化对象。
load方法会在调用后返回一个代理对象。该对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。
查询数据库中不存在的数据时,get方法返回null,
load方法抛出异常org.hibernate.ObjectNotFoundException.
映射类型
一对多(one-to-many)
多对一(many-to-one)
一对一(one-to-one)
多对多(many-to-many)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值