Hibernate API地址:http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/criterion/Projections.html
Hibernate 学习地址:http://my.oschina.net/u/274427/blog/68528
本文参考地址:http://blessht.iteye.com/blog/1327883
A:简单HQL语句查询
执行HQL需要创建Query对象:getSession().createQuery(hql语句);
千万注意:HQL语句中的表名和字段名不是数据库的表名和字段名,而是对应ORM映射POJO的类名和属性名!
被查询表中如果有外键关联,在执行查询时能将外键关联字段的值查询出来,但如果想查询关联表的其它字段会另外发SQL,这个特别要注意!
B:简单SQL语句查询
Hibernate同样支持写SQL,对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口
C:hibernate条件查询(Criteria)
获取Hibernate的Criteria对象方法:getSession().createCriteria(Class对象);
D:数据库查询核心是条件,绝大多数SQL都会带有WHERE子句,下面介绍简单的WHERE查询
[1]使用HQL“WHERE 字段=?”的形式给条件赋值<--- 通过query.setParameter(int,Obejct)方法即可给每个?赋值,注意第一个参数是从下标0开始!
[2]使用HQL “WHERE 字段=:key”的形式给条件赋值<-----调用setParameter(String,Object)和setParameterList两个方法,前者是赋单一值,后者是赋多个值(特别适合in查询赋值)。这两种赋值方法都需要传两参数:第一个参数是key值,对应HQL语句中的“:xxx”;第二个参数是value值,就对应key的实际值。这种传值比3-1-1更准确方便:一来不用担心下标错位的问题,二来如果存在”xx,xx,xx”这种格式的参数可以使用setParameterList方法,屡试不爽!
以上两个方法是使用HQL语句的,对应的还有使用SQL的两种方法,这两个的区别是
HQL对应的是Java实体对象的属性,SQL对应的是数据库中表的列
(1)新增一个POJO到数据库:this.getSession().save(arg0)传入参数是一个POJO对象,一定要有hbm.xml映射,Hibernate会根据对象类型发送新增SQL到数据库
(2)更新一条表数据,:this.getSession().update(arg0)传入参数是一个POJO对象,必须有ID,Hibernate会根据id更新数据,而且此方法会将POJO对象所有属性进行更新,也就是说假设Member表login_code为”kaka”,而执行update时Member对象中的logincode未设值,则最终表的login_code值会为null
(3)删除一条表数据:this.getSession().delete(arg0)传入参数是一个POJO对象,必须有ID,其它属性值可以不要
(4)查询操作this.getSession().get(arg0, arg1)传入参数arg0:POJO的Class,参数arg1:POJO的id,根据主键id查询一条字段数据
(5)延迟查询 this.getSession().load(arg0, arg1)传入参数与上面的get方法相同,功能也是根据id查询一条字段,唯一不同的是:get是调用该方法就发送SQL语句并返回数据;load是当使用返回对象时才发送SQL语句查询,如下代码
- Member m = …load(Member.class,id);
- Thread.sleep(1000);
- m.getId();
上面的代码肯定要发一条SQL语句查询Member表,如果用的是load方法,则是在睡眠完成运行m.getId()才发送SQL语句;而如果用的是get方法,则是在调用get方法就发送SQL语句了。
!!!!经典的更新操作
从上面的update语句中我们能看到一个弊端:不能定制更新个别字段,只能更新全部字段。Hibernate提供了一种持久化状态的更新机制,这种更新方法非常奇妙:
- Member member = (Member) getSession().get(Member.class, id);
- member.setLoginCode("akaka");
- member.setPassword("654321");
猜想上面这段代码会发几句SQL?根据控制台调试发现总共发了两句SQL:一句是SELECT语句查询Member表,另一句是UPDATE语句更新Member表字段,最终查询数据库时发现logincode和password的值都变成了上面设置的值。
这是一种非常好使的UPDATE方法,不用写SQL语句,直接先get后set即可自动发送SQL。
相关推荐
Java源代码通用后台管理系统通常包括以下几个核心模块: 1. **用户认证与授权**:这部分涉及到用户登录、权限控制、角色管理等功能。它通常使用Spring Security或Apache Shiro等框架来实现,确保只有合法的用户可以...
- commons-logging.jar:通用的日志API,允许更换底层实现。 - commons-lang3.jar:Apache Commons Lang库,提供实用的字符串和对象操作方法。 - javassist.jar:Hibernate使用的代码生成工具,用于运行时动态...
本文将详细讲解几个常见的Java工具类,包括地址解析工具、日期操作工具、邮件工具、JSON工具以及SQL工具,这些工具类极大地提高了开发效率。 1. 地址解析工具:在处理网络相关的任务时,例如获取或设置IP地址、域名...
SSH整合是Java开发中常见的一个任务,涉及到Spring、Struts和Hibernate这三个开源框架的集成。在Java Web开发中,这三大框架的组合提供了强大的模型-视图-控制器(MVC)架构支持,使得应用程序的开发更为高效和灵活...
首先,Java框架通常会涉及以下几个核心领域: 1. **MVC模式**:许多Java框架遵循Model-View-Controller(模型-视图-控制器)架构模式,用于组织应用程序的逻辑。在这个框架中,可能会看到与控制器相关的类,它们...
Java 的诞生源于Sun公司的"Green计划",旨在为嵌入式系统开发一个通用的控制系统。由于C++在特定方面存在局限,如缺乏垃圾回收机制、可移植性、分布式和多线程功能,Sun的首席科学家比尔·乔伊决定开发一种新的语言...
在分析这个后台管理框架时,我们可以探讨以下几个关键知识点: 1. **框架结构**:一个后台管理框架通常会包含一套完整的应用程序结构,如MVC(Model-View-Controller)模式,用于分离业务逻辑、数据处理和用户界面...
Java的学习通常分为以下几个主要部分: 1. **基础语法**:包括关键字、注释、变量、数据类型、运算符、流程控制语句(条件语句和循环语句)等。 2. **面向对象编程**:Java是一种面向对象的语言,因此理解类、对象...
骨架(Skeleton)是一个专为Java和Groovy开发者设计的通用框架,它旨在简化开发过程,提高代码的可重用性和可扩展性。该框架的核心目标是通过提供一套标准的架构和工具,帮助开发者快速构建健壮的应用程序。下面将...
Spring由那几个模块组成? 答:Spring主要由7个模块组成: 1:Spring核心容器:提供了Spring框架的基本功能 2:Spring AOP:通过配置管理特性 3:Spring ORM:Spring框架集成了若干ORM框架 4:Spring DAO:打开...
分页技术通常涉及以下几个核心概念: 1. **分页查询**:在数据库中,我们并不一次性获取所有数据,而是根据每页的大小(如每页10条)来执行SQL查询,只获取当前页所需的数据。在Struts2中,这可能通过自定义Action...
- Hibernate作为流行的Java ORM框架,提供了Query和Criteria API进行分页。使用`setFirstResult()`设置起始位置,`setMaxResults()`设置最大返回结果数来实现分页。 3. JSP内置对象和标签库分页: - JSP中的...
这涉及到以下几个关键知识点: 1. **Struts框架基础**:首先,我们需要理解Struts的核心组件,如Action类、配置文件(struts-config.xml)、ActionForm、Interceptor等,以及它们在处理HTTP请求和响应中的作用。 2. ...
反射机制主要涉及以下几个核心API: 1. `Constructor<T>`:代表类的构造器,用于创建并初始化类的新实例。 2. `Method`:代表类的方法,可以用来调用静态或实例方法。 3. `Field`:代表类的字段(变量),用于访问...
Java主要由以下几个核心部分组成: 1. **Java虚拟机(JVM)**:JVM是Java程序运行的基础,它解析并执行字节码,使得Java程序能在任何支持JVM的平台上运行。JVM还有垃圾回收机制,自动管理内存,避免了内存泄漏。 2...
在Java的学习过程中,以下几个关键知识点至关重要: 1. **基础语法**:Java的基础语法与C++相似,但更加强调安全性。包括数据类型(如整型、浮点型、字符型和布尔型)、变量、常量、运算符、流程控制语句(如if-...
Java编程主要包括以下几个主要部分: 1. **基础语法**:包括变量、数据类型、运算符、流程控制(如if语句、for循环、while循环)、方法定义与调用等。 2. **类与对象**:Java是一种面向对象的语言,类是对象的蓝图...
对于 Spring Boot 的学习,可以分为以下几个步骤: 1. 入门:从官方文档开始,了解 Spring Boot 的基本概念和特点,学习如何创建第一个“Hello, World!”应用。 2. 自动配置:深入理解自动配置机制,了解 @...
这类系统通常具备以下几个特征: - **高并发性**:每天可能面临成千上万甚至更多的用户同时在线访问。 - **海量数据处理**:存储并处理大量的用户数据和交易记录。 - **分布式结构**:采用分布式技术来提高系统的...