hibernate测试
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于hibernate测试内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在hibernate测试相关知识领域提供全面立体的资料补充。同时还包含 h6、hack、hadoop 的知识内容,欢迎查阅!
hibernate测试相关知识
-
Hibernate一级缓存测试分析Hibernate 一级缓存测试分析Hibernate的一级缓存就是指Session缓存,此Session非http的session会话技术,可以理解为JDBC的Connection,连接会话,Session缓存就是一块内存空间,用来存放相互管理的java对象,在使用Hibernate查询对象的时候,首先使用对象的OID(Object ID)在Hibernate 的一级缓存空间进行查找,如果通过OID匹配到了对象,就直接从一级缓存中取出使用,如果没有找到匹配该OID值的对象,这才会进行查询数据库。当从数据库中查询数据的时候,该数据就会被放入到Session缓存中,目的就是为了减少数据库的访问次数,从而提高性能。Hibernate缓存特点当应用程序调用Session接口的 save(), update(), saveOrUpdate() 时候,如果缓存中没 有相应的对象,Hb就会自动的把查询信息加入到缓存。当应用程序调用Session接口的 load(), get(), list() 等查询方法的时候,会进行
-
Hibernate面试题大全tags: SQLServer Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用? 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sesssion 创建事务Transation 持久化操作 提交事务 关闭Session 关闭SesstionFactory 使用Hibernate框架就不用我们写很多繁琐的SQL语句。Hibernate实现了ORM,能够将对象映射成数据库表,从而简化我们的开发! Hibernate是如何延迟加载(懒加载)? Hibernate是如何延迟加载(懒加载)? 通过设置属性lazy进行
-
001 Hibernate 初始Hibernate 是什么Hibernate 是一个优秀的Java持久层矿建Hibernate 是对 JDBC 做轻量级封装的ORM框架Eclipse 下Hibenate 插件安装 参考:http://www.cnblogs.com/AlanLee/p/5836823.htmlHibernate 初始导入相关jar包导入Hibernate jar包导入hibernate 下 lib目录下required下所有的jar导入数据驱动jar编写代码创建Hibernate配置文件(hibernate.cfg.xml)编写实体类 编写实体映射文件 编写测试代码<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Conf
-
My Hibernate学习手记一.Hibernate学习之表单映射 1.什么是ORM ORM(object / relationship /mapping):对象/关系映射 Hibernate是一种可行的ORM框架技术 2.Hibernate简介(开源) 3.Hibernate例子 (1)创建Hibernate的配置文件 Hibernate.cfg.xml (2)创建持久化类 (3)创建对象关系映射 (4)通过Hibernate-api编写访问数据库的代码 二.Hibernate进阶 4.Hibernate.cfg.xml常配置 (1) hibernate.show_sql 表示hibernate运行时将sql语句输出到控制台,编码便于测试。 (2) hibernate.forma
hibernate测试相关课程
hibernate测试相关教程
- 2.1 测试 get() 方法 Student stu=null;try{ // 打开事务 transaction = session.beginTransaction(); //使用get()方法查询学号为1的学生 stu=(Student)session.get(Student.class, new Integer(1)); System.out.println("--------------输出学生信息------------------"); System.out.println(stu.getStuName()); transaction.commit(); } catch (Exception e) { transaction.rollback();} finally { session.close();}System.out.println("***********关闭Session之后******************");System.out.println(stu.getStuName());如上测试代码,和上一节课程的 get() 方法测试有区别:调用 **get()** 方法查询编号为 1 的学生数据,但会在输出学生数据之前先输出一条提示语句,作为标识分割线;关闭 Session 对象后继续使用查询出来的学生数据。查看代码运行结果:selectstudent0_.stuId as stuId1_0_0_,student0_.stuName as stuName2_0_0_,student0_.stuPassword as stuPassw3_0_0_,student0_.stuPic as stuPic4_0_0_,student0_.stuSex as stuSex5_0_0_ fromStudent student0_ wherestudent0_.stuId=?--------------输出学生信息------------------Hibernate是老大***********关闭Session之后******************Hibernate是老大结果能说明什么问题呢?仔细分析输出的日志信息:调用 get() 方法时,Hibernate 就构建了一条 Sql 语句。说明,调用 get() 方法时,Hibernate 就跑了一趟数据库,并拿到了开发者指定的数据;关闭 Session 对象后,程序可以继续使用学生数据。说明,通过 get() 方法获得的数据已经保存到程序运行的内存中,不需要再依赖 Session。想说明什么?不想说明什么?只是一个结论。
- 5. 测试 我们直接编写测试类,对数据访问接口进行测试。此处通过 @FixMethodOrder(MethodSorters.NAME_ASCENDING) 注解,使测试方法按名称顺序依次执行。这样就可以一次性测试 GoodsDao 中的所有方法了,具体测试代码如下:实例:/** * GoodsDao测试类 */@SpringBootTest@FixMethodOrder(MethodSorters.NAME_ASCENDING) // 按方法名称顺序测试class GoodsDaoTest { @Autowired private GoodsDao goodsDao; /** * 新增一个商品 */ @Test void test_01() { GoodsDo goods = new GoodsDo(); goods.setName("手机"); goods.setPic("phone.jpg"); goods.setPrice("2000"); int count = goodsDao.insert(goods); assertEquals(1, count);// count值为1则测试通过 } /** * 更新商品信息 */ @Test void test_02() { GoodsDo goods = new GoodsDo(); goods.setId(1L); goods.setName("手机"); goods.setPic("phone.jpg"); goods.setPrice("3000"); int count = goodsDao.update(goods); assertEquals(1, count);// count值为1则测试通过 } /** * 获取商品信息 */ @Test void test_03() { GoodsDo goods = goodsDao.selectOne(1L); assertNotNull(goods);// goods不为null则测试通过 } /** * 删除商品 */ @Test void test_04() { int count = goodsDao.deletex(1L);//此处应为delete(1L) assertEquals(1, count);// count值为1则测试通过 } /** * 获取商品信息列表 */ @Test void test_05() { List<GoodsDo> goodsList = goodsDao.selectAll(); assertEquals(0, goodsList.size());// goodsList.size()值为0则测试通过 }}测试结果如下,说明所有测试都通过了。JUnit 测试结果
- 2.3 测试时间 查询学生及学生的地址信息:try { transaction = session.beginTransaction(); Student stu = (Student) session.get(Student.class, new Integer(1)); System.out.println("----------------学生信息---------------"); System.out.println("学生姓名:" + stu.getStuName()); System.out.println("-----------------地址信息-----------------"); System.out.println("学生家庭地址:"+stu.getAddress().getAddressName()); transaction.commit();} catch (Exception e) { transaction.rollback();} finally { session.close();}输出结果:Hibernate: select student0_.stuId as stuId1_1_1_, student0_.addressId as addressI6_1_1_, student0_.stuName as stuName2_1_1_, student0_.stuPassword as stuPassw3_1_1_, student0_.stuPic as stuPic4_1_1_, student0_.stuSex as stuSex5_1_1_, address1_.addressId as addressI1_0_0_, address1_.addressName as addressN2_0_0_, address1_.descript as descript3_0_0_ from Student student0_ left outer join Address address1_ on student0_.addressId=address1_.addressId where student0_.stuId=?----------------学生信息---------------学生姓名:Hibernate老大-----------------地址信息-----------------学生家庭地址:北京Hibernate 使用 left outer join 构 建一条 Sql 语句,一次性访问 2 张表,同时获取了学生信息和地址信息;请问 Hibernate,你能不能查询地址信息时,查询出地址是哪个学生的。可以,但是,需要在地址类中添加如下代码:private Student student;@OneToOne(targetEntity=Student.class,mappedBy="address")public Student getStudent() { return student;}@OneToOne 注解的 targetEntity=Student.class 告诉 Hibernate,此属性的值对应的是学生表中的数据;在 Student 类已经使用了 @OneToOne 映射。mappedBy=“address” 意思是说:Hibernate!student 类中已经说明的够清楚了吧,这里就不要我再啰嗦了。测试实例:try { transaction = session.beginTransaction(); Address address = (Address) session.get(Address.class, new Integer(1)); System.out.println("----------------地址信息---------------"); System.out.println("地址信息:" + address.getAddressName()); System.out.println("-----------------学生信息-----------------"); System.out.println("学生姓名:" + address.getStudent().getStuName()); transaction.commit();} catch (Exception e) { transaction.rollback();} finally { session.close();}输出结果:Hibernate 自动构建了多表查询语句,一次性从数据库获取所有数据。Hibernate: select address0_.addressId as addressI1_0_1_, address0_.addressName as addressN2_0_1_, address0_.descript as descript3_0_1_, student1_.stuId as stuId1_1_0_, student1_.addressId as addressI6_1_0_, student1_.stuName as stuName2_1_0_, student1_.stuPassword as stuPassw3_1_0_, student1_.stuPic as stuPic4_1_0_, student1_.stuSex as stuSex5_1_0_ from Address address0_ left outer join Student student1_ on address0_.addressId=student1_.addressId where address0_.addressId=?----------------地址信息---------------地址信息:北京-----------------学生信息-----------------学生姓名:Hibernate老大无论是从学生表查询到地址表,还是从地址表查询到学生表。只要有足够的信息告诉 Hibernate 如何关联到数据库中对应的表,Hibernate 都会如你所愿。
- 4. 测试 我们主要是测试 JPA 模块正确可用,所以直接在测试类发起对 IGoodsDao 方法的测试即可。
- 2.6 测试 通过测试类发起测试,此处我们简单执行 1000 次插入,看看执行时间。需要注意的是,Spring Boot 进行测试时,需要添加注解 @SpringBootTest 。添加注解后该类可以直接通过 @Test 标注的方法发起单元测试,容器环境都已准备好,非常方便。实例:@SpringBootTest // 通过该注解,开启测试类功能,当测试方法启动时,启动了Spring容器class SpringBootHikariApplicationTests { @Autowired private DataSource dataSource;// 自动注入数据源 @Autowired private GoodsDao goodsDao; /** * 打印数据源信息 */ @Test // 测试方法 void printDataSource() { System.out.println(dataSource); } /** * 批量插入测试 */ @Test void insertBatch() { // 开始时间 long startTime = System.currentTimeMillis(); // 执行1000次插入 GoodsDo goods = new GoodsDo(); goods.setName("测试"); goods.setPic("测试图片"); goods.setPrice("1.0"); for (int i = 0; i < 1000; i++) { goodsDao.insert(goods); } // 输出操作时间 System.out.println("use time:" + (System.currentTimeMillis() - startTime)+"ms"); }}输出结果如下,可见默认数据源类型为 HikariDataSource ,插入 1000 条数据的时间大概为 1500ms (注意时间可能跟电脑性能等很多因素相关,此处只是进行简单的对比测试)。use time:1518mscom.zaxxer.hikari.HikariDataSource
- 2.3 测试 我们在项目中与 main 目录同级的 test 目录中找到测试类 ZkClientDemoApplicationTests ,在其中添加测试方法。2.3.1 查询测试package cn.cdd.zkclientdemo;import cn.cdd.zkclientdemo.service.ZkClientServer;import org.I0Itec.zkclient.ZkClient;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTestclass ZkClientDemoApplicationTests { // 依赖注入 @Autowired private ZkClientServer zkClientServer; @Test void contextLoads() { // 获取 ZkClient 对象 ZkClient zkClient = zkClientServer.getZkClient(); // 获取子节点集合 List<String> children = zkClient.getChildren("/"); System.out.println(children); // 释放资源 zkClient.close(); }}执行测试方法,控制台输出:[zookeeper, imooc]我们可以看到控制台输出了在上一节中我们增加的节点 imooc,说明我们的查询成功执行了。接下来我们测试其它的 API。2.3.2 创建持久节点创建持久节点测试:@Testvoid contextLoads() { ZkClient zkClient = zkClientServer.getZkClient(); // 在 imooc 节点下创建持久节点 wiki zkClient.createPersistent("/imooc/wiki"); // 获取 imooc 节点的子节点集合 List<String> children = zkClient.getChildren("/imooc"); System.out.println(children); // 释放资源 zkClient.close();}执行测试方法,控制台输出:[wiki]2.3.3 删除节点删除节点测试:@Testvoid contextLoads() { ZkClient zkClient = zkClientServer.getZkClient(); // 删除 imooc 的 子节点 wiki boolean delete = zkClient.delete("/imooc/wiki"); System.out.println(delete); // 释放资源 zkClient.close();}执行测试方法,控制台输出:truetrue 表示删除 wiki 节点成功。2.3.4 读写数据节点数据读写测试:@Testvoid contextLoads() { ZkClient zkClient = zkClientServer.getZkClient(); // 给 imooc 节点写入数据 wiki zkClient.writeData("/imooc","wiki"); // 读取 imooc 节点的数据 Object data = zkClient.readData("/imooc"); System.out.println(data); // 释放资源 zkClient.close();}执行测试方法,控制台输出:wikiTips: 当我们使用 API 操作节点时,节点参数必须是全路径。测试完成后,我们来对 ZkClient 常用的 API 做一下介绍。
hibernate测试相关搜索
-
h1
h6
hack
hadoop
halt
hana
handler
hanging
hash
hashtable
haskell
hatch
hbase
hbuilder
hdfs
head
header
header php
headers
headerstyle