hibernate.cfg.xml配置:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://127.0.0.1/java?characterEncoding=utf-8
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">
com.mysql.jdbc.Driver
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/etc/entity/Person.hbm.xml" />
<mapping resource="com/etc/entity/Sex.hbm.xml" />
</session-factory>
</hibernate-configuration>
=============================================
2个实体: package com.etc.entity; /**
* Person entity. @author MyEclipse Persistence Tools
*/ public class Person implements java.io.Serializable { // Fields private Integer pid;
private Sex sex; //n端持有1端的1个关联对象
private String pname; // Constructors /** default constructor */
public Person() {
} /** full constructor */
public Person(Sex sex, String pname) {
this.sex = sex;
this.pname = pname;
} // Property accessors public Integer getPid() {
return this.pid;
} public void setPid(Integer pid) {
this.pid = pid;
} public Sex getSex() {
return this.sex;
} public void setSex(Sex sex) {
this.sex = sex;
} public String getPname() {
return this.pname;
} public void setPname(String pname) {
this.pname = pname;
} @Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", sex=" + sex.getSexname() + "]";
} } ===============
package com.etc.entity; import java.util.HashSet;
import java.util.Set; /**
* Sex entity. @author MyEclipse Persistence Tools
*/ public class Sex implements java.io.Serializable { // Fields private Integer sexid;
private String sexname;
private Set persons = new HashSet(0); //1 端持有N端的1个集合对象 // Constructors /** default constructor */
public Sex() {
} @Override
public String toString() {
return "Sex [persons的数量:" + persons.size() + ", sexid=" + sexid + ", sexname="
+ sexname + "]";
} /** minimal constructor */
public Sex(String sexname) {
this.sexname = sexname;
} /** full constructor */
public Sex(String sexname, Set persons) {
this.sexname = sexname;
this.persons = persons;
} // Property accessors public Integer getSexid() {
return this.sexid;
} public void setSexid(Integer sexid) {
this.sexid = sexid;
} public String getSexname() {
return this.sexname;
} public void setSexname(String sexname) {
this.sexname = sexname;
} public Set getPersons() {
return this.persons;
} public void setPersons(Set persons) {
this.persons = persons;
} }
=============
Person.hbm.xml配置: <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.etc.entity.Person" table="person" catalog="java" lazy="true">
<id name="pid" type="java.lang.Integer">
<column name="pid" />
<generator class="identity" />
</id>
<many-to-one name="sex" class="com.etc.entity.Sex" lazy="false" cascade="save-update">
<column name="sexid" not-null="true"/>
</many-to-one>
<property name="pname" type="java.lang.String">
<column name="pname" length="20" not-null="true" />
</property>
</class>
<query name="find_unusual_sex">
from Person where sex.sexname not in('男性','女性 ')
</query>
<sql-query name="find_max_count_sex">
select t1.*,sex.sexname from
(select count(1) 人口,sexid from person group by sexid) t1,sex
where t1.人口
=
(select max(人口) from
(select count(1) 人口,sexid from person group by sexid) t2
)
and t1.sexid = sex.sexid;
</sql-query>
</hibernate-mapping>
============================
Sex.hbm.xml配置: <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.etc.entity.Sex" table="sex" catalog="java">
<id name="sexid" type="java.lang.Integer">
<column name="sexid" />
<generator class="identity" />
</id>
<property name="sexname" type="java.lang.String">
<column name="sexname" length="20" not-null="true" unique="true" />
</property>
<set name="persons" inverse="true" lazy="false" outer-join="false" cascade="">
<key>
<column name="sexid" not-null="true" />
</key>
<one-to-many class="com.etc.entity.Person" />
</set>
</class>
</hibernate-mapping>
==========================
测试类:hql查询.java package com.etc.test;
import java.util.List;
import java.util.Properties;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import com.etc.dao.HibernateSessionFactory;
import com.etc.entity.Person;
import com.etc.entity.Sex;
public class hql查询 {
static void 完整对象的查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造hql语句
String hql = "from Person where pname like '老%'";
//3 执行查询
List<Person> list = s.createQuery(hql).list();
//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}
static void 部分字段的查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造hql语句。只返回部分字段
String hql = "select pid,pname from Person where pname like '老%'";
//3 执行查询
List<Object[]> list = s.createQuery(hql).list();
//4 遍历
for(Object[] fields:list)
{
//把每条记录的字段显示查询
for(Object field:fields)
{
System.out.print(field+"\t");
}
System.out.println();
}
//5 关闭连接
HibernateSessionFactory.closeSession(); }
static void 关联条件查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//a 显式关联(inner join关键字)
//2 构造hql语句
String hql = "from Person as p inner join p.sex as s " +
"where s.sexname like '男%'";
//3 执行查询.获得主对象和关联对象
List<Object[]> list = s.createQuery(hql).list();
//4 遍历结果
for(int i=0;i<list.size();i++)
{
Person p = (Person) list.get(i)[0];
System.out.println(p);
}
//b 隐式关联.推荐使用
/*2 构造hql语句。使用关联对象的属性作为约束条件。
String hql = "from Person where sex.sexname like '女%'";
//3 执行查询
List<Person> list = s.createQuery(hql).list();
//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
*/
//5 关闭连接
HibernateSessionFactory.closeSession();
}
static void 聚合查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造hql语句
/*
String hql = "select '记录的总数:'||cast(count(pid),string) from Person";
List<Object> list = s.createQuery(hql).list();
System.out.println(list.get(0));
*/
//分组查询,统计各个性别的人数
String hql = "select '人数:'||cast(count(pid),string),'性别名:'||sex.sexname from Person " +
"group by sex";
List<Object[]> list = s.createQuery(hql).list();
for(Object[] fields:list)
{
//把每条记录的字段显示查询
for(Object field:fields)
{
System.out.print(field+"\t");
}
System.out.println();
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}
static void 分页查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造hql语句
String hql = "from Person where pname like '老%'";
//3 执行查询.第3到6条记录
Query q = s.createQuery(hql);
q.setFirstResult(2);//设置起点
q.setMaxResults(4);//设置条数
List<Person> list = q.list();
//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}
static void 命名查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//3 执行查询
List<Person> list = s.getNamedQuery("find_unusual_sex").list();
//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}
static void 动态参数查询() //支持?的hql语句
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//a ?作为动态参数
//String hql = "from Person where pname like ?";
//b 取参数别名。
//c 设置查询属性
//d 关联查询
String hql = "from Person where sex =:sex";
//String hql = "from Person where pname like :name " +
// "and sex.sexname =:sex";
Query q = s.createQuery(hql); //a 按照位置指定
//q.setString(0,"%白%"); //与jdbc不同,从0开始
/*b 按照别名进行指定
q.setParameter("name", "%老%");
q.setParameter("sex", "女性");
*/
/*c 采用构造"查询属性"的方法
Properties pro = new Properties();
pro.setProperty("name","%老%");
pro.setProperty("sex", "女性");
q.setProperties(pro);
*/
//d 设置关联对象作为查询条件
Sex sex = new Sex();
sex.setSexid(2); //只有sex.主键作为查询条件。
q.setEntity("sex", sex);//将对象作为sex参数的查询条件
//3 执行查询
List<Person> list = q.list(); //4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}
static void sql的查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造sql语句。找出人数最多的性别名,及它的人数
SQLQuery q = (SQLQuery) s.getNamedQuery("find_max_count_sex");
//3 执行查询
List<Object[]> list = q.list();
//4 遍历
for(Object[] fields:list)
{
//把每条记录的字段显示查询
for(Object field:fields)
{
System.out.print(field+"\t");
}
System.out.println();
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}
public static void main(String[] args)
{
//完整对象的查询();
//部分字段的查询();
//关联条件查询();
//聚合查询();
//分页查询();
//命名查询();
//动态参数查询();
sql的查询();
}
}

  

Hibernate---Hql查询2---的更多相关文章

  1. Hibernate HQL查询:

    Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查 ...

  2. Hibernate HQL查询语句总结

    Hibernate HQL查询语句总结 1. 实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql="from User user ";L ...

  3. 转: Hibernate HQL查询 插入 更新(update)实例

    1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...

  4. 第六讲(二) Hibernate HQL查询

    HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibe ...

  5. Hibernate HQL查询的参数绑定

    参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: ...

  6. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  7. hibernate HQL查询参数设置

    Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: Prepa ...

  8. Hibernate HQL查询 插入 更新(update)实例

    1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...

  9. Hibernate HQL查询(2)

    hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在Hiber ...

  10. Hibernate HQL查询(1)

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段           String hql ="from Users";   ...

随机推荐

  1. SMARTFORMS自定义打印格式

    [转自 http://lz357502668.blog.163.com/blog/static/16496743201272155135570/] 在sap的打印开发中经常需要自定义纸张,具体步骤如下 ...

  2. IDEA报错: Invalid bound statement (not found): com.test.mapper.UserMapper.selectByPrimaryKey(转发:https://www.cnblogs.com/woshimrf/p/5138726.html)

    学习mybatis的过程中,测试mapper自动代理的时候一直出错,在eclipse中可以正常运行,而同样的代码在idea中却无法成功.虽然可以继续调试,但心里总是纠结原因.百度了好久,终于找到一个合 ...

  3. 小程序网络请求arraybuffer 转为base64

    wx.request({ url: result.tempFilePath, method: 'GET', responseType: 'arraybuffer', success: function ...

  4. [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. P2567 [SCOI2010]幸运数字

    题目 P2567 [SCOI2010]幸运数字 做法 容斥+剪枝 先预处理幸运数字,别看数据范围这么大,其实也没几个,然后去掉倍数这种 然后处理相似数字,一眼的容斥,递归选数然后求出这些的公倍数容斥一 ...

  6. Netty使用LineBasedFrameDecoder解决TCP粘包/拆包

    TCP粘包/拆包 TCP是个”流”协议,所谓流,就是没有界限的一串数据.TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TC ...

  7. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

  8. kvm初体验之九:vm创建快照

    1. 准备一个磁盘格式为qcow2的vm(raw格式的磁盘无法创建快照) 方法一:从头安装一个磁盘格式为qcow2的vm [root@tanghuimin vm]# qemu-img create - ...

  9. 分享知识-快乐自己:Maven 无法加载 Oracle 数据库驱动源

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...

  10. C++(四)— 字符串、数字翻转3种方法

    1.使用algorithm中的reverse函数,string类型字符建议使用. #include <iostream> #include <string> #include ...