.Net转Java自学之路—Hibernate框架篇一(入门)
Hibernate:
JavaEE三层结构:
1、web层:Struts2框架作用在该层。
2、Service层:Spring框架作用在该层。
3、dao层:Hibernate框架作用在该层。对数据库进行crud(增删改查)操作。
概述:
Hibernate框架:
1、应用在JavaEE三层结构中DAO层框架。
2、在dao层中做对数据库crud操作,使用Hibernate实现crud操作,Hibernate底层代码就是jdbc,Hibernate对jdbc进行封装。使用Hibernate的好处,是不需要写复杂的jdbc代码,不需要写SQL语句就可以实现对数据库的crud操作。
3、开源的轻量级框架。
ORM思想:
1、Hibernate使用ORM思想对数据库进行crud操作。
2、Object Relational Mapping 对象关系映射。
文字描述:
1、让实体类和数据库进行一一对应关系。让实体类首先和数据库表对应;让实体类属性和表中字段对应。
2、不需要直接操作数据库,而操作表对应实体类对象。
使用配置文件来完成一一对应的关系
环境搭建:
1、导包并创建实体类:使用Hibernate时,不需要手动创建表,Hibernate会有自动创建表功能。
2、配置实体类和数据表一一对应关系(映射关系)
使用配置文件实现映射关系
》创建xml格式的配置文件:映射配置文件名称和位置没有固定要求。
建议在实体类所在包中创建,实体类名称.hbm.xml
》配置文件是xml格式,在配置文件中首先引入xml约束。
》配置映射关系
<hibernate-mapping> <!--配置类与表对应 class标签 name属性:实体类全路径 table属性:数据表名称--> <class name="cn.test.hmt.User" table="t_user"> <!--配置实体类id与表id对应 hibernate要求实体类有一个属性唯一值 hibernate要求表有字段作为唯一值--> <!--id标签 name属性:实体类里面id属性名称 column属性:生成的表字段名称--> <id name="uid" column="uid"> <!--设置数据库表id增长策略 native:生成表id值就是主键自增长--> <generator class="native"></generator> </id> <!--配置其他属性和表字段对应--> <property name="username" column="username"></property> <property name="pwd" column="pwd"></property> <!-- ...... --> <!-- ...... --> </class> </hibernate-mapping>
3、创建Hibernate的核心配置文件。
》核心配置文件格式xml,但核心配置文件的名称和位置都是固定的。
位置:必须在src下。 名称:必须是hibernate.cfg.xml
但Hibernate与Spring整合时,Hibernate核心配置文件名称和位置没有固定要求。
》引入约束。hibernate-configuration.dtd
》hibernate在操作过程中,只会加载核心配置文件,其他的配置文件不会加载。
<hibernate-configuration> <session-factory> <!--配置第一部分: 配置数据库的信息。必须配置--> <property name="hibernate.connection.dirver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:myusql://localhost:3306/数据库名</property> <property name="hibernate.connection.username"></property> <property name="hibernate.connection.password"></property> <!--配置第二部分: 配置hibernate信息。可选配置--> <!--输出底层sql语句--> <property name="hibernate.show_sql">true</property> <!--对底层sql语句进行格式化--> <property name="hibernate.format_sql">true</property> <!--hibernate帮创建表,需要配置 update:如已有表,更新。没有,创建。--> <property name="hibernate.hbm2ddl.auto">update</property> <!--配置数据库方言: 在MySQL中实现分页:关键字limit 在Oracle中实现分页:关键字rownum 让hibernate框架识别不同数据库的特有语句--> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--配置第三部分: 把映射文件放到核心配置文件中.必须配置--> <mapping resource="cn/test/hmt/User.hbm.xml" /> </session-factory> </hibernate-configuration>
实例:实现添加操作。
//1、加载hibernate核心配置文件 //在src下找到User.hbm.xml配置文件加载 Configuration cfg = new Configuration();//在hibernate封装的对象 cfg.configure(); //2、创建SessionFactory对象 //读取hibernate核心配置文件内容。创建SessionFactory。在过程中,根据映射关系,在配置数据库中把表创建出来。 SessionFactoty factory=cfg.buildSessionFartory(); //3、使用SessionFactory创建sesion对象。类似于Connection连接 Session session=factory.openSession(); //4、开启事物 Transaction tx=session.beginTransaction(); //5、逻辑 crud操作 //添加功能 User user=new User(); user.setUsername("张三"); user.setPwd("123456"); //调用sesion的方法完成添加 session.save(user); //6、提交事物、关闭资源 session.commit; session.close(); factory.close();
Hibernate配置文件详解:
映射配置文件:
1、映射配置文件名和位置没有固定要求。
2、映射的配置文件,标签name对应实体类的相关内容。
》class标签name属性值实体类全路径。
》id标签和property标签name属性值对应实体类的属性名称。
3、id标签和property标签的column属性可以省略。
》省略后,column属性值默认和name属性值保持一致。
4、property标签type属性,设置生成表字段的类型,自动生成实体类中对应的类型。
核心配置文件:
1、在核心配置文件中,配置的内容都要在<hibernate-configuration><session-factory>下。
2、配置三部分要求:数据库部分是必须配置;hibernate部分可选配置;映射文件部分是必须配置。
3、核心配置文件的名称和位置固定。位置:src下 名称:hibernate.cfg.xml
Hibernate核心API:
Configuration加载核心配置文件:到src下找到名称位hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象中。
// Configuration Configuration cfg=new Configuration(); cfg.configure();
SessionFactory:
1、使用Configuration对象创建SessionFactory对象。创建SessionFactory过程中,根据核心配置文件中,有数据库配置,有映射文件部分,到数据库中根据映射关系把表创建。
2、创建SessionFactory过程中,总是创建数据表,这个过程比较消耗资源。所以,在hibernate过程中,一个项目创建一个SessionFactory对象。
3、具体实现:在工具类的静态代码块中实现。静态代码块在类加载时执行,只执行一次。
public class HibernateUtils{ private static final Configuration cfg=null; private static final SessionFactory factory=null; static{ cfg=new Configuration(); cfg.configure(); factory=cfg.buildSessionFactory(); } //提供方法返回SessionFactory publc static SessionFactory getSessionFactory(){ return factory; } }
Session:
1、Session类似于jdbc中Connection连接。
2、调用Session中不同的方法实现crud操作:
》save()保存、update()修改、delete()删除、get()根据id查询。
3、Session对象的最大特点是单线程对象。表示Session对象只能自己使用。不能共用。
Transaction:
//1、开启事物 Transaction tx=session.beginTransaction(); //2、提交事物 tx.commit(); //3、回滚事物 tx.rollback();
解决非上网模式配置文件没有提示问题:
把约束文件引入到Eclips平台:window>>preferences>>XML Catalog>>Add
在本地配置文件中复制hibernate-mapping.dtd的那个地址。然后在key type中选择URI。key:粘贴。在Location中选择本地hibernate-mapping.dtd的目录。点击“OK”。重启Eclips即可。