(四)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 是一个介 ...
随机推荐
- GitHub OAuth 第三方登录示例教程
这组 OAuth 系列教程,第一篇介绍了基本概念,第二篇介绍了获取令牌的四种方式,今天演示一个实例,如何通过 OAuth 获取 API 数据. 很多网站登录时,允许使用第三方网站的身份,这称为&quo ...
- el-table的type="selection"的使用
场景:el-table,type="selection"时,重新请求后,设置列表更新前的已勾选项 踩坑:在翻页或者changPageSize之后,table的data会更新,之前勾 ...
- python脚本-excel批量转换为csv文件
pandas和SQL数据分析实战视频教程 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2& ...
- mac kafka 环境搭建 以及PHP的kafka扩展
1.kafka安装 brew install kafka 安装会依赖zookeeper. 注意:安装目录:/usr/local/Cellar/kafka/0.10.2.0 2.安装的配置文件位置 /u ...
- Ionic4.x 中的 UI 组件(UI Components) Slides 轮播图组件、Searchbar 组件、 Segment 组件
Slides 轮播图组件 Ionic4.x 中的轮播图组件是基于 swiper 插件,所以配置 slides 的属性需要在 swiper 的 api 中 找 Swiper Api:http://ida ...
- [Java复习] 多线程 并发 JUC 补充
线程安全问题? 当多个线程共享同一个全局变量,做写的操作时,可能会受到其他线程的干扰.读不会发生线程安全问题. -- Java内存模型. 非静态同步方法使用什么锁? this锁 静态同步方法使用什么 ...
- 深度学习框架PyTorch一书的学习-第七章-生成对抗网络(GAN)
参考:https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter7-GAN生成动漫头像 GAN解决了非监督学习中的著名问题:给定一批样本,训 ...
- Eclipse整合SSM框架+AOP+全局异常处理
永久有效 链接: https://pan.baidu.com/s/1FlSP3a4Px05j3bB_miCOPQ 提取码: aa8w
- spring boot入门学习---热部署
1.maven文件 2.application.properties文件配置
- 通过本地Agent监控Azure sql database
背景: 虽然Azure sql database有DMVs可以查看DTU等使用情况,但记录有时间限制,不会一直保留.为了更好监控Azure_sql_database上各个库的DTU使用情况.数据库磁盘 ...