• Hiberntae的查找操作有多种:

1.  使用Criteria接口查询

  • Query_Criteria.java
package action;

import java.util.ArrayList;
import java.util.List; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions; import bean.User;
import util.HibernateUtil; /**
* 本类用于测试Hibernate查询方式之: 使用Criteria接口查询 这个Criteria接口只能用来查询,不能进行增删改操作。
*
* @author 半颗柠檬、
*
*/
public class Query_Criteria {
public static void main(String[] args) {
// Query_Criteria.testSelectAll(); // 查询单条记录
// Query_Criteria.selectSingle(); // 分页查询
Query_Criteria.testPage();
} /**
* 查询所有记录
*/
private static void testSelectAll() { Session session = null;
try {
// 查询操作不需要事务
session = HibernateUtil.getSession(); // 获取User的Criteria查询接口
Criteria userCriteria = session.createCriteria(User.class); /**
* 添加排序规则 按照userid升序排序,且userid必须和javabean的属性名一致,不能和数据库中的字段名一致,否则报错
*/
userCriteria.addOrder(Order.asc("userid")); /**
* 添加查询的条件
*/
userCriteria.add(Restrictions.ilike("username", "%se%")); // Restrictions.ilike和Restrictions.like
// 模糊查询like表示不忽略大小写
// userCriteria.add(Restrictions.between("userid", new Integer(2),
// new Integer(3))); //查询userid在2与3之间的记录 List<Integer> idList = new ArrayList<Integer>();
idList.add(1);
idList.add(2);
idList.add(3);
userCriteria.add(Restrictions.in("userid", idList)); // 查询userid包含idList集合的记录 // userCriteria。list()返回User映射的表里的所有数据,兵封装为List
List<User> userList = userCriteria.list(); for (User user : userList) { System.out.println("userid==" + user.getUserid() + "\t"
+ "username=" + user.getUsername() + "\t"
+ "password==" + user.getPassword()); } } catch (Exception e) {
e.printStackTrace();
} } /**
* 查询单条记录
*/
private static void selectSingle() { Session session = null;
Transaction tran = null; try {
session = HibernateUtil.getSession();
tran = session.beginTransaction(); Criteria userCriteria = session.createCriteria(User.class);
userCriteria.add(Restrictions.eq("username", "admin")); // Criteria.uniqueResult() 返回单条结果
User user = (User) userCriteria.uniqueResult(); System.out.println("userid==" + user.getUserid() + "\t"
+ "username=" + user.getUsername() + "\t" + "password=="
+ user.getPassword()); tran.commit();
} catch (Exception e) {
tran.rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession();
} } /**
* 分页管理
*/
private static void testPage() {
Session session=null;
Transaction tran=null;
try {
session=HibernateUtil.getSession();
tran=session.beginTransaction(); Criteria userCriteria=session.createCriteria(User.class); userCriteria.add(Restrictions.ilike("username", "%user%")); userCriteria.setFirstResult(1); //从第几条开始显示,0代表第一条
userCriteria.setMaxResults(2); //pagesize 每页显示多少条 List<User> userList=userCriteria.list(); for (User user : userList) { System.out.println("userid==" + user.getUserid() + "\t"
+ "username=" + user.getUsername() + "\t"
+ "password==" + user.getPassword()); } tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
}finally{
HibernateUtil.closeSession();
} } }

  2. Hibernate 查询方法(HQL:Hibernate Query Language):  不能进行insert操作

  • Query_HQL.java
package action;

import java.util.List;
import java.util.Map; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.transform.ResultTransformer;
import org.hibernate.transform.Transformers; import bean.User;
import util.HibernateUtil; /**
* 本类测试HQL查询语言的使用
* @author 半颗柠檬、
*
*/
public class Query_HQL {
public static void main(String[] args) {
// Query_HQL.testSelectAll();
// Query_HQL.testSelectpart(); // 查询部分字段的记录
// Query_HQL.testFunction(); // 执行数据库函数
// Query_HQL.testPage();
Query_HQL.test_DML();
} /**
* 查询所有记录
*/
private static void testSelectAll() { Session session = null;
Transaction tran = null;
Query query = null;
String sql = "";
try {
session = HibernateUtil.getSession();
tran = session.beginTransaction(); /**
* 最简单写法
*/
sql = "from User"; // 这里的User 一定要和javabean的类名一致,如果写成user也是错误的
query = session.createQuery(sql); List<User> userList = query.list(); for (User user : userList) { System.out.println("userid==" + user.getUserid() + "\t"
+ "username=" + user.getUsername() + "\t"
+ "password==" + user.getPassword()); }
/*********************************************/ /**
* 标准写法
*/
sql = "select u from User u"; // 这里不能用 select * 否则无法解析
query = session.createQuery(sql);
userList = query.list(); for (User user : userList) { System.out.println("userid==" + user.getUserid() + "\t"
+ "username=" + user.getUsername() + "\t"
+ "password==" + user.getPassword()); }
/*********************************************/ /**
* 加了查询条件
*/
sql = "select u from User u where username like '%user%' and userid in(3,4) ";
query = session.createQuery(sql); userList = query.list(); for (User user : userList) { System.out.println("userid==" + user.getUserid() + "\t"
+ "username=" + user.getUsername() + "\t"
+ "password==" + user.getPassword()); }
/*********************************************/
tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
} finally {
HibernateUtil.closeSession(); }
} /**
* 查询部分字段的记录
*/
private static void testSelectpart() { Session session = null;
Transaction tran = null;
Query query = null;
String sql = ""; try { session = HibernateUtil.getSession();
tran = session.beginTransaction(); /**
* 1. 当查询条件为部分字段的时候,默认返回的是对象数组,而不是javabean对象
*/
sql = "select userid,username,password from User";
query = session.createQuery(sql); List<Object[]> objList = query.list(); for (Object[] userObj : objList) { System.out.println("userid==" + userObj[0] + "\t" + "username="
+ userObj[1] + "\t" + "password==" + userObj[2]); }
/************************************************************/ /**
* 2. 当查询条件为部分字段的时,设置返回一个Map
*/
sql = "select new Map(userid as userid,username as username,password as password) from User";
query = session.createQuery(sql); List<Map<String, Object>> userMapList = query.list(); for (Map<String, Object> rowMap : userMapList) {
System.out.println(rowMap); }
/************************************************************/ /*
* 3. 当查询条件为部分字段时,返回一个bean,需要在UserBean中定义相应参数个数的构造方法(一般不用这种方法)。
*/ sql = "select new bean.User(userid,username,password) from User";
query = session.createQuery(sql); List<User> userList = query.list();
for (User user : userList) { System.out.println("userid1==" + user.getUserid() + "\t"
+ "username1=" + user.getUsername() + "\t"
+ "password1==" + user.getPassword()); } /************************************************************/ /**
* 4:默认返回对象数组。将对象数组的数据转换成UserBean/也可以是其他的Bean(RoleBean)
*/
sql = "select userid as userid,username as username,password as password from User";
query = session.createQuery(sql);
query.setResultTransformer(Transformers.aliasToBean(User.class));// 使用aliasToBean方法
// 则sql中的字段要对应bean中的属性,
// 则“userid as userid” 必须要as 为userid 且Usre中必须有userid userList = query.list(); for (User user : userList) { System.out.println("userid2==" + user.getUserid() + "\t"
+ "username2=" + user.getUsername() + "\t"
+ "password2==" + user.getPassword()); } /************************************************************/
tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
} finally {
HibernateUtil.closeSession();
} } /**
* 测试执行数据库函数
*/
private static void testFunction() {
Session session = null;
Transaction tran = null;
Query query = null;
String sql = ""; try { session = HibernateUtil.getSession();
tran = session.beginTransaction(); /**
* 1.聚合函数
*/
sql = "select count(username),min(userid) from User";
query = session.createQuery(sql); Object[] objArray = (Object[]) query.uniqueResult(); System.out.println(objArray[0] + "\t" + objArray[1]); /**
* 2. 字符串函数
*/
sql = " select SUBSTRING('Hello World!',1,3) from User where userid=5 ";
query = session.createQuery(sql); List<String> sub_str = query.list(); for (String obj : sub_str) { System.out.println(obj); // 如果sql语句中没有 where userid=5
// ,则List里有多条记录(等于User表有几条记录)
} tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
} finally {
HibernateUtil.closeSession();
}
} /**
* 测试数据库分页
*/
private static void testPage() { Session session=null;
Transaction tran=null;
Query query=null;
try { session=HibernateUtil.getSession();
tran=session.beginTransaction(); String sql=" select a from User a order by userid asc";
query=session.createQuery(sql); query.setFirstResult(1);
query.setMaxResults(4); List<User> userList=query.list(); for(User user:userList){ System.out.println(user.getUserid()+"\t"+user.getUsername()+"\t");
} tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
}finally{
HibernateUtil.closeSession(); } } /**
* 测试HQL的DML语句。不能执行DDL语句。 DML: 数据操纵语言,insert、update、delete DDL:数据定义语言,create
* 注意: HQL不能执行insert语句,可以执行UPdate/DELETE.
* 主要用于批量更新数据。
*/
private static void test_DML() {
Session session=null;
Transaction tran=null;
Query query=null;
String sql="";
try {
session=HibernateUtil.getSession();
tran=session.beginTransaction(); /**
* 1. 使用update进行批量更新
*/
sql="update User set password='456' ";
query=session.createQuery(sql); int count=query.executeUpdate();
System.out.println("影响的行数为:"+count); /**
* 不是使用HQL的update批量更新,
*
*/
sql="select a from User a order by userid asc";
query=session.createQuery(sql); List<User> userList=query.list(); for(User user:userList){
user.setPassword("1231");
session.update(user);
session.flush();
} tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
}finally{
HibernateUtil.closeSession();
}
}
}

代码在下面章节

(四)Hibernate的增删改查操作(1)的更多相关文章

  1. (六)Hibernate的增删改查操作(3)

    一.在Hibernate中使用原生SQL语句 sql语句面向的是数据库,所以sql语句中对应的不再是bean了,比如sql="select * from user"   在hql中 ...

  2. (五)Hibernate的增删改查操作(2)

    接上一章节 HQL的预编译语句 HIbernate中的预编译与Spring的预编译的处理差不多.    1:使用标准的?  2:使用命名参数   2.1:使用名称逐个设置.   2.2:使用Map(k ...

  3. 【OF框架】新建库表及对应实体,并实现简单的增删改查操作,封装操作标准WebApi

    准备 搭建好项目框架及数据库,了解框架规范. 1.数据库表和实体一一对应,表名实体名名字相同,用小写,下划线连接.字段名用驼峰命名法,首字母大写. 2.实体放在Entities目录下,继承Entity ...

  4. Android_SQLite数据库增删改查操作

    一:什么是SQLite? 在Android平台上,集成了一个嵌入式关系型轻量级的数据库. 二:什么时候用的数据库? 有大量相似机构的数据需要存储时. 三:如何创建一个数据库? 1.创建一个Sqlite ...

  5. mongoVUE的增删改查操作使用说明

    mongoVUE的增删改查操作使用说明 一. 查询 1. 精确查询 1)右键点击集合名,再左键点击Find 或者直接点击工具栏上的Find 2)查询界面,包括四个区域 {Find}区,查询条件格式{& ...

  6. (转)SQLite数据库增删改查操作

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  7. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  8. Scala对MongoDB的增删改查操作

    =========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! ==================== ...

  9. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

随机推荐

  1. 关于Flutter启动项目白屏,报错[ERROR:flutter/shell/gpu/gpu_surface_gl.cc(58)] Failed to setup Skia Gr context.问题的解决方案

    首先,环境如下: 1.系统:windows10 64位   Android SDK version: 28.0.3   Flutter SDK: v1.5.4-hotfix.2   模拟器: 网易Mu ...

  2. TortoiseGit进行squash后冲突,如何撤销

    还没有commit之前,需要撤销. 最暴力的,直接用git reset --hard HEAD How to undo a git merge squash? If you run git merge ...

  3. 数据库Sequence创建与使用

    最近几天使用Oracle的sequence序列号,发现对如何创建.修改.使用存在很多迷茫点,在上网寻找答案后,根据各路大神的总结,汇总下对自己的学习成果: 在Oracle中sequence就是序号,每 ...

  4. ES6 Syntax and Feature Overview

    View on GitHub Note: A commonly accepted practice is to use const except in cases of loops and reass ...

  5. 一百四十四:CMS系统之评论布局和功能二

    在base页加一个登录标识符 给加页面两个id,方便取值 js $(function () { //初始化ueditor var ue = UE.getEditor('editor', { 'serv ...

  6. VS2010插件之NuGet

    Visual Studio(简写VS)是.net程序员开发必不可少的开发工具,随着VS的版本不断的升级和使用用户的扩大,现在针对VS开发了许多的开源免费的插件,大大的方便了程序员的开发,提高了开发效率 ...

  7. caffe dropout解读

    先上caffe dropout_layer.cpp源码,如下: // LayerSetUp DCHECK(threshold_ > 0.); DCHECK(threshold_ < 1.) ...

  8. Python3之使用枚举类

    当我们需要定义常量时,一个方法是用大写变量通过整数来定义,例如月份 JAN = 1 FEB = 2 MAR = 3 APR=4 May=5 Jun=6 Jul=7 Aug=8 Sep=9 Oct=10 ...

  9. 一个区分度很大的iOS面试题

    @property 后面可以有哪些修饰符?@property中有哪些属性关键字? 属性可以拥有的特质分为四类: 原子性--- nonatomic 特质 在默认情况下,由编译器合成的方法会通过锁定机制确 ...

  10. OpenCV直方图(直方图、直方图均衡,直方图匹配,原理、实现)

    1 直方图 灰度级范围为 \([0,L-1]\) 的数字图像的直方图是离散函数 \(h(r_k) = n_k\) , 其中 \(r_k\) 是第\(k\)级灰度值,\(n_k\) 是图像中灰度为 \( ...