package com.hbp.chapter2.model;
import junit.framework.TestCase;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class CompanyTest extends TestCase {
private SessionFactory sessionFactory;
protected void setUp() throws Exception {
Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
}
public void testCreateCompany() {
Company cp1 = new Company();
cp1.setName("Alibaba.com");
cp1.setUrl("http://www.alibaba.com");
cp1.setCreationDate(new Date());
Company cp2 = new Company();
cp2.setName("Alipay.com");
cp2.setUrl("http://www.alipay.com");
cp2.setCreationDate(new Date());
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(cp1);
session.save(cp2);
// session.evict(cp);
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
fail();
} finally {
session.close();
}
}
public void testBatchEvict() {
Session session = sessionFactory.openSession();
Company c1 = (Company) session.load(Company.class, new Long(1));
System.out.println("装载 Company [" + c1.getName() + "] 到一级缓存");
Company c2 = (Company) session.load(Company.class, new Long(2));
System.out.println("装载 Company [" + c2.getName() + "] 到一级缓存");
session.evict(c1);
System.out.println("清空了id为1的对象的一级缓存,下次在一级缓存中加载时将执行sql,而不会得到脏数据。");
Transaction tx = session.beginTransaction();
Query query = session.createQuery(
"update Company set name = 'BraveSoft'");
query.executeUpdate();
tx.commit();
Company cc1 = (Company) session.get(Company.class, new Long(1));
System.out.println("由于清空id为1的对象的一级缓存,上面会执行sql查询,不会得到脏数据:Company [" +
cc1.getName() + "]");
Company cc2 = (Company) session.get(Company.class, new Long(2));
System.out.println("由于没有清空id为2的对象的一级缓存,将得到脏数据:Company [" +
cc2.getName() + "]");
session.close();
Session session2 = sessionFactory.openSession();
Company cc = (Company) session2.get(Company.class, new Long(1));
if (cc != null) {
System.out.println("换了一个session, 二级缓存已被清空了,需要执行sql查询 Company [" +
cc.getName() + "]");
}
session2.close();
}
public void testBatchUpdateCompany() {
Session session = sessionFactory.openSession();
Company c = (Company) session.load(Company.class, new Long(1));
System.out.println("装载 Company [" + c.getName() + "] 到一级缓存");
Transaction tx = session.beginTransaction();
Query query = session.createQuery(
"update Company set name = 'BraveSoft'");
query.executeUpdate();
tx.commit();
Company c1 = (Company) session.get(Company.class, new Long(1));
System.out.println("装载一级缓存中对象(脏数据):Company [" + c1.getName() + "]");
session.close();
Session session2 = sessionFactory.openSession();
Company c2 = (Company) session2.get(Company.class, new Long(1));
if (c2 != null) {
System.out.println("重新执行Hibernate查询获取对象:Company [" + c2.getName() +
"]");
}
session2.close();
}
//
// public void testIterate() {
// Session session = sessionFactory.openSession();
// Iterator iter = session.createQuery(
// "FROM Company c, Category cat ORDER BY c.creationDate").iterate();
//
// while (iter.hasNext()) {
// Company c = (Company) iter.next();
// System.out.println("Result: " + c.getName());
// }
// }
//
// public void testTuple() {
// Session session = sessionFactory.openSession();
// List result = session.createQuery(
// "FROM Company AS comp JOIN Category AS cate").list();
// Iterator iter = result.iterator();
//
// while (iter.hasNext()) {
// Company c = (Company) iter.next();
// System.out.println("Result: " + c.getName());
// }
// }
public void testMapResults() {
Session session = sessionFactory.openSession();
List result = session.createQuery(
"SELECT new map(c.name AS name, c.url AS url) FROM Company c")
.list();
Iterator iter = result.iterator();
while (iter.hasNext()) {
Map m = (Map) iter.next();
for (Iterator i = m.entrySet().iterator(); i.hasNext();) {
Map.Entry e = (Map.Entry) i.next();
System.out.println(e.getKey() + ", " + e.getValue());
}
}
}
public void testListResults() {
Session session = sessionFactory.openSession();
List result = session.createQuery(
"SELECT new Company(c.name, c.url) FROM Company c").list();
Iterator iter = result.iterator();
while (iter.hasNext()) {
Company c = (Company) iter.next();
System.out.println("Result: " + c);
}
}
public void testResults() {
Session session = sessionFactory.openSession();
List result = session.createQuery("SELECT c.name, c.url FROM Company c")
.list();
Iterator iter = result.iterator();
while (iter.hasNext()) {
Object[] row = (Object[]) iter.next();
System.out.println("Result: " + row[0] + "," + row[1]);
}
}
public void testList() {
Session session = sessionFactory.openSession();
List result = session.createQuery(
"FROM Company AS c ORDER BY c.creationDate").list();
Iterator iter = result.iterator();
while (iter.hasNext()) {
Company c = (Company) iter.next();
System.out.println("Result: " + c.getName());
}
}
public void testUpdate() {
Session s1 = sessionFactory.openSession();
Transaction tx = s1.beginTransaction();
Company c2 = (Company) s1.load(Company.class, new Long(1));
c2.setName("Taobao.com");
s1.createQuery("from Company").list();
tx.commit();
s1.close();
}
public void testSessionCache() {
Session s1 = sessionFactory.openSession();
Transaction tx = s1.beginTransaction();
Company c1 = new Company();
c1.setName("Albiaba.com");
s1.save(c1);
Long id = c1.getId();
c1 = null;
Company c2 = (Company) s1.load(Company.class, id);
tx.commit();
s1.close();
System.out.println(c2.getName());
c2 = null;
}
public void testLoad() {
Session s1 = sessionFactory.openSession();
Transaction tx1 = s1.beginTransaction();
HibernateORM
需积分: 0 133 浏览量
更新于2008-11-24
收藏 23KB RAR 举报
《Hibernate ORM》是由李晓军等作者编著的书籍,主要涵盖了使用Hibernate进行对象关系映射(ORM)的最佳实践。Hibernate作为Java领域广泛使用的ORM框架,它极大地简化了数据库操作,将面向对象的编程思想与关系型数据库相结合,使得开发者可以更加专注于业务逻辑,而不是繁琐的SQL语句。在本书中,作者深入浅出地讲解了如何利用Hibernate来构建高效、可维护的Java应用程序。
我们需要理解Hibernate的核心概念。ORM,即Object-Relational Mapping,是一种编程技术,它允许开发人员使用面向对象的方式来操作数据库。Hibernate通过XML配置文件或注解方式定义对象与数据库表之间的映射关系,实现了Java对象和数据库记录的自动转换。
在第二章中,可能涉及的内容包括:
1. Hibernate的安装与配置:这部分会介绍如何在项目中添加Hibernate依赖,配置hibernate.cfg.xml文件,以及如何创建SessionFactory和Session对象。
2. 实体类与数据库表的映射:通过@Entity注解标识一个Java类为实体,@Table指定对应的数据库表,@Id和@IdClass用于定义主键,@Column、@OneToMany、@ManyToOne等注解用于映射字段和关系。
3. CRUD操作:Create(创建)、Read(读取)、Update(更新)和Delete(删除)是数据库操作的基本动作。Hibernate提供了方便的方法,如save()、get()、update()、delete(),以实现这些操作。
4. HQL(Hibernate Query Language)和Criteria API:HQL是Hibernate的查询语言,类似于SQL,但更面向对象。Criteria API则提供了一种更加类型安全、可读性更强的查询方式。
5. Session和Transaction管理:理解Session和Transaction的概念,知道何时开始和结束事务,以及如何处理并发和异常,是保证数据一致性的重要部分。
6.缓存机制:Hibernate提供了第一级缓存和第二级缓存,能有效提高数据访问性能。学习如何配置和使用缓存策略,可以避免不必要的数据库交互。
7. 数据库连接池:了解如何集成和配置数据库连接池,如C3P0、DBCP或HikariCP,以优化数据库连接的管理和复用。
8.性能优化:包括延迟加载(Lazy Loading)、批处理(Batch Processing)、缓存策略调整等方法,以提高系统性能。
在学习Hibernate的过程中,实践是关键。通过阅读提供的源代码,读者可以更好地理解理论知识,并将其应用于实际项目中。后续章节可能涵盖高级主题,如级联操作、多对多关系、继承映射、复合主键、查询优化等。通过不断学习和实践,开发者能够掌握Hibernate的精髓,提升开发效率,降低维护成本。
lxj8495138
- 粉丝: 1
- 资源: 15
最新资源
- Python自动化机器学习工具,使用遗传编程优化机器学习管道.zip
- ReactiveX for Python.zip
- 基于labview的滤波器、语音信号、指纹图像预处理设计 包含:1滤波器设计 2语音信号处理 3指纹图像预处理 共37页报告,报告很详细 共3个程序源码,附送详细报告
- Redis Python客户端.zip
- Rich是一个Python库,用于终端中的富文本和漂亮的格式化.zip
- Robyn是一个带有Rust运行时的超快速异步Python Web框架.zip
- Scapy基于python的交互式数据包处理程序库.zip
- Russell And Norvigs人工智能算法的Python实现.zip
- Screamingfast Python 35 HTTP工具包集成了基于uvloop和picohttpparser的管.zip
- Scrapy是一个用于Python的快速高级网页抓取框架.zip
- scikitlearn Python中的机器学习.zip
- Serverless Python.zip
- 颜色拾取器,个人学习整理,仅供参考
- 电力系统优化 matlab 微电网 综合能源 电厂优化 编程 代码 模型复现 关键词:微电网; 综合能源优化;多时间尺度滚动优化;风光储微网优化;场景生成;场景削减;机会约束规划;主从博弈;碳捕集
- BES秃鹰优化算法结合GRU做多特征输入单个因变量输出的拟合预测模型 程序注释详细直接替数据可以用 程序语言为matlab,最低版本要求2020及以上
- 二开白色UI汇汇通运营级 K线都正常的版本,运营级,接单、运营