(四)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 是一个介 ...
随机推荐
- 使用LineNumberReader逐行读取文本文件
代码(1.8的语法): import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOExcept ...
- 008-多线程-JUC集合-Queue-LinkedBlockingQueue
一.概述 LinkedBlockingQueue是一个单向链表实现的阻塞队列.该队列按 FIFO(先进先出)排序元素,新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素.链接队列的吞吐量 ...
- STL函数适配器
一:适配器简介 C++中有三类适配器,分别是容器适配器,迭代器适配器和函数适配器,这里主要介绍函数适配器. (一)函数适配器简介 STL中已经定义了大量的函数对象,但是有时候需要对函数返回值进行进一步 ...
- request cluster ID mismatch
删除了etcd集群所有节点中的--data_dir的内容 [root@node3 ~]# cd /var/lib/etcd/ [root@node3 etcd]# ls member [root@no ...
- Mysql5.7数据库介绍
(1).默认数据库介绍 information_schema 这个数据库保存了Mysql服务器所有数据库的信息.如数据库名.数据库的表.表栏的数据类型访问权限等. mysql 这个库是系统库,里面保存 ...
- ElasticSearch——路由(_routing)机制
前言 一条数据是如何落地到对应的shard上的? 当索引一个文档的时候,文档会被存储到一个主分片中. Elasticsearch 如何知道一个文档应该存放到哪个分片中呢? 首先这肯定不会是随机的,否则 ...
- for miaomiao
package com.mytest.formiaomiao; import java.util.ArrayList; import java.util.List; import java.util. ...
- iOS——使用FMDB进行数据库操作(转载)
iOS 使用FMDB进行数据库操作 https://github.com/ccgus/fmdb [摘要]本文介绍iOS 使用FMDB进行数据库操作,并提供详细的示例代码供参考. FMDB 使用方法 A ...
- 【c# 学习笔记】阻止派生类重写虚成员
使用sealed 关键字可以防止一个类被其他类继承.同样,也可以使用sealed关键字来阻止派生类重写虚成员.如,我们希望Horse的继承类不再具有扩展Voice方法的行为.(上一章链接:https: ...
- Navicat安装及使用
一.安装Navicat 1.下载安装文件:navicat11.0.17_premium_cs_x86.exe(32位) 2.Oracle 的 Instance Client:instantclient ...