Hibernate3.5.3 学习笔记(一)

本文介绍了Hibernate3.5.3的配置选项,如hbm2ddl.auto,以及如何处理数据库引擎如MyISAM。探讨了domain对象的要求,包括有无参构造方法和避免使用复合主键。讲解了session的操作,如get和load的区别,以及事务管理和数据状态(瞬时、持久、脱管)。此外,还讨论了HQL查询、关键字冲突解决策略以及遵循面向对象设计原则的重要性。
摘要由CSDN通过智能技术生成
hbm2ddl.auto:
create-drop:启动重建,程序关闭后删除表
create:启动重建,但关闭后不会删除
update:跟新表结构
validate:映射文件和表结构字段是否一致,否则不更新,报错

mysql:
show engines;#查看引擎#
MyISAM:不支持事务和外键

/etc目录下有配置文件:
C:\Users\ETHAN\dev\hibernate-distribution-3.5.3-Final-dist\hibernate-distribution-3.5.3-Final\project\etc


domain对象必须要有不带参的构造方法,反射newInstance
最好要有id属性,可以完成更多操作
类不能是final,不能继承,造成不能懒加载,动态代理$proxy

如果java对象中某个属性不需要存储在数据库中,那么在hbm.xml映射文件中就不需要
配置这个属性


复合主键,多个主键:<composite-id> 避免使用,设计上


初始化hibernate,比较耗时,封装一个工具类:HibernateUtil


User user = (User) s.get(User.class, id);
hibernate根据User.class找到类的名字,然后去定位匹配映射配置文件hbm.xml
最后去数据库取数据


s = HibernateUtil.getSession();
//产生代理对象,user永远不会为null
User user = (User) s.load(User.class, id);
//懒加载,初始化对象数据
Hibernate.initialize(user);


如果没开启事务

save会把数据插入数据库,然后回滚
persist 不会执行插入,报异常


瞬时、持久、脱管:是否在session范围中,数据库中是否有记录
new user
session.save--->持久,在session管理中,如果user有变化,commit的时候就会反映到数据库中
session.close ---->脱管
user

try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(user);

//持久态
user.setName("持久态");

tx.commit();
} catch (HibernateException e) {
if(tx!=null) {
tx.rollback();

此时发出两条sql语句,user处于持久化状态,提交时会更新
Hibernate: 
    insert 
    into
        User
        (name, birthday) 
    values
        (?, ?)
Hibernate: 
    update
        User 
    set
        name=?,
        birthday=? 
    where
        id=?


session.update()对托管的对象
session.saveOrUpdate,不知道对象处于何种状态,hibernate根据id是否有值,(主键string(null?))瞬时和脱管


session.merge调用后对象还是托管的


<id name="id" unsaved-value="0">默认0
或者为空,对于字符。判断是否save or update


缺省提交时,与数据库交互。中间调用user.setName(多次)时不会更新,产生sql


HQL:
from Object 会把所有的表查一下


实体类属性名与数据库关键字冲突问题
user在oracle中是关键字
1.<class name="User" table="t_user">
2.加反引号,`user`,当作字符串处理


String hql = "from User as user where user.name=:name";
//不依赖位置
query.setString("name", "aaa");

编程配置:
cfg.setProperty()


面向对象设计:
抛异常,而不是返回状态数值(比如布尔,整数值)。抛出异常,保证流程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值