(四)Hibernate的增删改查操作(1)
- 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)的更多相关文章
- (六)Hibernate的增删改查操作(3)
一.在Hibernate中使用原生SQL语句 sql语句面向的是数据库,所以sql语句中对应的不再是bean了,比如sql="select * from user" 在hql中 ...
- (五)Hibernate的增删改查操作(2)
接上一章节 HQL的预编译语句 HIbernate中的预编译与Spring的预编译的处理差不多. 1:使用标准的? 2:使用命名参数 2.1:使用名称逐个设置. 2.2:使用Map(k ...
- 【OF框架】新建库表及对应实体,并实现简单的增删改查操作,封装操作标准WebApi
准备 搭建好项目框架及数据库,了解框架规范. 1.数据库表和实体一一对应,表名实体名名字相同,用小写,下划线连接.字段名用驼峰命名法,首字母大写. 2.实体放在Entities目录下,继承Entity ...
- Android_SQLite数据库增删改查操作
一:什么是SQLite? 在Android平台上,集成了一个嵌入式关系型轻量级的数据库. 二:什么时候用的数据库? 有大量相似机构的数据需要存储时. 三:如何创建一个数据库? 1.创建一个Sqlite ...
- mongoVUE的增删改查操作使用说明
mongoVUE的增删改查操作使用说明 一. 查询 1. 精确查询 1)右键点击集合名,再左键点击Find 或者直接点击工具栏上的Find 2)查询界面,包括四个区域 {Find}区,查询条件格式{& ...
- (转)SQLite数据库增删改查操作
原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
- Scala对MongoDB的增删改查操作
=========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! ==================== ...
- python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)
一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...
随机推荐
- 微信小程序之圆形进度条(自定义组件)
思路 使用2个canvas 一个是背景圆环,一个是彩色圆环. 使用setInterval 让彩色圆环逐步绘制. 在看我的文章前,必须先看 ,下面转的文章,因为本文是在它们基础上修改的. 它们的缺点为: ...
- Java并发包异步执行器CompletableFuture
前言 CompletableFuture是对Future的一种强有力的扩展,Future只能通过轮询isDone()方法或者调用get()阻塞等待获取一个异步任务的结果,才能继续执行下一步,当我们执行 ...
- Swift_IOS之UIActivityIndicatorView加载齿轮控件
// // ViewController.swift // helloIOS // // Created by loaderman on 2019/1/25. // Copyright © 2019年 ...
- main方法的详解
格式 * public static void main(String[] args) {} 针对格式的解释 public 被jvm调用,访问权限足够大. static 被jvm调用,不用创建对象,直 ...
- 批量删除Maven 仓库未下载成功.lastupdate 的文件
Windows: @echo off echo 开始... for /f "delims=" %%i in ('dir /b /s "./*lastUpdated&quo ...
- Linux -- 在多线程程序中避免False Sharing
1.什么是false sharing 在对称多处理器(SMP)系统中,每个处理器均有属于自己的本地高速缓存区. 如图,CPU0和CPU1有各自的本地高速缓存区(cache).线程0和线程1会用到不同的 ...
- 微信小程序企业付款到个人
<?php /** * 小程序之企业付款到个人! */ class WxPayModel extends Model { public function sendMoneyToPerson($t ...
- cursor -- 定义鼠标样式
cursor -- 定义鼠标样式 取值: [ [<uri> ,]* [ auto | crosshair | default | pointer | move | e-resize | n ...
- 【ARTS】01_31_左耳听风-201900610~201900616
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)
OpenCV中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API. 1.VideoCapture类的构造函数: C++: VideoCapture::VideoCapt ...