初学hibernate
来源:互联网 发布:国研网由哪些数据库 编辑:程序博客网 时间:2024/06/07 09:25
1 Session常用接口
1:save/persist 保存对象 save返回主键值,persist不返回任何值。
2:Load/Get
相同点:根据主键来获取主键所对应的对象。
Load/Get的区别:
1:Load 使用代理机制,而GET没有使用代理对象。
使用代理对象主要是为了使用延迟加载机制。
2:加载不到对象时,Load报对象找不到异常,而GET是空指针异常。
项目大部分采用GET方法加载数据。(使用延迟加载会产生比较多的问题)
3:update/merge 更新对象
4:delete 删除对象
update/delete方法都是根据主键来操作对象。如果要通过其它属性操作对象,都必须使用HQL语句。
5:clear 清空缓存(清空Session缓存(对象缓存),清空一级缓存,不清空二级缓存)
2 语法结构:
单对象查询: From 类名 where 条件
group by 属性
order by 排序属性desc|asc
多对象关联。使用别名可以简化HQL的编写
Select 别名 From 类名别名 where 条件
group by 属性
order by 排序属性desc|asc
A:获取所有的对象的数据
query.list(); //获取所有的数据放到List集合中,数据量大时,比较慢,要进行数据的分页。
query.iterator();//使用迭代器的方式获取对象的数据,因此每读取一条数据都会产生一条SQL语句。
(产生的SQL语句是根据各对象的主键号来产生的)
B:获取单个属性
session.createQuery(querySQL.toString()).uniqueResult();
结果:属性的数据类型。
C:获取多个属性|获取所有属性
结果:每一元素是对象数组。
D:执行DDL语句
不能执行
create/drop/alter/truncatetable这些DDL语句。
E:执行DML语句
update/delete:批量更新和批量删除。
select
insertinto into是HQL语句是非法字符。
Query.executeUpdate();
G:执行聚合函数count,max,min,sum,avg
query.uniqueResult();//只能是一行的数据
longcount = list.get(0);
longcount2 = Long.parseLong(String.valueOf(query.uniqueResult()));
I:执行分页语句
Hibernate分页接口
query.setFirstResult(10); // startIndexquery.setMaxResults(10); // pageSize
J:执行预编译语句
(1):参数?设置
setParameter(索引,值)/或者setXXX(索引,值)
hql= "Select u fromUserBean u where truename like ? order by userid desc";session= HibernateUtil.getSession();query= session.createQuery(hql); /** * 下标从0开始。jdbc的下标从1开始。 */ query.setParameter(0,"%王%"); // query.setParameter(1, 16);
(2):参数名称设置
setXXXX("名称",值)
hql= "Select u fromUserBean u where truename like :truename and userage >= :begin_age anduserage<= :end_age order by userid desc"; session= HibernateUtil.getSession(); query= session.createQuery(hql); query.setString("truename", "%王%"); query.setString("begin_age", "20"); query.setString("end_age", "50");
(3):参数属性设置
setProperties(Bean或者Map)
hql= "Select u fromUserBean u where truename like :truename and usersex = :usersex order by useriddesc"; session= HibernateUtil.getSession(); query= session.createQuery(hql); /** * 使用Map的方式。Map中的key = 参数名称 */ // Map<String,String>paramMap = new HashMap<String, String>(); // paramMap.put("truename","%王%"); // paramMap.put("usersex","0"); // query.setProperties(paramMap); /** * 使用Bean的方式。Bean中属性的名称 == 参数名称 */ UserBeanparam_userBean = new UserBean(); param_userBean.setTruename("%王%"); param_userBean.setUsersex("0"); query.setProperties(param_userBean);
SessionFactory.getSession与SessionFactory.getCurrentSession的区别
1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了,也就是不用再session.close()了(自动关闭session)。但是如果使用的是openSession方法创建的session的话,那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭(手动关闭session,推荐)
- Hibernate初学
- Hibernate初学
- hibernate 初学
- Hibernate 初学
- 初学Hibernate
- 初学hibernate
- hibernate初学
- 【Hibernate】初学Hibernate(一)
- Hibernate初学有感
- Hibernate dao初学体会
- 初学Hibernate问题
- 初学hibernate错误
- 初学hibernate笔记
- 初学hibernate总结
- 初学hibernate错误请教..
- hibernate框架初学
- 初学Hibernate(2)
- 初学Hibernate(3)
- 剑指offer-4-面试题22:栈的压入、弹出序列
- centos安装rabbitmq消息队列
- [Leetocde]350. Intersection of Two Arrays II
- 逻辑地址、虚拟地址、物理地址
- thinkphp5 ACL用户权限模块
- 初学hibernate
- C++traits技术的理解
- android example 2_intent
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- 进程间通信的方法
- Html学习笔记2
- 腾讯2017暑期实习生编程题
- Android studio Gradle download 文件 路径
- 类似列表滑动块的实现