(四)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 是一个介 ...
随机推荐
- layui问题之模拟select点击事件
一.问题 不操作页面,实现模拟select的事件,即,自动出现下拉框,自动点击下拉框的值,select文本框的值随之改变 二.经过 刚开始查看layui官方文档,发现仅仅只是有select监听事件,即 ...
- C# 怎么生成DLL文件(转)
有两种方法: 但是一般这个使用 打开VS2008,依次点击:菜单->文件->新建项目->项目类型visual C#(这里假设为该项目所取的名字是DllBuild)-& ...
- ISO/IEC 9899:2011 条款5——5.2.1 字符集
5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...
- Fast RCNN论文学习
Fast RCNN建立在以前使用深度卷积网络有效分类目标proposals的工作的基础上.使用了几个创新点来改善训练和测试的速度,同时还能增加检测的精确度.Fast RCNN训练VGG16网络的速度是 ...
- 建站之星v2.7快速更换模版
网站建设很多人使用建站之星因为它的拖拽功能非常友好.但是很多人不会使用建站之星更换模版,网上的教程又复杂难懂,现在教大家一个简单快捷的办法. 方法/步骤 废话不多说,从模版目录找到你喜欢的模版 ...
- jenkins报错集合
可能会碰到以下报错: 1)这里的失败原因是因为运行jenkins程序的是jenkins用户,我们连接节点的秘钥是root的,所以现在连接不上 打开配置文件/var/lib/jenkins 将jenki ...
- (十七)jdbc(Java Data Base Connectivity,java数据库连接)基础使用
一.JDBC相关概念介绍 1.1 JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习 ...
- preg_replace修饰符e的用法
$tmp_refer = postget('refer');$tmp_refer = preg_replace("/tn-(.*?).html/ies", "'tn-'. ...
- 使用httpwebrequest Post数据到网站
怎样通过HttpWebRequest 发送 POST 请求到一个网页服务器?例如编写个程序实现自动用户登录,自动提交表单数据到网站等.假如某个页面有个如下的表单(Form): <form nam ...
- react 组装table列表带分页
2.组装编辑界面 /** * Created by hldev on 17-6-14. */ import React, {Component} from "react"; imp ...