hibernate基础
来源:互联网 发布:二个字 网络语言大全 编辑:程序博客网 时间:2024/06/05 18:47
一, 第一个hibernate程序
1, 导入包
2, 编写实体类
- 实体类可序列化
- 都用引用类型进行映射
- 无参的构建函数
3, 写映射文件
<class> 实体类跟表的映射
<id> 主键映射
<column> 指定映射的表的列名称
<generator>主键生成策略
indentity 对应于SQL SERVER, MYSQL 标识列
sequence 序列, 对应于ORACLE, DB2序列
native 让hibernate根据底层数据库的类型自动进行选择
uuid 全球唯一的一个36位字符串
assigned 让程序自己处理主键
increment 自动增长, 适用于表的主键是数字类型, 但没有自增, hibernate会自动生成这个主键, 每次加1
<property> 其它属性的映射
4, Hibernate 主配置文件
5, 常用接口
Configuration 负责初始化所有配置信息, 只要得到会话工厂, 就会被放弃
SessionFactory 会话工厂, 一个程序一般只需要一个对象, 除非你要连接多个数据库
openSession() 每一次都会打开一个新的会话, 用完后必须手动释放
getCurrentSession() 先看有没有可用的会话, 如果有就给你以存在的会话, 如果没有, 才创建session, 可以不需要手动释放
所有的操作都必须在事务环境中完成
配置属性: current_session_context_class : thread
Session 会话
get() 得到一个用户实体对象
二, Session常用方法
1, 添加
save
返回一个生成的主键ID, 调用这个方法就可以返回这个值
persist
无法保证ID可以马上注入到持久化对象中, 等到flush时, 才得到这个ID
2, 修改
update
一般在持久状态下进行, 注意全表更新的问题
//提交生成SQL语句的性能:
dynamic-updatetrue
dynamic-insert true
saveOrUpdate
持久对象中有没有ID, 如果没有, 就做save
如果有ID, 是一个临时态,就直接更新,做update
3, 删除
delete
建议在持久状态下做删除
4,获取实体
get(Class, id) 马上会发出SQL语, 去加载实体,找不到实体, 返回NULL
load(class, id) 生成代理对象, 延迟加载-当你要使用时, 才发出SQL语句, 找不到实体, 报异常
5, 清session缓存
evict(Object obj)
clear() 全部清空
flush() 刷新会话缓存, 使会话中的持久化对象跟数据源同步
6, merge()
实体对象有没有ID, 如果没有, 相等于save
如果有ID, 用这个ID查找数据库, 如果找到实体, 有更改就做更新, 如果找不到, 就添加记录
根本跟saveOrUpdate()差不多
//添加
public void merge(Users user){
Session session =HibernateUtil.getSession();
//起动事务
Transaction tx =session.beginTransaction();
//把数据生成持久状态的对象, 由Session进行管理
Users orguser =(Users)session.get(Users.class, user.getId());
orguser.setTelephone("258582");
tx.commit();
HibernateUtil.closeSession();
Session session1 =HibernateUtil.getSession();
//起动事务
Transaction tx1 =session1.beginTransaction();
//把数据生成持久状态的对象, 由Session进行管理
Users orguser1 =(Users)session1.get(Users.class, user.getId());
//orguser1.setTelephone("5685258");
session1.merge(orguser);
tx1.commit();
HibernateUtil.closeSession();
}
三, 脏检查和清理缓存
在会话flush时或事务提交时, session会做脏检查,
会把持久状态下的对象跟数据库中数据进行一次对比, 发现持久状态对象跟数据库不同, 就会持久化对象的值刷到数据库中
四, 持久化对象的三种状态
看ID区分
当新new一个对象, 这个对象没有ID, 临时状态的
当由session管理 , 缓存,数据库都有ID值了, 持久状态的
当对象有ID, 脱离了会话的管理, 游离态
- Hibernate基础
- hibernate基础
- Hibernate基础
- Hibernate基础
- hibernate 基础
- Hibernate基础
- hibernate基础
- hibernate基础
- Hibernate基础
- Hibernate基础
- Hibernate 基础
- Hibernate基础
- Hibernate基础
- Hibernate基础
- Hibernate 基础
- Hibernate基础
- Hibernate基础
- Hibernate基础
- 一名猎头想对候选人说的心里话
- Android中ClassLoader和java中有什么关系和区别
- centos 6.5 部署tomcat 实现自动化部署
- CSS 笔记
- Android 多种ViewType的ListView
- hibernate基础
- Cassandra_教程一_Cassandra的简单操作_基于(cassandra-cli) 需要 2.2 及以下版本
- 使用Ajax时处理用户session失效的问题
- Android Studio下载和安装
- angularJS表单验证
- 互联网领域细分
- 笔试算法学习---超级楼梯(递推)
- Educational Codeforces Round 14 D. Swaps in Permutation
- jQuery基础知识梳理