Hibernate  Api

|-- Configuration       配置管理类对象

config.configure();    加载主配置文件的方法(hibernate.cfg.xml) 默认加载src/hibernate.cfg.xml

config.configure(“cn/config/hibernate.cfg.xml”);   加载指定路径下指定名称的主配置文件

config.buildSessionFactory();   创建session的工厂对象

|-- SessionFactory     session的工厂(或者说代表了这个hibernate.cfg.xml配置文件)

sf.openSession();   创建一个sesison对象

sf.getCurrentSession();  创建session或取出session对象

|--Session       session对象维护了一个连接(Connection), 代表了与数据库连接的会话。Hibernate最重要的对象: 只用使用hibernate与数据库操作,都用到这个对象

session.beginTransaction(); 开启一个事务; hibernate要求所有的与数据库的操作必须有事务的环境,否则报错!

写一个代码测试,如下:

写一个测试类,先将配置管理对象类和session的工厂类加载进来

private static SessionFactory sf;
	static{
		/*
		 * //1、创建配置管理对象	【Configuration:配置管理类对象】
		Configuration config=new Configuration();
		//加载配置文件(默认加载src/hibernate.cfg.xml)、
		config.configure();
		//2、根据加载的配置管理类对象,创建sessionFactory对象(代表了整个hibernate.cdg.xml配置文件)
		SessionFactory sf=config.buildSessionFactory();
		*/
		sf=new Configuration().configure().buildSessionFactory();
	}

(1)保存对象(插入数据)

@Test
	public void testInsert() {
		//对象
		User user=new User();
		user.setName("test");
		user.setPassword("666");
		//根据session工厂,创建session对象(维护了一个连接Connection,代表了数据库连接的会话)
		Session session=sf.openSession();
		//开启事物
		Transaction transaction=session.beginTransaction();
		/*************执行操作*********/
		session.save(user);
		//提交事物/关闭
		transaction.commit();
		session.close();
		sf.close();
	}

(2)、更新对象

/*
	 * 更新对象
	 */
	@Test
	public void testUpdate() {
		//对象
		User user=new User();
		user.setId(4);
		user.setName("test5");
		user.setPassword("666");
		//根据session工厂,创建session对象(维护了一个连接Connection,代表了数据库连接的会话)
		Session session=sf.openSession();
		//开启事物
		Transaction transaction=session.beginTransaction();
		/*************执行操作*********/
		//session.update(user);
		//主键查询
		//User user2=(User) session.get(User.class, 1);
		//User user2=(User) session.load(User.class, 1);	//同上
		//没有设置主键,执行保存操作(插入数据);设置了主键,执行更新操作(若主键设置的值不存在也会报错)
		session.saveOrUpdate(user);
		//System.out.println(user2);
		//提交事物/关闭
		transaction.commit();
		session.close();
		sf.close();
	}

三种查询方式

(1)、HQL查询:

HQL查询与SQL查询区别:

SQL: (结构化查询语句)查询的是表以及字段;  不区分大小写。

HQL: hibernate  query  language 即hibernate提供的面向对象的查询语言

查询的是对象以及对象的属性。区分大小写。

如下:

//HQL查询 Hibernate query language
	@Test
	public void testHQL() {
		Session session=sf.openSession();
		//开启事物
		Transaction transaction=session.beginTransaction();

		//HQL查询,查询全部(注意:查询的是对象以及对象的属性,不是表,区分大小写)
		Query query=session.createQuery("from User where id=1 or id=2");
		List<User> users=query.list();
		System.out.println(users);
		transaction.commit();
		session.close();
		sf.close();
	}

(2)、Criteria查询:

完全面向对象的查询。

如下:

//QBC查询 query by Criteria
	@Test
	public void testQBC() {
		Session session=sf.openSession();
		//开启事物
		Transaction transaction=session.beginTransaction();

		Criteria criteria=session.createCriteria(User.class);
		//查询条件
		criteria.add(Restrictions.eq("id", 1));
		List<User> list=criteria.list();
		System.out.println(list);
		transaction.commit();
		session.close();
		sf.close();
	}

(3)、SQL查询

本地SQL查询:

复杂的查询,就要使用原生态的sql查询,也可以,就是本地sql查询的支持!

(缺点: 不能跨数据库平台!)

//SQL查询
	@Test
	public void testSQL() {
		Session session=sf.openSession();
		//开启事物
		Transaction transaction=session.beginTransaction();
		//把每一行记录指定为的喜爱那个类型
		SQLQuery sqlQuery=session.createSQLQuery("select * from users").addEntity(User.class);
		List list=sqlQuery.list();
		System.out.println(list);
		transaction.commit();
		session.close();
		sf.close();
	}

用hibernate来分页查询

    //分页查询
	@Test
	public void testPage() {
		Session session=sf.openSession();
		//开启事物
		Transaction transaction=session.beginTransaction();

		Query query=session.createQuery("from User");
		//设置分页参数  从0开始查询
		query.setFirstResult(0);	//查询的起始记录
		query.setMaxResults(4);		//查询的条数
		List<User> list=query.list();
		System.out.println(list);

		transaction.commit();
		session.close();
		sf.close();
	}

js:获取指定class兼容性问题、

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>获取指定的class</title>
    <link rel="stylesheet" href="">
</head>

<body>
    <ul>
        <li></li>
        <li class="box"></li>
        <li class="box"></li>
        <li></li>
        <li></li>
    </ul>
</body>
<script type="text/javascript">
	//虽然主流的浏览器都支持,但ie6 7 8都是不支持的
	//var ali=document.getElementsByClassName('box');
	var ali=getByClass(document,'box');
	for (var i = ali.length - 1; i >= 0; i--) {
		ali[i].style['background']='green';
	}
	//可以封装一个函数来获取className,使得ie6,7,8都支持
	function getByClass (oParent,sClass) {
		var elems=oParent.getElementsByTagName('*');
		var arr=[];
		for (var i = elems.length - 1; i >= 0; i--) {
			if (elems[i].className==sClass) {
				arr.push(elems[i]);
			}
		}
		return arr;
	}
</script>
</html>

Hibernate的Api以及三种查询方式的更多相关文章

  1. hibernate的三种查询方式

    hibernate的三种查询方式 目录 hibernate的三种查询方式 1.HQL查询 1.1.SQL概述 1.2.实体查询 1.3.带where的查询 1.3.属性查询 1.4.实体的更新和删除 ...

  2. 初学者易上手的SSH-hibernate02 三种查询方式

    在上一章中已经搭建好了一个hibernate的环境,那么这一章我们就使用这个环境来进行基本CRUD.在这之前我们先了解一个东西:主键生成策略.就是当向数据库表中插入记录的时候,这个记录的主键该如何生成 ...

  3. EF提供的三种查询方式

    這邊簡單介紹一下,ADO.Net Entity Framework 提供的三種查詢方式, Linq to Entities Query Builder Mothed Entity SQL Langua ...

  4. django 神奇的双下划线,通过外键的三种查询方式

    一,用于跨表操作 只要是object后面字符串都是用双下划线__.其它地方用点. 如:的values中的group_code__name.group_code是一个外键 def list(reques ...

  5. mybatis学习四 mybatis的三种查询方式

    <select id="selAll" resultType="com.caopeng.pojo.Flower"> select * from fl ...

  6. Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...

  7. Spring IOC以及三种注入方式

    IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...

  8. python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)

    一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...

  9. Entity Framework 5.0系列之EF概览-三种编程方式

    概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种 ...

随机推荐

  1. 3D打印软件工具

    切片与工艺规划(打印)软件: 3D打印中另外两个重要的步骤(切片和打印)中可以用到的一些开源,免费的软件和应用 Cura        开源, 免费                    Python ...

  2. tarjan算法的补充POJ2533tarjan求度

    做题时又遇到了疑惑,说明一开始就没有完全理解 基于dfs的tarjan,搜索时会有四种边 树枝边:DFS 时经过的边,即 DFS 搜索树上的边 前向边:与 DFS 方向一致,从某个结点指向其某个子孙的 ...

  3. Visualise the Argyris basis functions

    """ Author: kinnala Visualise the Argyris basis functions. """ from sk ...

  4. Excel VBA语句集

    Excel VBA语句集 引子 最近批阅学生成绩,用Excel 处理学生成绩,用到VBA 提高办公效率.需要经常查阅VBA的一些用法 正文 定制模块行为 (1) Option Explicit '强制 ...

  5. LDAP常用属性及其描述

    属性 全名 描述 dn distinguished name 唯一标识名,类似于绝对路径,每个对象都有唯一标识名. 例如:uid=tester,ou=People,dc=example,dc=com ...

  6. Django:在模板中获取当前url信息

    确保项目配置里的context_processors包含django.template.context_processors.request. 从 Django 1.9 开始, 默认是已经配置的. P ...

  7. WPF学习笔记(5):两个DataGrid的滚动条实现同步滚动

    效果:两个DataGrid的滚动条实现同步滚动. 代码参考了博客园chuncn的文章<.net中同步多个ScrollViewer滚动的四种方法>,原文是针对ListBox的.现改为针对Da ...

  8. Spring IOC 容器源码分析系列文章导读

    1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring ...

  9. Python 库,资源

    库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...

  10. cad 关键字被保留了?选择集关键字保留了? N S W E关键字无法用?

    N S W E是东南西北四个方位,s是南方270度,在设置关键字的时候必须避开这四个关键字. 设置早期的R14 也有.