关于Hibernate学习记录
来源:互联网 发布:matlab数组分号 编辑:程序博客网 时间:2024/05/22 08:11
持久层框架Hibernate有三种查询方式:
分别是:HQL(面向对象查询)、Criteria、SQL
具体使用:
1、Criteria和DetachedCriteria :该查询采用面向对象方式封装查询条件,又称为对象查询;就是对SQL 语句进行封装,采用对象的方式来组合各种查询条件,由Hibernate 自动产生SQL 查询语句。
Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name)进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结果。
Criteria criteria=getCriteria();protected Criteria getCriteria() {return getSession().createCriteria(entityClass);}/** * 获取hibernate的session对象 */protected Session getSession() {return sessionFactory.getCurrentSession();}
<span style="white-space:pre"></span>DetachedCriteria subquery=DetachedCriteria.forClass(UserRole.class);<span style="white-space:pre"></span>criteria.add(Subqueries.propertyIn("id", subquery));<span style="white-space:pre"></span>return criteria.list();
- 限制结果集内容 :一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例,org.hibernate.Criteria对SQL进行封装。Restrictions类 定义了获得某些内置Criterion类型的工厂方法,org.hibernate.criterion.Restrictions可以设定多种查询条件:
限定查询条件:
- criteria.add(Restrictions.isNull("parentId"));// parentId为空
- criteria.add(Restrictions.gt("age", new Integer(20)));//gt(great than):大于
- criteria.add(Restrictions.lt("age", new Integer(40)));//lt(less than):小于
- criteria.add(Restrictions.like("account",account,MatchMode.ANYWHERE));
- criteria.add(Restrictions.in("account", listParams.toArray()));
- criteria.addOrder(Order.asc("seqNum")); // 根据seqNum从小到达排序,逆序则使用desc()
限定查询结果数量:
criteria.setFirstResult(51);<span style="white-space:pre"></span>// 起始条
criteria.setMaxResults(50);<span style="white-space:pre"></span>// 条数
去除重复行:
<ul><li>criteria.setResultTransformer(criteria.DISTINCT_ROOT_ENTITY);</li></ul>
获取结果:
- List<User> result= criteria.list();
使用MatchMode:
MatchMode.START:字符串在最前面的位置.相当于"like 'key%'"
MatchMode.END:字符串在最后面的位置.相当于"like '%key'"
MatchMode.ANYWHERE:字符串在中间匹配.相当于"like '%key%'"
MatchMode.EXACT:字符串精确匹配.相当于"like 'key'"
MatchMode.END:字符串在最后面的位置.相当于"like '%key'"
MatchMode.ANYWHERE:字符串在中间匹配.相当于"like '%key%'"
MatchMode.EXACT:字符串精确匹配.相当于"like 'key'"
对实体类的注解:
@ManyToOne(fetch = FetchType.EAGER)// 表示取出这条数据时,它关联的数据也同时取出放入内存中
@JoinColumn(name = "record_id", insertable = false, updatable = false)
@JoinColumn(name = "record_id", insertable = false, updatable = false)
其中,fetch属性,设定关联对象的加载策略或方式。可选值如下:
FetchType.LAZY:懒加载,关联对象不立刻加载(即从数据库读入到内存),在使用到的时候加载。
FetchType.EAGER:立刻加载,在加载主体对象时,同时加载关联属性对象。
@Fetch(FetchMode.JOIN) hibernate自有加载策略注解。可选值如下:
@Fetch(FetchMode.JOIN):始终立刻加载,使用外连(outer join)立刻加载关联对象,且忽略FetchType.LAZY。
@Fetch(FetchMode.SELECT) 默认懒加载(除非设定lazy=false),在访问每一个关联对象时用Select查询加载。有n+1次查询。
@Fetch(FetchMode.SUBSELECT) 默认懒加载(除非设定lazy=false),在第一次访问关联对象时才一次性加载所有关联对象。共产生两条sql语句,且FetchType设定有效。
2、Query
Query query=createQuery("delete xx where rId=:rId and fId in(:fId)");query.setString("rd", rId);query.setParameterList("fId", fId);query.executeUpdate();
0 0
- 关于Hibernate学习记录
- Hibernate学习记录
- hibernate学习记录
- hibernate缓存学习记录
- hibernate学习记录1
- hibernate学习记录2
- hibernate学习记录3
- hibernate学习记录5
- hibernate学习记录6
- hibernate学习记录7
- hibernate学习记录8
- Hibernate 学习记录
- Hibernate 学习记录 2
- Hibernate 学习记录 3
- Hibernate 学习记录 4
- Hibernate学习记录1
- Hibernate学习记录2
- Hibernate学习-02:Hibernate的日志记录
- 知道这20个正则表达式,能让你少写1,000行代码
- OC基础数据类型-NSData
- Android 查询本地通讯录联系人的信息
- springboot log4j2配置
- 关于WebView.goBack()在有的网页无法返回的问题的解决方法
- 关于Hibernate学习记录
- LUA取整
- jquery ajax中使用jsonp的限制
- BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别(转)
- inode
- mac brew
- Method Swizzling
- 【菜鸟学安卓】- java.lang.IllegalStateException记录
- Android Studio 2.x com.android.tools.fd.runtime.IncrementalChange $change