Hibernate学习1之基于持久层框架DAO模式应用
2014-04-20 16:38
423 查看
一、实验步骤
1、建立数据库
2、新建java项目
3、导入Hibernate需要的架包和数据库驱动类库,下载地址:http://download.csdn.net/detail/yy228313/7212241
4、编写Hibernate配置文件Hibernate.cfg.xml,该文件在src目录下
5、编写持久化类,即POJO映射类
6、编写映射文件xxx.hbm.xml,该文件和持久化类在用一个目录下
7、编写一个工具类,用于获取Session实例
8、编写DAO接口
9、使用Hibernate API实现DAO接口
10、编写测试类。
二、原理分析
1.Hibernate简要的体系架构分析:
DataBase:数据库
Hibernate.cfg.xml:Hibernate配置文件,配置数据库的连接信息,如使用的数据库类型、数据库名、密码等等。
XML Mapping:映射文件,将数据库表和持久化类对应起来。
Persistent Objects:持久化类。
2.Hibernate核心API与工作原理
Hibernate.properties:与Hibernate.cfg.xml的作用相同,但一般用Hibernate.cfg.xml。因为在Hibernate.properties中不能配置被映射的类,如果使用Hibernate.properties配置Hibernate,那么需要在源文件中配置。具体请看:http://qinchaoyong.iteye.com/blog/642369
*.hbm.xml:映射文件,跟持久化类保存在同一个包目录下。
工作原理:
a、Hibernate的初始化,创建Configuration对象。将配置文件和映射文件的信息存放到Configuration对象中。
b、创建SessionFactory实例。通过Configuration对象读取到的配置信息创建SessionFactory,即将Configuration对象内的配置信息存入SessionFactory的内存(属性)中。SessionFactory充当数据存储源的代理,并负责创建Session对象。得到SessionFoctory对象后,Configuration对象的使命就结束了
c、创建Session实例,创建数库连接。Session通过SessionFactory打开,创建一个Session对象就相当于数据库建立了一个新的连接。Session对象用来操作实体对象,并把这些操作转换成对应数据库中数据的增加、删除、查询、修改操作。
d、创建Transaction实例,开始一个事务Transaction用于事务管理,一个Transaction对象对应的事务可以包含多个操作。在使用Hibernate进行增加、删除、修改操作室必须先创建Transaction对像。
e、利用Session的方法进行持久化操作,将实体对象持久化到数据库中。
f、提交操作结果并结束事务。对实体对象的持久化操作结束后,必须提交事物。
g、关闭Session,与数据库断开连接。
三、代码分析:
1.Hibernate配置文件:hibernate.cfg.xml
hibernate-configuration为跟元素,session-factory为其子元素。
2.持久化类Student.java与映射文件Student.hbm.xml
第一行:说明使用的版本号、编码。
<hibernate-mapping>是根元素,属性package声明持久化类所在的包。
<class>设置类-表之间的映射,属性name对应着持久化类的类名,table对应着数据库中的表名。
<id>设置的主键映射,其他非主键的映射使用property。
generator说明了主键生成方式,increment代表主键按数值顺序递增,native代表自行判断。
name对应着持久化类的属性,type数据类型,column对应着表的字段名。
<one-to-one> 、<many-to-one> 、<many-to-many> :设置关联映射
3.工具类HibernateUtil
4.接口和接口实现类
代码下载:http://download.csdn.net/detail/yy228313/7222661
1、建立数据库
2、新建java项目
3、导入Hibernate需要的架包和数据库驱动类库,下载地址:http://download.csdn.net/detail/yy228313/7212241
4、编写Hibernate配置文件Hibernate.cfg.xml,该文件在src目录下
5、编写持久化类,即POJO映射类
6、编写映射文件xxx.hbm.xml,该文件和持久化类在用一个目录下
7、编写一个工具类,用于获取Session实例
8、编写DAO接口
9、使用Hibernate API实现DAO接口
10、编写测试类。
二、原理分析
1.Hibernate简要的体系架构分析:
DataBase:数据库
Hibernate.cfg.xml:Hibernate配置文件,配置数据库的连接信息,如使用的数据库类型、数据库名、密码等等。
XML Mapping:映射文件,将数据库表和持久化类对应起来。
Persistent Objects:持久化类。
2.Hibernate核心API与工作原理
Hibernate.properties:与Hibernate.cfg.xml的作用相同,但一般用Hibernate.cfg.xml。因为在Hibernate.properties中不能配置被映射的类,如果使用Hibernate.properties配置Hibernate,那么需要在源文件中配置。具体请看:http://qinchaoyong.iteye.com/blog/642369
*.hbm.xml:映射文件,跟持久化类保存在同一个包目录下。
工作原理:
a、Hibernate的初始化,创建Configuration对象。将配置文件和映射文件的信息存放到Configuration对象中。
b、创建SessionFactory实例。通过Configuration对象读取到的配置信息创建SessionFactory,即将Configuration对象内的配置信息存入SessionFactory的内存(属性)中。SessionFactory充当数据存储源的代理,并负责创建Session对象。得到SessionFoctory对象后,Configuration对象的使命就结束了
c、创建Session实例,创建数库连接。Session通过SessionFactory打开,创建一个Session对象就相当于数据库建立了一个新的连接。Session对象用来操作实体对象,并把这些操作转换成对应数据库中数据的增加、删除、查询、修改操作。
d、创建Transaction实例,开始一个事务Transaction用于事务管理,一个Transaction对象对应的事务可以包含多个操作。在使用Hibernate进行增加、删除、修改操作室必须先创建Transaction对像。
e、利用Session的方法进行持久化操作,将实体对象持久化到数据库中。
f、提交操作结果并结束事务。对实体对象的持久化操作结束后,必须提交事物。
g、关闭Session,与数据库断开连接。
三、代码分析:
1.Hibernate配置文件:hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <!-- 数据库连接设置 --> <!-- 配置数据库JDBC驱动 --> <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver</property> <!-- 配置数据库连接URL --> <property name="hibernate.connection.url"> <![CDATA[jdbc:mysql://localhost:3306/testHibernate?useUnicode=true&characterEncoding=utf8]]> </property> <!-- 配置数据库用户名 --> <property name="hibernate.connection.username"> root</property> <!-- 配置数据库密码 --> <property name="hibernate.connection.password"> 1</property> <!-- 配置JDBC内置连接池 --> <property name="connection.pool_size">1</property> <!-- 配置数据库方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置session的运行环境,在web中使用jta,在java application中使用thread --> <property name="current_session_context_class">thread</property> <!-- 输出运行时生成的SQL语句 ps:在控制台显示 --> <property name="show_sql">true</property> <!-- 列出所有的映射文件 --> <mapping resource="sise/ye/domain/Student.hbm.xml"/> </session-factory> </hibernate-configuration>
hibernate-configuration为跟元素,session-factory为其子元素。
2.持久化类Student.java与映射文件Student.hbm.xml
package sise.ye.domain; /* * 项目名称:java-7 * 包名:sise.ye.domain * 类名:Student * 创建人:叶晓东 * 创建时间:2014.4.11 * 描述:持久化类Persion * 备注: * @version 1.0 */ public class Student { private int id; private String sno; private String name; private char sex; private int age; //======set/get===== public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSno() { return sno; } public void setSno(String sno) { this.sno = sno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="sise.ye.domain"> <!-- name指定持久化类的类名,table指定数据表的表名 --> <class name="Student" table="student"> <!-- 将Student类中的id属性映射为数据表Student中的主键id --> <id name="id" type="int" column="id"> <generator class="increment"></generator> </id> <!-- 映射Student类的sno属性 --> <property name="sno" type="java.lang.String" column="sno" length="20"></property> <!-- 映射Student类的name属性 --> <property name="name" type="java.lang.String" column="name" length="20"></property> <!-- 映射Student类的sex属性 --> <property name="sex" type="character" column="sex" length="2"></property> <!-- 映射Person类的age属性 --> <property name="age" type="int" column="age"></property> </class> </hibernate-mapping>
第一行:说明使用的版本号、编码。
<hibernate-mapping>是根元素,属性package声明持久化类所在的包。
<class>设置类-表之间的映射,属性name对应着持久化类的类名,table对应着数据库中的表名。
<id>设置的主键映射,其他非主键的映射使用property。
generator说明了主键生成方式,increment代表主键按数值顺序递增,native代表自行判断。
name对应着持久化类的属性,type数据类型,column对应着表的字段名。
<one-to-one> 、<many-to-one> 、<many-to-many> :设置关联映射
3.工具类HibernateUtil
package sise.ye.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; /* * 项目名称:java-7 * 包名:sise.ye.util * 类名:HibernateUtil * 创建人:叶晓东 * 创建时间:2014.4.11 * 描述:工具类 * 备注: * @version 1.0 */ public class HibernateUtil { private static ServiceRegistry serviceRegistry;//服务注册 private static SessionFactory sessionFactory;//会话工厂 //==========默认的构造方法======= private HibernateUtil(){} static { Configuration cfg=new Configuration().configure();//获取配置信息 serviceRegistry=new ServiceRegistryBuilder().applySettings( cfg.getProperties()).build(); sessionFactory=cfg.buildSessionFactory(serviceRegistry); } public static Session getSession(){ Session session=sessionFactory.getCurrentSession(); return session; } }
4.接口和接口实现类
package sise.ye.dao; import sise.ye.domain.Student; /* * 项目名称:java-7 * 包名:sise.ye.dao * 类名:HibernateDao * 创建人:叶晓东 * 创建时间:2014.4.11 * 描述:接口 * 备注: * @version 1.0 */ public interface HibernateDao { public void addStudent(Student student); public void updateStudent(Student student); public void deleteStudent(Student student); public Student getStudentById(int Id); }
package sise.ye.dao.impl; /* * 项目名称:java-7 * 包名:sise.ye.dao.impl * 类名:HibernateDaoImpl * 创建人:叶晓东 * 创建时间:2014.4.11 * 描述:接口的实现类 * 备注: * @version 1.0 */ import org.hibernate.Session; import org.hibernate.Transaction; import sise.ye.dao.HibernateDao; import sise.ye.domain.Student; import sise.ye.util.HibernateUtil; public class HibernateDaoImpl implements HibernateDao{ //=======添加======= public void addStudent(Student student){ Session session=HibernateUtil.getSession(); Transaction tx=session.beginTransaction(); try{ session.persist(student);//保存student tx.commit(); }catch(Exception e){ if(null!=tx) tx.rollback(); e.printStackTrace(); } } //=======删除========= public void deleteStudent(Student student){ Session session=HibernateUtil.getSession(); Transaction tx=session.beginTransaction(); try{ session.delete(student); tx.commit(); }catch(Exception e){ if(null!=tx) tx.rollback(); e.printStackTrace(); } } //========查找========= public Student getStudentById(int id){ Session session=HibernateUtil.getSession(); Transaction tx=session.beginTransaction(); Student student=(Student)session.get(Student.class, id); tx.commit(); return student; } ///========更新========= public void updateStudent(Student student){ Session session=HibernateUtil.getSession(); Transaction tx=session.beginTransaction(); try{ session.update(student); tx.commit(); }catch(Exception e){ if(tx!=null) tx.rollback(); e.printStackTrace(); } } }
代码下载:http://download.csdn.net/detail/yy228313/7222661
相关文章推荐
- 基于Hibernate+struts+jsp框架学习
- 基于mvc模式的应用框架之Hibernate(四)
- 学习ASP.NET MVC5框架揭秘笔记-实例演示:SC模式的应用
- 基于mvc模式的应用框架之Hibernate(一)
- 基于mvc模式的应用框架之Hibernate(五)
- 快速入门过程与方法:设计与思路;如何学习新的知识框架,建立思维模式,熟悉应用场景体系
- Hibernate基于持久层框架的DAO模式应用
- 基于mvc模式的应用框架之Hibernate(二)
- 基于Hibernate框架的泛型DAO层---SwiftDAO
- 菜鸟学习Hibernate——持久层框架
- Hibernate与 DAO模式应用中的包层次
- 基于mvc模式的应用框架之Hibernate(七)
- 学习Hibernate——持久层框架
- 菜鸟学习Hibernate——持久层框架
- Spring与Hibernate整合的HibernateDaoSupport应用中的“内存泄露”问题(学习心得)
- 基于hibernate的泛型Dao框架
- 基于泛型DAO的Facade设计模式. - Hibernate - Java
- 基于mvc模式的应用框架之Hibernate(六)
- Puma framework 1.0 beta, 基于sping mvc、spring security、spring data、hibernate搭建的开发框架(供学习用)
- Hibernate中应用dao设计模式进行数据库的增删改查操作