自己的一些手记

㈠使用Hibernate:

1.准备阶段:

1) 创建一个工程,然后先进入MyEclipse Database Explorer透视图,在DB Browser(数据库浏览器)视图中,new一个Database Driver,连接数据库。

2) 再加入Hibernate框架,其连接数据库的操作即可选择上述Database Driver的名字。

3) 在DB Browser(数据库浏览器)视图中,鼠标右键选择你要操作的表,在弹出的菜单中选择“Hibernate Reverse Engineering”(Hibernate反向工程),再根据它弹出的向导,一步一步,即可生成实体类和一个“实体类名.hbm.xml”这样的xml文件(映射文件),这个文件代表着实体类与数据库中表的绑定关系。

2. 完成持久化操作的七个步骤:

1) 读取并解析配置文件(hibernate.cfg.xml)

2) 读取并解析映射文件(实体类名.hbm.xml),创建SessionFactory。

3) 打开session。

4) 开启事务(查询操作不需要)。

5) 执行持久化方法。

6) 提交事务。

7) 关闭session。

注:前3个步骤已在准备阶段中生成的“HibernateSessionFactory.java”这个文件中做好了,一般我们只需获取session,再进行后4个操作即可。



㈡HQL和SQL查询数据的区别:

1.HQL:意思是Hibernate Query Language,即Hibernate查询语言,与SQL最大的区别就是它是面向对象。

语法:

Select * from 对象名 where 对象的属性=”条件”

注:利用HQL查询时,现可以把“select * ”省略不写。

2. SQL:意思是Structor Query Language,即结构化查询语言,它是面向关系型。

语法:

Select * from 表名 where 表中的字段=”条件”

注:查询到的结果是一个二维的对象集合,如果要读取出来,要先对其进行转换成二维数组,再逐一读取出来。详情请参阅《java中常用的技术源代码》电子档

3. HQL丰富查询:

1) 属性查询:hql语句中也可以直接像sql语句一样,但要注意是,查询的不是数据库中表的字段,而是实体类的属性,要与实体类中属性大小写一致.

2) 参数查询:一般sql语句中带参数查询时,用问号“?”来表示参数,再(设置带符串的参数)PreparedStatement.setString(从1开始的索引,参数值)hql语句中也可以像如上设置参数,不过参数索引是从0开始的,还可以用另外一种设置参数的方法,即对参数取别名,格式如:“:参数名”,然后通过名称逐个设置参数的值。

3) 关联查询:hql语句也可以按属性条件来查询。

4) 分页查询:利用Query.setFirstResult(pageSize*(pageNo-1));Query.setMaxResults(pageSize);pageNo:表示页码,pageSize:表示页面显示数据最大条数。

5) 统计函数:如:当我们需要知道总的数据条数时,hql=“select count(属性名) from 实体类名”;再用session获取Query,最后用Query.uniqueResult()获取再强制转换为整型。

4. 使用Criteria查询:针对的是有条件查询时,Session.createCriteria(实体类名)获取Criteria对象,然后用Criteria.add(Expression/Restrictions.方法(条件))。Criteria.addOrder(Order.asc或desc(条件))。

㈢Hibernate的关联映射:

1. 单向多对一关联的映射:只需在生成的映射文件中增加

<many-to-one name="多方类的属性名" class="一方类的类名" fetch="select" cascade="all">

<column name="多方类对应表的字段名" not-null="true/false" />

</many-to-one>

2. 单向一对多关联的映射:

<set name="一方类的属性名" inverse="false">

<key>

<column name="一方类对应表的字段名" not-null="true" />

</key>

<one-to-many class="多方类的类名" />

</set>

注:1)inverse:表示反转属性,true表示由对方管理双方的关联关系,为false进,表示自己管理双方的关联关系,一般情况下,设为true,由多的一方管理一对多的关联关系。

2)cascade:表示级联更新,可选的值包括:all,对所有的操作都进行级联;none,对所有的操作都不进行级联;save-update,执行更新操作时级联;delete,执行删除操作时级联。

两个属性配合使用,当在一方使用反转属性(inverse),则在多方使用cascade属性,反之亦可。当使用了Hibernate反射工程,如果两表存在主外键关系,便自动生成以上代码。

3. 双向一对多关联的映射:如果同时配置使用了1,2,就成了双向一对多关联。

4. 多对多关联的映射:

注:1).在多对多关联映射中,在用反向工程时,注意不要选择关系表,只需选择实体类表,其关系将由它们自己去找。

其中一张表映射文件配置:

<set name="表名" table="关系表" schema="dbo" catalog="数据库名">

<key>

<column name="关系表中的字段名" />

</key>

<many-to-many entity-name="实体类名">

<column name="实体类中的属性" />

</many-to-many>

</set>

另一张表的映射文件配置:

<set name="另一张表名" inverse="false" table="关系表" schema="dbo" catalog="数据库名" cascade="all">

<key>

<column name="关系表中的字段名" />

</key>

<many-to-many entity-name="另一实体类名">

<column name="该实体类的属性" />

</many-to-many>

</set>

2).实现排序:在实体映射信息文件中,将<set>节点改为<bag>标签,在<bag>中加一个属性order-by=”属性名” ,并将实体类中的set集合改为List集合。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值