您的位置:首页 > 其它

Hibernate的基本概念和CURD

2017-02-01 10:18 330 查看

基本概念

ORM框架 ——hibernate

1.开源的持久层框架.

2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据模型之间的映射.

3.连接java应用和数据库的中间件.

4.对JDBC进行封装,负责java对象的持久化.

5.在分层结构中处于持久化层,封装对数据库的访问细节,

使业务逻辑层更专注于实现业务逻辑

Hibernate的优点:

1、Hibernate对JDBC访问数据库的代码做了封装,大大简化

了数据访问层繁琐的重复性代码。

2、Hibernate是一个基于jdbc的主流持久化框架,是一个优秀

的orm实现,它很大程度的简化了dao层编码工作。

3、Hibernate使用java的反射机制,而不是字节码增强程序类实现

透明性

4、Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵

活性很出色。它支持很多关系型数据库,从一对一到多对多的各

种复杂关系。

5、Hibernate使数据库的操作完全面向对象。而不是从前的面向关系进行操作。

Session的几个主要方法

1.save,persist保存数据,persist在事务外不会产生insert语句。

2.delete,删除对象

3.update,更新对象,如果数据库中没有记录,会出现异常。

4.get,根据ID查,会立刻访问数据库。

5.Load,根据ID查,(返回的是代理,不会立即访问数据库)。

6.saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是托管的。

7.lock(把对象变成持久对象,但不会同步对象的状态)。

CURD

Java代码

1. 初始化代码(只做一次)

不指定配置文件的加载路径

private static SessionFactory sessionFactory;

static{
Configuration configuration = new Configuration();
//加载配置文件
configuration.configure();//默认加载src目录下的配置文件
//采用了工厂模式创建sessionFactory
sessionFactory = configuration.buildSessionFactory();
}


指定配置文件的加载路径



2. 保存例子

@Test
public void testSavePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
//由于在映射文件中已经说明主键的产生方式是hibernate内部产生,所以在程序中不用设置主键
person.setPid(3L);
person.setPname("菜肉");
person.setPsex("男");
session.save(person);
transaction.commit();
session.close();
}


结果显示:





3. 更新例子(方法一)

/**
* 1、必须从数据库中提取出数据再进行修改
* 2、session.get方法创建的对象利用的是默认的构造函数
*/
@Test
public void testUpdatePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
/**
* 1、先把修改的那行提取出来
* 说明:
*      Serializable是String和包装类的共同的父类
*/
Person person = (Person)session.get(Person.class,1L);
person.setPsex("不详");
session.update(person);
transaction.commit();
session.close();
}


结果显示:





4. 更新例子(方法二 不推荐)

**
* 1、必须从数据库中提取出数据再进行修改
* 2、session.get方法创建的对象利用的是默认的构造函数
*/
@Test
public void testUpdatePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
/**
* 新创建一个person对象
* 把pid为1的值设置进去
* 修改对象
*    这种修改方式不推荐
*/
Person person2 = new Person();
person2.setPid(1L);
person2.setPsex("女");
session.update(person2);
transaction.commit();
session.close();
}


结果显示:





从结果看出来,方法二需要对Person对象的全部属性都要进行设置,此方法不推荐使用

5. 查询例子

@Test
public void testQuery(){
Session session = sessionFactory.openSession();
List<Person> personList = session.createQuery("from Person").list();
System.out.println(personList.size());
}


结果显示:



6.删除例子(方法一)

/**
* 有两种方案
*/
@Test
public void testDelete(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, 1L);
session.delete(person);
transaction.commit();
session.close();
}


结果显示:





6.删除例子(方法二)

@Test
public void testDelete(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
person.setPid(1L);
session.delete(person);
transaction.commit();
session.close();
}


结果显示:





总结

Cnfiguration 类负责管理 Hibernate 的配置信息。包括如下内容:

Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应

hibernate.cfg.xml 文件)。

持久化类与数据表的映射关系(*.hbm.xml 文件)

创建 Configuration 的两种方式

属性文件(hibernate.properties): Configuration cfg = new Configuration();

Xml文件(hibernate.cfg.xml)

Configuration cfg = new Configuration().configure();

第二种创建方式较为常见。Hibernate.cfg.xml文件默认的目录为系统的根目录。

也可以利用config.config方法来指定配置文件所在的目录。 Configuration对象根据当前的配置信息生成

SessionFactory 对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory

对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)。

Configuration cfg = new Configuration().configure();

SessionFactory sf = cfg.buildSessionFactory();

是线程安全的。

SessionFactory是生成Session的工厂: Session session = sf.openSession();

构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。

在Hibernate中,Transaction tx =

session.beginTransaction()相当于给数据库操作起事务。Session.commit()则为提交事务。

Hibernate的整个运行过程如下:

1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,

2、并用这些信息生成一个SessionFactory对象,

3、然后从SessionFactory对象生成一个Session对象,

4、并用Session对象生成Transaction对象;

A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作;

B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息