Hibernate与数据库交互方式和Hibernate常用的几个方法

第一种,适合sql语言水平比较高的人用

HQL(Hibernate Query Language)

面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:

Query q = session.createQuery(hql);

eg: from Person

from User user where user.name=:name

from User user where user.name=:name and user.birthday < :birthday

 1 @SuppressWarnings("unchecked")
 2 @Override
 3 @Transactional(propagation = Propagation.NOT_SUPPORTED)
 4 public List<User> check(String username, String email, String peopleId) {
 5     String hql = "from User where username=:uName or email=:email or peopleId=:PID";
 6     Query q = factory.getCurrentSession().createQuery(hql);
 7     q.setString("uName", username);
 8     q.setString("email", email);
 9     q.setString("PID", peopleId);
10     List list = q.list();
11     return list;
12 }

第二种,矮油,偶sql语言水平有点欠缺,用这个吧,""内是表格的字段名,这里千万要注意,字段名要和hbm.xml文件中字段名大小写一致。

Criteria

Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:

Criteria crit = session.createCriteria(DomainClass.class);

简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)), 这个Restrictions.eq就是QBC运算符

criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))

1 @SuppressWarnings("unchecked")
 2 @Override
 3 @Transactional(propagation = Propagation.NOT_SUPPORTED)
 4 public List<User> check(String username, String email, String peopleId) {
 5     Criteria c = factory.getCurrentSession().createCriteria(User.class);
 6     c.add(Restrictions.or(Restrictions.eq("userName", username),
 7             Restrictions.or(Restrictions.eq("email", email), Restrictions
 8                 .eq("peopleId", peopleId))));
 9     List list = c.list();
10     return list;
11 }

另外简单介绍一下QBC运算符

= Restrictions.eq() 等于

<> Restrictions.not(Exprission.eq()) 不等于

> Restrictions.gt() 大于

>= Restrictions.ge() 大于等于

< Restrictions.lt() 小于

<= Restrictions.le() 小于等于

is null Restrictions.isnull() 等于空值

is not null Restrictions.isNotNull() 非空值

like Restrictions.like() 字符串模式匹配

and Restrictions.and() 逻辑与

and Restrictions.conjunction() 逻辑与

or Restrictions.or() 逻辑或

or Restrictions.disjunction() 逻辑或

not Restrictions.not() 逻辑非

in(列表) Restrictions.in() 等于列表中的某一个值

ont in(列表) Restrictions.not(Restrictions.in())不等于列表中任意一个值

between x and y Restrictions.between() 闭区间xy中的任意值

not between x and y Restrictions.not(Restrictions..between()) 小于值X或者大于值y

常用的几个方法:

分页:setFirstResult(num),从第num条记录开始,setMaxResults(num),总共num条记录。 查询:list();
另外还有排序

 1 List cats = sess.createCriteria(Cat.class)
 2     .add( Restrictions.like("name", "F%")
 3     .addOrder( Order.asc("name") )
 4     .addOrder( Order.desc("age") )
 5     .setMaxResults(50)
 6     .list();
 7 List cats = sess.createCriteria(Cat.class)
 8     .add( Property.forName("name").like("F%") )
 9     .addOrder( Property.forName("name").asc() )
10     .addOrder( Property.forName("age").desc() )
11     .setMaxResults(50)
12     .list();

最后,还是建议用Hibernate官方推荐的HQL查询方式。

时间: 2024-10-12 01:59:27

Hibernate与数据库交互方式和Hibernate常用的几个方法的相关文章

hibernate学习笔记之四(Hibernate中的类型)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) Hibernate中的类型 在*.hbm.xml文件中,<property name="password" column="t_pass">,hibernate根据type转换将java转换成hibernate类型,然后再转换成SQL类型,<property name="password" type="...&q

根据数据库的表生成项目,项目变为hibernate项目(实际开发中常用)

1.  选择模式为Myeclipse Database Explorer perpective 2. (1)右键建立mysql模板,选择默认的mysql模板 (2)drive name (任意这里取mysql) 3.  设置内部URL按照以前的格式填写 4.  添加驱动 就是这个文件夹下的jar包 5.  测试联通 6.  弹出这个输入数据库密码 7.  成功后显示 8.  点击finish,然后就会在工作区产生一个如图所示的文件 9.  双击打开就会看到你的数据库文件了. 10. 找到对应的t

Spring学习4_整合Hibernate进行数据库操作

很多项目中后端通过Spring+hibernate进行数据库操作,这里通过一个简单Demo来模拟其原型. 代码结构 1.Spring配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSche

eclipse下 hibernate逆向数据库操作示例!!

做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法保证两边映射一致.因为两边都是自己设计的,那么就需要人为保证映射关

eclipse从数据库逆向生成Hibernate实体类(eclipse中反向生成hibernate实体类+jpa注释)

eclipse从数据库逆向生成Hibernate实体类 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法

Hibernate各种数据库配置

RDBMS 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hibernate.dialect.DB2390Dialect PostgreSQL org.hibernate.dialect.PostgreSQLDialect MySQL org.hibernate.dialect.MySQLDialect MySQL with InnoDB o

[转]Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言

最近开始学Hibernate,看的是李刚的那本<轻量级java ee企业应用实战>.头一个hibernate程序,我原原本本的按照书上例子写下来,同时只是改动了些mysql的连接参数,并且在mysql中新建了一个hibernate数据库,仅此而已.然而预想不到的事情发生了……程序写好之后,运行,报错Hibernate: insert into news_table (title, content) values (?, ?) Exception in thread "main&quo

简单的Hibernate访问数据库Demo

最近在学习SSH,现在看到Hibernate这块,动手实现了一个简单的Demo,对Hibernate的功能.使用有了初步了解. 1.首先将Hibernate的jar包复制到Web项目的lib目录下.有些依赖jar包,要额外导入:比如cglib-nodep.jar,不然会报错. 2.配置实体类.这里我用的是一个简单Account类,要注意使用的是javax.persistense.*下面的注解,不是org.hibernate.*下的. package com.jobhelp.domain; imp

hibernate操作数据库

一.概述 hibernate操作数据库一般分为5个步骤.开始事务--->执行sql操作--->提交事务,如果出现异常,还有一个回滚操作(即相当于撤销本次操作),最后就是关闭session. 代码框架如下: try { session= HibernateUtils.getSession();//获得session,这是hibernate能够操作数据库的核心对象. //开启事务. session.beginTransaction(); //sql语句的操作部分,这里的sql语句hibernate