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, 脱离了会话的管理, 游离态

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击