Hibernate 总结

  • 格式:doc
  • 大小:172.50 KB
  • 文档页数:12

Hibernate框架主讲:梁健全以下笔记均为我本人亲自整理,若有描述不对或代码错误,请同学们及时更改一下,重新上传上去,谢谢!1.Hibernate框架的作用和优点Hibernate主要负责对数据库进行访问操作Hibernate框架是对JDBC技术进行了封装。

a.使用JDBC进行数据库操作具有以下缺点:--需要编写大量复杂的SQL语句--需要设置大量的?参数值--需要将ResultSet记录转换成POJO对象--数据库变更某些特殊功能需要改变SQL,简称移植性差。

例如分页查询、主键生成方法、数据库函数等b.Hibernate解决上述JDBC的不足--自动生成SQL语句--自动设置?参数值--自动将ResultSet记录映射成POJO对象--采用一致的方法对数据库操作。

例如分页查询和主键生成控制。

移植性比较好。

save(admin);//insert语句update(admin);//update语句Admin admin =(Admin)load();//findById语句2.Hibernate框架设计原理(思想)Hibernate是采用ORM思想对JDBC进行封装的设计。

ORM:Object Relation Mapping, 对象关系映射。

指的是解决Java对象和关系数据库数据之间的映射问题。

Hibernate框架是ORM的一种实现,解决了对象和数据库数据映射问题。

在数据库添加或更新时,可以将一个对象自动写入或更新数据表;查询时,可以将记录自动封装成对象返回。

这些操作在中间执行时所涉及的一些细节开发者不用参与和关注。

3.Hibernate框架体系结构Hibernate主要由以下几部分构成a.hibernate.cfg.xml(1个)指的是hibernate框架的主配置文件。

可以配置数据库连接参数、hibernate框架参数等。

b.POJO实体类(n个)指的是与数据库对应的实体类,用于封装数据库记录的对象类型。

c.hbm.xml映射描述文件(n个)指定了实体类和数据表的对应关系,类中属性和数据表字段之间对应关系。

d.Hibenate底层的API(jar包)主要是对hbm.xml解析,根据写出的内容,动态生成SQL语句,自动将属性和字段映射。

*4.Hibernate框架常用APIa.Configuration负责加载hibernate.cfg.xml主配置信息,同时也可以加载hbm.xml信息。

b.SessionFactory负责创建Session对象,对JDBC的connection对象的封装。

c.Session负责执行增删改操作.提供了save,update,delete等方法。

d.Transaction负责事务控制。

默认情况下,Hibernate不会自动提交,因此需要事务控制才能对数据库更新。

e.Query负责执行特殊查询。

*5.Hibernate框架基本应用1)引入hibernate开发包、数据库驱动包2)引入hibernate主配置文件hibernate.cfg.xml3)添加实体类Cost4)添加Cost.hbm.xml映射描述5)根据Hibernate提供的常用API执行增删改查操作//根据Class类型的主键值查询session.load(Class,主键值)session.get(Class,主键值)//根据Object对象的主键值删除session.delete(Object);//将Object对象更新到数据库session.update(Object);//将Object对象插入到数据库session.save(Object);6.Hibernate映射类型在hbm.xml文件中,定义属性和字段映射时,使用了type属性,该属性用于指定映射类型,负责属性值和字段值之间的相互转化。

在Hibernate框架中type属性允许使用两种格式:一种是Java类型,另一种是Hibernate类型(推荐)。

Hibernate映射类型如下:整数映射:byte,short,integer,long浮点数:float,double字符串: string日期:date (年月日)时间: time (小时分钟秒)日期+时间: timestamp public class HibernateUtil { //工具包private static SessionFactory sf;static{//加载hibernate.cfg.xml和hbm.xmlConfiguration conf = new Configuration();conf.configure("/hibernate.cfg.xml");//获取SessionFactorysf = conf.buildSessionFactory();}public static Session getSession(){//获取SessionSession session = sf.openSession();return session;}}@Test //需要事务控制才能对数据库更新public void testUpdate(){Session session = HibernateUtil.getSession();Transaction tx = session.beginTransaction();//开启事务Cost cost = (Cost)session.load(Cost.class, 3);cost.setName("特惠套餐A");session.update(cost);mit();//提交session.close();}<hibernate-mapping> hbm.xml文件<class name="org.tarena.pojo.Cost" table="COST"><id name="id" type="integer"><column name="ID" /><!-- 为添加操作指定主键生成方法--><generator class="sequence"><param name="sequence">fee_seq</param></generator></id><property name="name" type="string"><column name="NAME" /></property><property name="baseDuration" type="integer"><column name="BASE_DURA TION" /></property><property name="createTime" type="date"><column name="CREATIME" /></property>...............布尔类型:yes_no,true_false(可以完成一个布尔属性和字符之间的转换) =========================== Java 对象(sql.Date 属性) <--date--> YYYY-MM-DD Java 对象(util.Date 属性) <--time--> HH:MM:SS Java 对象(TimeStamp 属性) <--timestamp--> YYYY-MM-DD HH:MM:SS Java 对象(boolean 属性) <--yes_no--> Y|NJava 对象(boolean 属性) <--true_false--> T|F================================================================== 1.Hibernate 主键生成方式Hibernate 框架提供了多种主键生成方式,使用时, 通过hbm.xml 文件<id>元素部分,利用<generator class="主键生成类型">指定。

*a.sequence主要适用于Oracle 数据库,采用序列方法生成。

<generator class="sequence"> <param name="sequence"> 指定序列名 </param> </generator>*b .identity主要适用于MySQL 、SQLServer 数据库,采用数据库自动增长机制生成。

<generator class="identity"> </generator> 注意:数据表在设计时,要给主键字段追加autoincrement 功能。

*c.nativeHibernate 框架会根据dialect 方言设置自动选择sequence 或identity 等方法。

<generator class="native"> </generator> d.incrementhibernate 会首先执行一个select max(id) from table 语句获取当前主键最大值,之后加1再执行insert 插入语句。

<generator class="increment"> </generator>注意:该方式并发几率高的话,容易产生相同ID 值,因此不推荐使用。

e.assignedHibernate 框架不负责生成ID 值,忽略处理。

采用该方式,需要程序员在程序中设置setId(指定值)主键值。

<generator class="assigned"> </generator>f.其他uuid 、hilo(高低位算法)利用uuid 或hilo 算法生成一个主键值。