Hibernate的基本概念和CURD
来源:互联网 发布:如何下载淘宝红包 编辑:程序博客网 时间:2024/05/17 23:31
基本概念
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 文件)
- Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应
创建 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对象将提交这些操作到数据库中。
- Hibernate的基本概念和CURD
- Hibernate基本概念和CURD
- 【hibernate】hibernate 2 (基本概念和CURD)
- hibrnate的基本概念和curd
- hibernate基本概念和CURD(增删改查)详解
- Hibernate开发流程——基本概念和CURD
- 【hibernate】赵雅智_hibernate 2 (基本概念和CURD)
- 基本概念和CURD
- 基本概念和CURD
- Hibemate基本概念和CURD详解
- Hibernate的CURD操作
- Hibernate 简单的CURD操作
- 5. Hibernate的简易CURD操作
- Hibernate构建一个CURD的程序
- JavaWeb框架-Hibernate-3-不厌其烦的CURD!
- Hibernate基本概念和CRUD2
- Hibernate基本概念和CRUD2
- Hibernate(二)—Hibernate的一些基本概念和查询
- [codeforces761F] Dasha and Photos
- 蓝桥杯搭积木问题DFS
- java 木马开发(5)---服务端 --- 对话框函数和截屏函数
- 树的重量_洛谷1268_递推
- 面试宝典12
- Hibernate的基本概念和CURD
- GTX1070显卡驱动导致the system is running in low-graphics mode解决办法
- 微信小程序页面布局方式 (react native也可以用)-温故而知新
- #“Machine Learning”(Andrew Ng)#Week 3_1:Classification and Representation
- Maven学习记录(一)--IDEA下环境配置
- IOS 获取系统时间
- StringUtils方法
- POJ-3856(模拟构造目录树)
- 开始使用Mac OS X——写给Mac新人