Hibernate使用总结 收藏

 

Java中Hibernate的应用,有三点需要注意: 1.hibernate.properties可以直接使用Hibernate自带的,里面含有连接各种类型数据库所需要的配置模板 2.Hibernate和数据库表的映射关系可以通过两种方式实现: 1>需要手工为与数据库表形成映射关系的bean建立配置文件,命名为bean_name.hbm.xml 2>通过在这些bean中写入建立数据库映射所需的hibernate注释,由xdoclet为这些bean直接生成一份配置文件 3.关于hibernate中经常涉及到的延迟加载机制(Lazy Loading) 当通过hibernate把查询记录存入到一个List中,如果在关闭session之前取出List中的数据,则一切正常;如果在关闭session之后取出List中的数据,会报出如下错误信息:LazyInitializationException: could not initialize proxy - the owning Session was closed 试过了Hibernate.initialize(list)方法(可以通过强制加载关联对象实现延迟加载),直接强制加载list,但仍有问题。目前的解决方法是尽量避免关闭session之后从存储对象中取出数据。 Hibernate支持4种类型的连接池(所需要的jar包在下载的hibernate.zip压缩包中都有),具体如下: 1>hibernate自带的: #hibernate.connection.pool_size 连接池容量上限数目(只有这一项配置) 2>c3p0 #hibernate.c3p0.max_size 2 最大连接数 #hibernate.c3p0.min_size 2 #hibernate.c3p0.timeout 5000 数据库连接对象最大持有时间(以秒为单位) #hibernate.c3p0.max_statements 100 最大可缓存数据库语句对象,设为0则不缓存 #hibernate.c3p0.idle_test_period 3000 #hibernate.c3p0.acquire_increment 2 #hibernate.c3p0.validate false 3>proxool #hibernate.proxool.pool_alias pool1 ##===Only need one of the following=== #hibernate.proxool.existing_pool true #hibernate.proxool.xml proxool.xml #hibernate.proxool.properties proxool.properties 4>DBCP #hibernate.dbcp.maxActive 最大有效的数据库连接数 #hibernate.dbcp.maxIdle 最大空闲的数据库连接数 #hibernate.dbcp.maxWait 数据库连接最大可空闲时间(以毫秒为单位,设为-1则关闭) #hibernate.dbcp.whenExhaustedAction 当连接池的连接耗尽时的对策,为0则不予响应,为1则阻塞直到有可用的连接,为2则新增加一个连接 #hibernate.dbcp.testOnBorrow 当从连接池获得连接时是否检验该连接有效 #hibernate.dbcp.testOnReturn 当连接返回连接池中时,是否检验该连接有效 下面对使用Hibernate时的各部分进行详细说明(配置文件通过xdoclet生成): 首先,和数据库表建立映射关系的bean package com.neu.bean; //dynamic-update设置生成update sql时只包含当前发生变化的字段 //dynamic-inser设置生成insert sql时只包含当前非空字段 /** * @hibernate.class * table="user_info" * dynamic-insert="true" * dynamic-update="true" * */ public class UserInfo { private int id; private String name; public UserInfo(){ this.id=0; this.name=""; } //hibernate.id用来描述POJO(Plain Ordinary Java Object)中关键字段与数据库表主键之间的映射关系 //generator-class设置主键产生方式 //column设置主键字段名 /** * @hibernate.id * generator-class="assigned" * type="int" * column="id" */ public int getId() { return id; } public void setId(int id) { this.id = id; } //hibernate.property用来描述POJO中属性与数据库表字段之间的映射关系 //column设置数据库表字段名 /** * @hibernate.property * column="name" */ public String getName() { return name; } public void setName(String name) { this.name = name; } } 接下来开始进行对数据库操作: //使用bean_name.hbm.xml配置文件的初始化代码 Configuration config=new Configuration().addClass(UserInfo.class); SessionFactory sessions=config.buildSessionFactory(); new SchemaExport(config).create(true,true);//创建该数据库表(两个属性为:是否在控制台打印出脚本,是否导出脚本) Session session=sessions.openSession();//Session是持久层操作的基础,相当于JDBC中的Connection //插入记录的操作 UserInfo user=new UserInfo(); user.setId(1); user.setName("Nokia"); session.save(user); session.flush(); //查询、更新记录的操作 Query q = session.createQuery("from UserInfo where name='Nokia'");//UserInfo为bean的名字,非数据库表名 List list=(List)q.list(); user = (UserInfo) q.list().get(0); user.setName("Neu"); session.update(user); session.flush();//强制将user实例立即同步到数据库中,另session关闭时会自动执行flush方法 session.close(); 然后,再看看build.xml的详细配置

 

 

 

 

注:1.运行该程序之前需要先build一次,以便生成运行程序所需的hbm.xml配置文件 2.需要把hibernate.properties文件往classes根目录下拷贝一份,这样的话运行程序的时候才能找到这个文件 文中注释参考:http://www.stallian.com/docs/java/hibernate/2.1/overview-tree.html 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Mr_IT/archive/2006/05/31/766226.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值