hibernate框架如何在项目中运用
来源:互联网 发布:nginx事件驱动模型 编辑:程序博客网 时间:2024/04/30 08:12
hibernate框架如何在项目中运用
- 针对一个项目,如果要使用hibernate框架来对数据库进行操作;我们应该按如下步骤开始操作:
1.建立hibernate框架,首先我们应该导入一些我们项目中所需要的架包,本次示例用到如下架包,也是所有项目基本都会用到的架包:
简单的给大家介绍一下这些架包的具体作用:
antlr-2.7.6.jar:语言转换工具,hibernate利用它将HQL语句转变成SQL语句
commons-collections-3.1.jar:用来增强java对集合的处理能力
dom4j-1.6.1.jar: xml文件解析器
javassist-3.9.0.GA.jar: hibernate在运行时用它来扩展java类
jta-1.1.jar:标准的java事务处理接口(跨数据库)
slf4j: Hibernate使用的一个日志系统
2.根据项目的详细设计说明书,在oracle或者mysql数据库中建立连接对象,然后根据账户和密码登录连接对象,在连接对象中创建自己项目所对应的数据库名称(后面事例以test为例),然后在test数据库中创建项目所需要的表:
eg: CREATE TABLE `person` ( `ID` int(11) NOT NULL, `NAME` varchar(20) NOT NULL, `AGE` int(11) NOT NULL, `ADDRESS` varchar(100) NOT NULL, PRIMARY KEY (`ID`) )
3.数据库中创建好表以后,然后在项目中创建pojo包,在包中创建表的映射类,如果有很多的表,就创建很多的类,类名和表名一致;然后根据表中的列的名称和属性在映射类中创建属性,形成一一对应的关系:
public class Person { private int id; private String name; private int age; private String address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]"; }}
4.表的映射类创建好以后,开始配置映射文件,映射文件的扩展名一般为.hbm.xml的形式,文件名的前缀一般和表名保持一致,该文件放在classPath目录下的任意位置。在实际项目开发过程中,我们一般单独建一个存放映射文件的包,以方便管理。映射文件是为了指定对象和关系数据表之间的映射,在运行时,Hibernate将根据这个映射文件来生成各种sql语句。
<?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"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <!-- 指定类和表的映射,name属性下面写的是实体类的地址全称,table属性下面写的是表名 --> <class name="com.etc.cfg.Person" table="PERSON"> <!-- 指定持久化类的对象标识符和表的主键的映射 --> <id name="id" column="ID" type="integer"> <!-- 指定对象标识符生成器,负责为对象标识符生成唯一的标识符。increment 表示自增 --> <generator class="increment"></generator> </id> <!-- 属性。映射类的属性和表的字段 --> <property name="name" column="NAME" type="string"></property> <property name="age" column="AGE" type="integer"></property> <property name="address" column="ADDRESS" type="string"></property> </class></hibernate-mapping>
5.映射文件配置好以后,开始配置hibernate的主配置文件。主配置文件里面配置hibernate的初始化信息,这个文件在classPath的任意目录下;一般命名为:hibernate.cfg.xml。
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration> <session-factory> <!-- 属性:配置数据库的驱动类 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> --> <!-- 属性:配置数据库的url地址 --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <!-- <property name="hibernate.connection.url">jdbc:oracle:thin@localhost:1521:orcl</property> --> <!-- 属性:配置连接连接对象的时候需要登录的用户名和密码 --> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">111111</property> <!-- 属性:配置数据库的sql方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> --> <!-- 属性:是否在控制台打印输出hibernate为我们自动拼接好的sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 映射:指定程序需要关联的映射文件 --> <mapping resource="com/etc/cfg/Person.hbm.xml"/> </session-factory></hibernate-configuration>
6.创建一个单例模式获取SessionFactory的工具类,它的作用是专门给调用者生产Session对象。在实际项目开发中,SessionFactory类放在一个连接池类中,SessionFactory生产出来的Session对象我们一般都是放在一个线程安全的threadLocal线程中,threadLocal一般是希望将某一个状态和线程相关联,hibernate主要也是事务管理,所以放在这里很合适,性能比thread更优秀。但是不管是在单个的Util工具类还是连接池这种对数据库访问量减少的更高级编程中,它的原理都是第一步先要加载配置文件,在实际项目的连接池中我们把文件读取这一块放在一个静态块中,这样就可以在类刚被加载的时候就读取配置文件。
import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;/** * 单例模式获取SessionFactory的工具类 * @author 莫小忆 */public class SessionFactoryUtil { private static SessionFactory sessionFactory; private SessionFactoryUtil() { } public static SessionFactory getSessionFactory(){ if(sessionFactory == null){ //初始化配置文件读取对象 Configuration config = new Configuration(); //设定读取的主配置文件路径 config.configure("/hibernate.cfg.xml"); //config.addClass(Person.class); //创建一个session工厂 sessionFactory = config.buildSessionFactory(); } return sessionFactory; }}
7.创建好SessionFactory的作用就是以后业务需求中谁要对数据库进行增删改查,就自己去向SessionFactory索要Session对象。由Session对象负责对数据库进行增删改查。在实际的项目开发中,我们一般都是按照表名创建类,在类里面专门编写业务需求,来实现所有对这个表进行操作的hql语言,也就是业务逻辑类,这是一个开发项目中80%的工作量。
/** * 保存用户信息 */ @org.junit.Test public void insertPerson(){ SessionFactory sessionFactory = SessionFactoryUtil.getSessionFactory(); //创建session对象 Session session = sessionFactory.openSession(); //开启事务 Transaction ts = session.beginTransaction(); Person ps = new Person(); ps.setName("张三"); ps.setAge(20); ps.setAddress("北京"); //将用户信息保存早数据库 session.save(ps); //提交事务 ts.commit(); //关闭session对象,释放资源 session.close(); }
/** * 根据id获取用户 */ @org.junit.Test public void findPersonById(){ SessionFactory sessionFactory = SessionFactoryUtil.getSessionFactory(); //创建session对象 Session session = sessionFactory.openSession(); //根据id获取对象 Person person = (Person) session.get(Person.class, 1); System.out.println(person.getName()); //关闭session对象,释放资源 session.close(); }
/** * 查询全部用户 */ @org.junit.Test public void findPersons(){ SessionFactory sessionFactory = SessionFactoryUtil.getSessionFactory(); //获取session对象 Session session = sessionFactory.openSession(); //获取查询对象 String hql = "from Person"; Query query = session.createQuery(hql); List list = query.list(); //使用查询对象返回集合,集合中封装hql中查询的类的实例化对象 for(int i=0;i<list.size();i++){ Person person = (Person) list.get(i); System.out.println(person.getName()); } //关闭session对象,释放资源 session.close(); }
/** * 修改用户信息 */ @org.junit.Test public void updatePersonById(){ SessionFactory sessionFactory = SessionFactoryUtil.getSessionFactory(); //获得session对象 Session session = sessionFactory.openSession(); //开启事务 Transaction ts = session.beginTransaction(); //根据id获取对象 Person person = (Person) session.get(Person.class, 1); person.setName("Tom"); person.setAge(25); //修改数据 session.update(person); //提交事务 ts.commit(); //关闭session对象,释放资源 session.close(); }
/** * 删除用户信息 */ @org.junit.Test public void deletePerson(){ SessionFactory sessionFactory = SessionFactoryUtil.getSessionFactory(); //获取session对象 Session session = sessionFactory.openSession(); //开启事务 Transaction ts = session.beginTransaction(); //根据id获取对象 Person person = new Person(); //设定id,hibernate会根据id删除数据 person.setId(1); session.delete(person); //提交事务 ts.commit(); //关闭session对象,释放资源 session.close(); }
8.hibernate所做的工作基本就到此为止了。所有用户需要的数据都被session缓存起来了,jsp需要数据的时候,通过session 取得,然后封装到bean对象里面,就可以在整个项目中流传了。
结论:
不管学习什么知识,其实最重要的还是要运用到实际开发当中,我们应该对知识深入浅出,当你真正理解了以后,就会发现,其实我们所用的东西,实际开发中只用到很少很少的一部分,没有想象中那么难。大家要有信心。
- hibernate框架如何在项目中运用
- 在项目中搭建Hibernate框架步骤
- 如何在myeclipse中使用Hibernate框架
- 在现有struts2.0项目中整合hibernate框架
- 在现有struts2+hibernate项目中整合spring框架
- 如何在eclipse中使用hibernate持久化框架
- pm_stay_awake运用在sequans项目中。
- Xmind在项目管理中运用
- 了解CoordinatorLayout,在项目中运用
- 在项目中如何搭建自己的imagloader框架
- 在项目中如何使用ja-micro框架(一)
- 在项目中如何使用ja-micro框架(二)
- 在项目中如何使用ja-micro框架(三)
- 如何正确在OC项目中导入Charts框架
- Mina框架项目运用
- 在VB.NET中如何运用StrConv
- 如何在软件设计中运用UML
- 如何在软件设计中运用UML
- mysql在linux下的安装
- 详解栈区、堆区、全局区、文字常量区、程序代码区
- QT+Cmake编译OpenCV常见问题
- Spring官网下载
- 23种设计模式思维导图
- hibernate框架如何在项目中运用
- U盘内部结构
- PDO vs. MySQLi 选择哪一个?(PDO vs. MySQLi: Which Should You Use?)
- matlab_01
- 图形算法资源
- 数据库连接池实现
- com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@3ef88fde -- APPARENT DEADLOCK!!!
- Effective 学习(1) ---- 静态工厂方法
- 《Android游戏编程之从零开始》