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()
面向对象设计:
抛异常,而不是返回状态数值(比如布尔,整数值)。抛出异常,保证流程
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()
面向对象设计:
抛异常,而不是返回状态数值(比如布尔,整数值)。抛出异常,保证流程