Hibernate中各种增删改查方法的总结:
查询总结:
1. 使用HQL语句
Query q = ateQuery("select e from com.sun.demo.Emp e");
2. 使用Load方法(主键查询)
Emp e = (Emp)session.load(Emp.class, 1141);
3. 使用get方法(主键查询)
Emp e = ((Emp.class, 1141);
4. 参数化查询(使用?通配符,或者命令通配符)
Query q = ateQuery("update Userinfo set ename='AAA' WHERE ename=?");
q.setParameter(0, "SMITH");
Query q = ateQuery("update Userinfo set ename='AAA' WHERE ename like ?");
q.setParameter(0, "%M%");
Query q = ateQuery("update Userinfo set ename='AAA' WHERE ename like :lkename");
q.setParameter("lkename", "%L%");
5. 命名查询(将查询语句放在一起,增加了系统的可维护性)
在*.l中添加hql语句如下,注意放在class标签外面
<query name="myquery">
<![CDATA[
from com.sun.hibernate.Employer where job = ?
]]>
</query>
Query q = NamedQuery("myquery");
q.setParameter(0, "MANAGER");
6. 属性查询
Query q = ateQuery("select max(sal) from Employer e where sal is not null");
Query q = ateQuery("select distinct job from Employer e");
7. 实例化查询
步骤如下:
1.编写你的HQL语句
2.创建普通的Java类 -------------------与POJO类不同,它与数据库没有任何关系
3.在该java类中你需要创建和查询结果对应的字段
4.在该java类中,你需要创建合适的构造函数
5.完善你的HQL语句,使用实例化查询的方式进行包装
6.通过(i)获取的结果就不再是一个数组,而是一个包装后的对象
例子:
Query q = ateQuery("SELECT new com.sun.demo.UserDate(ename,SYSDATE) FROM Userinfo");
List list = q.list();
for(int i=0;i<list.size();i++){
UserDate u = ((i);
System.out.Ename());
}
8. 多态查询
对于pojo来说,java中的这种关系被扩展到了数据库表中
hibernate在查询一个表的同时,会检查该表所对应的POJO类有没有子类,如果有,一起查询出来
9. 分页查询
//查询第三到五条
q.setFirstResult(3);//从第三条开始
q.setMaxResults(3);//提取三条
10. uniqueResult方法查询(查询结果只能是一个字段)
Query q = ateQuery("select count(*) from Employer");
Long count = (Long)q.uniqueResult();
11. Criteria查询(通过面向对象化的设计,将数据查询条件封装为一个对象)
Criteria c = ateCriteria(Employer.class);
c.addOrder(Order.asc("sal")); //按薪水升序查询
c.setFirstResult(3);
c.setMaxResults(3);
List list = c.list();
for(int i=0;i<list.size();i++){
Employer emp = ((i);
System.out.Ename() + " : " + Sal());
}
12. 联合主键的查询:(注意:主键中的字段必须都不为)
两种方式:
使用主键类:
Query q = ateQuery("from Employ ame like ?");
/
/ID是Employ表的属性
q.setParameter(0, "%m%");
List list = q.list();
for(int i=0;i<list.size();i++){
Employ emp = ((i);
System.out.Id().getEmpno());
}
不使用主键类:
Employ e = new Employ();
e.setEmpno(7902L);
e.setEname("smith");
Employ emp = (Employ)session.load(Employ.class,e);
13. 使用组件类的查询:(与联合主键的查询相似)
需要配置*.l,加入<component name=”user” class=””>标签(注意:name属性名要与POJO类中的组件类对象的名字相同)
更新操作:
session.update(e);
删除操作:
session.delete(e);
插入操作:(Hibernate不支持insert操作)
session.save(); -------------------主键不能为空
数据关联:
一对一:<one-to-one >
多对一:
<many-to-one name="dept" class="com.sun.demo.Dept" fetch="select" cascade="all">
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>基本的增删改查语句
一对多:
<set name="emps" inverse="true" cascade="all">
<key>
<column name="DEPTNO" precision="2" scale="0" />
</key>
<one-to-many class="com.sun.demo.Emp" />
</set>
多对多:
<set name="stucours" table="STUCOUR" cascade="all" inverse="false">
<key column="STUID"></key>
<many-to-many class="com.sun.demo.Course" column="COURID"></many-to-many>
</set>
Hibernate中条件查询,通过如下3个类完成。
Criteria:代表一次查询。
Criterion:代表一个条件查询。
Restrictions:产生条件查询的工具类。
执行条件查询的步骤:
1. 获取Hibernate的Session对象。
2. 以Session对象创建Criteria对象。
3. 使用Restrictions的静态方法创建Criterion查询条件。
4. 向Criteria添加Criterion查询条件。
5. 执行Criteria的list等方法返回结果。
以下是一个小例子,利于理解:
Configuration c = new Configuration().configuration();
SessionFactory sf = c.buildSessionFactory();
Session s = sf.openSession();
Criteria t = s.createCriteria(User.class);//物件表名是User;
List users = t.list();
for(Iterator it = user.iterator();it.hasnext())
{
User user = (();
System.out.Username()+"\t"+Password()+"\t"+Age());
}
一个不带where条件的基本的查询,把它翻译成SQL语句,相当于:
select this_.username,this_.password,this_.age from user;
用Criteria进行带条件的语句查询:
Criteria t = s.createCriteria(User.class);//物件表名是User;
t.("age", "20"));//选择age>20
t.add(Restrictions.lt("age", "30"));//选择age<30
t.addOrder(Order.desc("age"));//排序
List users = t.list();
for(Iterator it = user.iterator();it.hasnext())
{
User user = (();
System.out.Username()+"\t"+Password()+"\t"+Age());
}
以上是对Criteria的使用和具体对应查询条件的方法做了简单的介绍。
Restrictions里面常用的方面具体如下:
Restrictions.eq--->等於
<--->大于
<--->大於等於 >=
Restrictions.lt--->小於 <
Restrictions.le--->小於等於 <=
Restrictions.between--->對應SQL的BETWEEN子句
Restrictions.like--->對應SQL的LIKE子句
Restrictions.in--->對應SQL的in子句
Restrictions.and--->and關係
<--->or關係
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论