`
y150988451
  • 浏览: 198554 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate

阅读更多
1.Query 的使用方法
 public List<User> findUserByName(String name)
    {
	String hql = "from User u where u.name like :xxx";
	Session s = HibernateSessionFactory.getSession();
	Query q = s.createQuery(hql);
	q.setString("xxx", "%" + name + "%");
	return q.list();//放在Object[]中,没做投影的话,不放在Object[]中
	//也可以写成一行return HibernateSessionFactory.getSession().createQuery
	("from User u where u.name like :xxx").setString("xxx", "%" + name + "%").list();
	}



2.Criteria 的使用方法
  Query By Criteria(标准)
  Expression 3.0以前名字
  Restrictions  3.1后名字-- 添加一些约束
  
 public List<User> findUserByName(String name)
    {
	Session s = HibernateSessionFactory.getSession();
	// from User u
	Criteria c = s.createCriteria(User.class);
	//只投影一个列的话 c.setProjection(Projections.property("name");
    //select u.name,u.birth from User u
    c.setProjection(Projections.projectionList().add(Projections.property("name"))
	.add(Projections.property("birth")));
    //select u.name,u.birth from User u where u.name like '%'+name+'%';
    c.add(Restrictions.like("name", "%" + name + "%"));
    c.add(Restrictions.eq("birth","1980-01-01"));//连续调用时and关系
    //c.add(Restrictions.or(Restrictions.like("name", "%" + name + "%"),Restrictions
    //.eq("birth","1980-01-01")));
    return c.list();//放在Object[]中
	}
	

  1.通过使用createCriteria(XXX.class)来确定查询哪一个对象。
  2.通过Criteria下的add函数来添加查询条件。使用Restrictions工具类来指定条件。
    连续调用add函数,条件之间是and关系。
    若使用or关系,需要通过Restrictions.or()来完成。
  3.在用Criteria接口查询的时候如何做投影操作。
   Criteria c = s.createCriteria(XXX.class);
    c.setProjection(Projections.propertyList().add(Projections.property("name")).add().add()...);
    //添加where
    c.add(Restrictions.eq());
    c.list();//放在Object[]中


3.QBE(Query By Example)通过模板查询
 Customer c=new Customer();
	c.setAge(99);
    c.setName(“zhangsan”);
	List result=session.createCriteria(Customer.class).add(Example.create(c)).list();


  QBE只支持=和like,不支持or > <之类的查询

4.SQL检索方式
  String sql="select * from User c where c.NAME like :name"
  Query q=session.createSQLQuery(sql).addEntity(User.class);
  q.setString(“name”,”%zhang%”);
  q.setString(1,”%zhang%”);
  List result=q.list();//加了addEntity(User.class),就把结果放在User对象中,不加放在Object[]中


5.其它的参数绑定方法
Ⅰ.使用setEntity方法绑定对象类型的参数:
session.createQuery(“from Order o where o.customer=:customer”).setEntity(“customer”,customer).list();

  Ⅱ.使用setParameter方法绑定任意类型的参数:
	
Query q=session.createQuery
	       (“from Order o where o.customer=:customer”+”and o.orderNumber like :orderNumber”);
	q.setParameter(“customer”,customer,Hibernate.entity(Customer.class));

q.setParameter(“orderNumber”,orderNumber,Hibernate.STRING);

Ⅲ.使用setProperties方法绑定参数:
Customer c=new Customer();
	c.setName(“zhangsan”);
	c.setAge(33);
	Property
	Query q=session.createQuery(“from Customer c where c.name=:name”+”and c.age=:age”);
	q.setProperties(c);


6.在映射文件中定义命名查询语句
  <hibernate-mapping>
		<class name=“mypack.Customer” table=“CUSTOMERS”>
		</class>
		<query name=“aFind”><![CDATA[
			from Customer c where c.name like :name]]></query>
	</hibernate-mapping>

  Query q=session.getNamedQuery(“aFind”);
	q.setString(“name”,name);
	List result=q.list();


7.比较运算
  检索年龄大于18的Customer:
 
Criteria c=session.createCriteria(Customer.class);
  c.add(Expression.gt(“age”,18));


检索年龄不等于18的Customer:
 c.add(Expression.not(Expression.eq(“age”,new Integer(18))));


  检索姓名为空的Customer:
 
c.add(Expression.isNull(“name”));


  检索不属于任何客户的订单:
 
c.add(Expression.isNull(“customer”));

 
  检索名字为zhangsan的客户:
 
c.add(Expression.eq(“name”,”zhangsan”).ignoreCase());


8.范围运算
  检索名字为zhangsan、lisi、wangwu的客户:
 
String[] names={“Tom”,”Mike”,”Jack”};
  c.add(Expression.in(“name”,names));

  检索年龄在18到30之间的客户:
 
引用
c.add(Expression.between(“age”,new Integer(18),new Integer(30));


  检索年龄不在18到30的客户:
 
c.add(Expression.not(Expression.between(“age”,new Integer(18),new Integer(30)));


9.Hibernate应用中Java对象的状态
  临时状态(Transient):也叫瞬时状态。new出来的对象,没有被持久化处理,不处于Session缓存中的对象

  持久化状态(Persistent):已经被持久化,加入到Session的缓存中

  游离状态(Detached):也叫脱管状态。已经被持久化,但是不处在Session缓存中

  ⑴临时对象的特征:
     不处于Session缓存中(不被任何一个Session实例关联)

     在数据库中没有对应的记录

     进入临时状态的条件:
     new一个Java对象,他处于临时状态,不和数据库任何记录关联
     Session的delete方法能够是一个持久化对象或游离对象转变为临时状态;对于游离对象,
delete方法从数据库中删除与它对应的记录;对于持久化对象,delete方法从数据库中删除与它对应的记录,
并把它从session缓存中删除
 
  ⑵持久化对象的特征:
     在一个Session实例的缓存中(与一个Session关联)

持久化对象和数据库中的相关记录对应

Session清理缓存时,会根据持久化对象的属性变化,来同步更新数据库

进入持久化状态的条件
session的save方法
session的load和get方法返回的对象都是处于持久化状态
session的find方法返回的List中存在的对象都是处于持久化状态
session的update、saveOrUpdate和lock方法使得游离对象转换为持久化状态
当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时把这个对象也转
变为持久化状态

  ⑶游离对象的特征:
     不再位于session缓存中(游离对象不被Session关联)
     游离对象是从持久化对象转变过来的,因此在数据库中可能还存在与其对应的记录
     游离对象与临时对象的区别在于:前者是由持久化对象转变过来的,前者在数据库中还存在与之对应的记录,
而后者在数据库中没有与之对应的记录;
     进入游离状态的条件
     当调用session的close方法的时候,session缓存被清空,缓存中的所有持久化对象都变为游离状态。如果此时再没
有其它变量引用的时候,其生命周期结束
     session的evict方法能够从缓存中删除一个持久化对象,使它变为游离状态。如果内存中存在大量的对象的时候,
可以通过这个方法来删除缓存中的对象(不建议使用这个方法,还是使用查询的方法和常规方法来处理对象在内存
中的深度)
分享到:
评论

相关推荐

    hibernate jar包:hibernate-commons-annotations-4.0.1.Final.jar等

    Hibernate.jar包,Hibernate可以应用在任何使用JDBC的场合,包含 hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-...

    Hibernate入门到精通

    "Hibernate入门到精通" Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 ...

    hibernate jar包程序文件

    hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...

    hibernate学习资料大全

    【hibernate学习资料大全】 Hibernate 是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。这个压缩包包含了丰富的Hibernate学习资源,旨在帮助开发者深入理解和熟练掌握这一强大的...

    Hibernate-extensions 完整安装包

    《Hibernate-Extensions全面指南》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。然而,为了满足更复杂的业务需求,Hibernate还提供了丰富的扩展功能,这就是我们今天要...

    hibernate-release-4.1.4

    【描述】中的"hibernate的jar包"指的是Hibernate框架的运行库文件,这些JAR文件包含了Hibernate的所有核心API、实现和依赖库,如Hibernate Commons Annotations、Hibernate EntityManager、Hibernate Core等。...

    hibernate基础jar包

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。这个压缩包包含了Hibernate的基础jar包,这些jar文件是开发Hibernate应用所...

    HibernateTools-3.2.4

    HibernateTools是Java开发人员在使用Hibernate ORM框架时的有力辅助工具集,主要目的是为了提高开发效率,简化数据库操作。在HibernateTools 3.2.4版本中,它包含了一系列的特性与插件,以支持更便捷地进行对象关系...

    hibernate3全部jar包:hibernate3.jar.zip 下载

    Hibernate3 是一个强大的Java持久化框架,它允许开发者将数据库操作与业务逻辑解耦,使得应用程序的开发更为简便。这个“hibernate3全部jar包:hibernate3.jar.zip”包含了所有必要的库文件,方便用户一次性下载并...

Global site tag (gtag.js) - Google Analytics