Hibernate中各种增删改查方法的总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
t.addOrder(Order.desc("age"));//排序
List users = t.list();
for(Iterator it = user.iterator();it.hasnext())
{
User user = (User)it.next();
System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t"+etParameter(0, "SMITH");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like ?");
q.setParameter(0, "%M%");
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>
一对多:
<set name="emps" inverse="true" cascade="all">
<key>
Hibernate中各种增删改查方法的总结:
查询总结:
1. 使用HQL语句
Query q = session.createQuery("select e from com.sun.demo.Emp e");
2. 使用Load方法(主键查询)
Emp e = (Emp)session.load(Emp.class, 1141);
以下是一个小例子,利于理解:
Configuration c = new Configuration().configuration();
SessionFactory sf = c.buildSessionFactory();
Session s = sf.openSession();
</set>
Hibernate中条件查询,通过如下3个类完成。
Criteria:代表一次查询。
Criterion:代表一个条件查询。
Restrictions:产生条件查询的工具类。
执行条件查询的步骤:
1. 获取Hibernate的Session对象。
多对多:
<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>
Employ emp = (Employ)session.load(Employ.class,e);
13. 使用组件类的查询:(与联合主键的查询相似)
需要配置*.hbm.xml,加入<component name=”user” class=””>标签(注意:name属性名要与POJO类中的组件类对象的名字相同)
<column name="DEPTNO" precision="2" scale="0" />
</key>
<one-to-many class="com.sun.demo.Emp" />
</set>
System.out.println(emp.getId().getEmpno());
}
不使用主键类:
Employ e = new Employ();
e.setEmpno(7902L);
e.setEname("smith");
Query q = session.createQuery("select distinct job from Employer e");
7. 实例化查询
步骤如下:
1.编写你的HQL语句
2.创建普通的Java类 -------------------与POJO类不同,它与数据库没有任何关系
System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t"+user.getAge());
}
一个不带where条件的基本的查询,把它翻译成SQL语句,相当于:
select this_.username,this_.password,this_.age from user;
在*.hbm.xml中添加hql语句如下,注意放在class标签外面
<query name="myquery">
<![CDATA[
from com.sun.hibernate.Employer where job = ?
]]>
</query>
c.setFirstResult(3);
c.setMaxResults(3);
List list = c.list();
for(int i=0;i<list.size();i++){
Employer emp = (Employer)list.get(i);
3.在该java类中你需要创建和查询结果对应的字段
4.在该java类中,你需要创建合适的构造函数
5.完善你的HQL语句,使用实例化查询的方式进行包装
6.通过list.get(i)获取的结果就不再是一个数组,而是一个包装后的对象
例子:
Query q = session.createQuery("SELECT new erDate(ename,SYSDATE) FROM Userinfo");
11. Criteria查询(通过面向对象化的设计,将数据查询条件封装为一个对象)
Criteria c = session.createCriteria(Employer.class);
c.addOrder(Order.asc("sal")); //按薪水升序查询
更新操作:
session.update(e);
q.executeUpdate();--------------可用于批量更新
删除操作:
session.delete(e);
q.executeUpdate();---------------可用于批量删除
插入操作:(Hibernate不支持insert操作)
session.save(); -------------------主键不能为空
数据关联:
一对一:<one-to-one >
多对一:
<many-to-one name="dept" class="com.sun.demo.Dept" fetch="select" cascade="all">
//ID是Employ表的属性
q.setParameter(0, "%m%");
List list = q.list();
for(int i=0;i<list.size();i++){
Employ emp = (Employ)list.get(i);
List list = q.list();
for(int i=0;i<list.size();i++){
UserDate u = (UserDate)list.get(i);
System.out.println(u.getEname());
}
8. 多态查询
对于pojo来说,java中的这种关系被扩展到了数据库表中
hibernate在查询一个表的同时,会检查该表所对应的POJO类有没有子类,如果有,一起查询出来
9. 分页查询
//查询第三到五条
q.setFirstResult(3);//从第三条开始
2. 以Session对象创建Criteria对象。
3. 使用Restrictions的静态方法创建Criterion查询条件。
4. 向Criteria添加Criterion查询条件。
5. 执行Criteria的list等方法返回结果。
q.setMaxResults(3);//提取三条
10. uniqueResult方法查询(查询结果只能是一个字段)
Query q = session.createQuery("select count(*) from Employer");
Long count = (Long)q.uniqueResult();
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like :lkename");
q.setParameter("lkename", "%L%");
5. 命名查询(将查询语句放在一起,增加了系统的可维护性)
Criteria t = s.createCriteria(User.class);//物件表名是User;
List users = t.list();
for(Iterator it = user.iterator();it.hasnext())
{
User user = (User)it.next();
Query q = session.getNamedQuery("myquery");
q.setParameter(0, "MANAGER");
6. 属性查询
Query q = session.createQuery("select max(sal) from Employer e where sal is not null");
用Criteria进行带条件的语句查询:
Criteria t = s.createCriteria(User.class);//物件表名是User;
t.add(Restrictions.gt("age", "20"));//选择age>20
t.add(Restrictions.lt("age", "30"));//选择age<30
3. 使用get方法(主键查询)
Emp e = (Emp)session.get(Emp.class, 1141);
4. 参数化查询(使用?通配符,或者命令通配符)
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename=?");
System.out.println(emp.getEname() + " : " + emp.getSal());
}
12. 联合主键的查询:(注意:主键中的字段必须都不为)
两种方式:
使用主键类:
Query q = session.createQuery("from Employ where id.ename like ?");
List users = t.list();
for(Iterator it = user.iterator();it.hasnext())
{
User user = (User)it.next();
System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t"+etParameter(0, "SMITH");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like ?");
q.setParameter(0, "%M%");
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>
一对多:
<set name="emps" inverse="true" cascade="all">
<key>
Hibernate中各种增删改查方法的总结:
查询总结:
1. 使用HQL语句
Query q = session.createQuery("select e from com.sun.demo.Emp e");
2. 使用Load方法(主键查询)
Emp e = (Emp)session.load(Emp.class, 1141);
以下是一个小例子,利于理解:
Configuration c = new Configuration().configuration();
SessionFactory sf = c.buildSessionFactory();
Session s = sf.openSession();
</set>
Hibernate中条件查询,通过如下3个类完成。
Criteria:代表一次查询。
Criterion:代表一个条件查询。
Restrictions:产生条件查询的工具类。
执行条件查询的步骤:
1. 获取Hibernate的Session对象。
多对多:
<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>
Employ emp = (Employ)session.load(Employ.class,e);
13. 使用组件类的查询:(与联合主键的查询相似)
需要配置*.hbm.xml,加入<component name=”user” class=””>标签(注意:name属性名要与POJO类中的组件类对象的名字相同)
<column name="DEPTNO" precision="2" scale="0" />
</key>
<one-to-many class="com.sun.demo.Emp" />
</set>
System.out.println(emp.getId().getEmpno());
}
不使用主键类:
Employ e = new Employ();
e.setEmpno(7902L);
e.setEname("smith");
Query q = session.createQuery("select distinct job from Employer e");
7. 实例化查询
步骤如下:
1.编写你的HQL语句
2.创建普通的Java类 -------------------与POJO类不同,它与数据库没有任何关系
System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t"+user.getAge());
}
一个不带where条件的基本的查询,把它翻译成SQL语句,相当于:
select this_.username,this_.password,this_.age from user;
在*.hbm.xml中添加hql语句如下,注意放在class标签外面
<query name="myquery">
<![CDATA[
from com.sun.hibernate.Employer where job = ?
]]>
</query>
c.setFirstResult(3);
c.setMaxResults(3);
List list = c.list();
for(int i=0;i<list.size();i++){
Employer emp = (Employer)list.get(i);
3.在该java类中你需要创建和查询结果对应的字段
4.在该java类中,你需要创建合适的构造函数
5.完善你的HQL语句,使用实例化查询的方式进行包装
6.通过list.get(i)获取的结果就不再是一个数组,而是一个包装后的对象
例子:
Query q = session.createQuery("SELECT new erDate(ename,SYSDATE) FROM Userinfo");
11. Criteria查询(通过面向对象化的设计,将数据查询条件封装为一个对象)
Criteria c = session.createCriteria(Employer.class);
c.addOrder(Order.asc("sal")); //按薪水升序查询
更新操作:
session.update(e);
q.executeUpdate();--------------可用于批量更新
删除操作:
session.delete(e);
q.executeUpdate();---------------可用于批量删除
插入操作:(Hibernate不支持insert操作)
session.save(); -------------------主键不能为空
数据关联:
一对一:<one-to-one >
多对一:
<many-to-one name="dept" class="com.sun.demo.Dept" fetch="select" cascade="all">
//ID是Employ表的属性
q.setParameter(0, "%m%");
List list = q.list();
for(int i=0;i<list.size();i++){
Employ emp = (Employ)list.get(i);
List list = q.list();
for(int i=0;i<list.size();i++){
UserDate u = (UserDate)list.get(i);
System.out.println(u.getEname());
}
8. 多态查询
对于pojo来说,java中的这种关系被扩展到了数据库表中
hibernate在查询一个表的同时,会检查该表所对应的POJO类有没有子类,如果有,一起查询出来
9. 分页查询
//查询第三到五条
q.setFirstResult(3);//从第三条开始
2. 以Session对象创建Criteria对象。
3. 使用Restrictions的静态方法创建Criterion查询条件。
4. 向Criteria添加Criterion查询条件。
5. 执行Criteria的list等方法返回结果。
q.setMaxResults(3);//提取三条
10. uniqueResult方法查询(查询结果只能是一个字段)
Query q = session.createQuery("select count(*) from Employer");
Long count = (Long)q.uniqueResult();
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like :lkename");
q.setParameter("lkename", "%L%");
5. 命名查询(将查询语句放在一起,增加了系统的可维护性)
Criteria t = s.createCriteria(User.class);//物件表名是User;
List users = t.list();
for(Iterator it = user.iterator();it.hasnext())
{
User user = (User)it.next();
Query q = session.getNamedQuery("myquery");
q.setParameter(0, "MANAGER");
6. 属性查询
Query q = session.createQuery("select max(sal) from Employer e where sal is not null");
用Criteria进行带条件的语句查询:
Criteria t = s.createCriteria(User.class);//物件表名是User;
t.add(Restrictions.gt("age", "20"));//选择age>20
t.add(Restrictions.lt("age", "30"));//选择age<30
3. 使用get方法(主键查询)
Emp e = (Emp)session.get(Emp.class, 1141);
4. 参数化查询(使用?通配符,或者命令通配符)
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename=?");
System.out.println(emp.getEname() + " : " + emp.getSal());
}
12. 联合主键的查询:(注意:主键中的字段必须都不为)
两种方式:
使用主键类:
Query q = session.createQuery("from Employ where id.ename like ?");