《计算机软件及应用Hibernate查询策略课件》由会员分享,可在线阅读,更多相关《计算机软件及应用Hibernate查询策略课件(33页珍藏版)》请在金锄头文库上搜索。
1、 Hibernate 查询策略查询策略回顾回顾v多对一关联多对一关联v一对一关联一对一关联v一对多关联一对多关联v多对多关联多对多关联目标目标vHQL查询查询vCriteriaQueryvNativeSQL查询查询Hibernate数据查询数据查询数据查询与检索是数据查询与检索是Hibernate的一个亮点。的一个亮点。Hibernate的数据查询方式主要有的数据查询方式主要有3种,它种,它们是:们是:HibernateQueryLanguage(HQL)CriteriaQuery(QBC)(QBE)NativeSQL下面对这下面对这3种查询方式分别进行讲解。种查询方式分别进行讲解。HQLHi
2、bernateQueryLanguage(HQL)提供了十分强大的功能,推荐大家提供了十分强大的功能,推荐大家使用这种查询方式。使用这种查询方式。HQL具有与具有与SQL语语言类似的语法规范,只不过言类似的语法规范,只不过SQL针对表针对表中字段进行查询,而中字段进行查询,而HQL针对持久化对针对持久化对象,它用来取得对象,而不进行象,它用来取得对象,而不进行update、delete和和insert等操作。而且等操作。而且HQL是完是完全面向对象的,具备继承、多态和关联全面向对象的,具备继承、多态和关联等特性。等特性。HQLfrom子句子句fromfromfromfrom子子子子句是最简单的
3、句是最简单的句是最简单的句是最简单的HQLHQLHQLHQL语句,例如语句,例如语句,例如语句,例如 from from from from StudentStudentStudentStudent,也可以写,也可以写,也可以写,也可以写 成成成成select s from Student sselect s from Student sselect s from Student sselect s from Student s。它简单地返回它简单地返回它简单地返回它简单地返回StudentStudentStudentStudent类的所有实例。类的所有实例。类的所有实例。类的所有实例。 除了
4、除了除了除了JavaJavaJavaJava类和属性的名称外,类和属性的名称外,类和属性的名称外,类和属性的名称外,HQLHQLHQLHQL语句对大小写语句对大小写语句对大小写语句对大小写并不敏感,所以在上一句并不敏感,所以在上一句并不敏感,所以在上一句并不敏感,所以在上一句HQLHQLHQLHQL语句中,语句中,语句中,语句中,fromfromfromfrom与与与与FROMFROMFROMFROM是是是是相同的,但是相同的,但是相同的,但是相同的,但是StudentStudentStudentStudent与与与与studentstudentstudentstudent就不同了,所以上述就
5、不同了,所以上述就不同了,所以上述就不同了,所以上述语句写成语句写成语句写成语句写成from studentfrom studentfrom studentfrom student就会报错。就会报错。就会报错。就会报错。HQL下列程序演示如何通过执行下列程序演示如何通过执行下列程序演示如何通过执行下列程序演示如何通过执行fromfrom语句取得所有的语句取得所有的语句取得所有的语句取得所有的StudentStudent对象。对象。对象。对象。Queryquery=session.createQuery(“fromStudent”);Queryquery=session.createQuery(
6、“fromStudent”);Listlist=query.list();Listlist=query.list();for(inti=0;ilist.size();i+)for(inti=0;ilist.size();i+)Studentstu=(Student)list.get(i);Studentstu=(Student)list.get(i);System.out.println(stu.getName();System.out.println(stu.getName();如果执行如果执行如果执行如果执行HQLHQL语句语句语句语句“fromStudent,Course”“fromSt
7、udent,Course”,并不简单地返,并不简单地返,并不简单地返,并不简单地返回两个对象,而是返回这两个对象的的笛卡儿积,这类似于回两个对象,而是返回这两个对象的的笛卡儿积,这类似于回两个对象,而是返回这两个对象的的笛卡儿积,这类似于回两个对象,而是返回这两个对象的的笛卡儿积,这类似于SQLSQL语句中字段的全外连接。在实际应用中,像语句中字段的全外连接。在实际应用中,像语句中字段的全外连接。在实际应用中,像语句中字段的全外连接。在实际应用中,像“fromStudent,“fromStudent,Course”Course”这样的语句几乎不会出现。这样的语句几乎不会出现。这样的语句几乎不会
8、出现。这样的语句几乎不会出现。HQLselectselect子句子句 有时并不需要得到对象的所有属性,这时可以使用有时并不需要得到对象的所有属性,这时可以使用有时并不需要得到对象的所有属性,这时可以使用有时并不需要得到对象的所有属性,这时可以使用selectselectselectselect子句进子句进子句进子句进行属性查询,例如,行属性查询,例如,行属性查询,例如,行属性查询,例如,select s.name from Student sselect s.name from Student sselect s.name from Student sselect s.name from St
9、udent s。下面程。下面程。下面程。下面程序演示如何执行这个语句:序演示如何执行这个语句:序演示如何执行这个语句:序演示如何执行这个语句: Query query = session.createQuery(“select s.name from Query query = session.createQuery(“select s.name from Query query = session.createQuery(“select s.name from Query query = session.createQuery(“select s.name from Student s”);
10、Student s”);Student s”);Student s”); List list = query.list();for (int i=0;ilist.size(); List list = query.list();for (int i=0;ilist.size(); List list = query.list();for (int i=0;ilist.size(); List list = query.list();for (int i=0;ilist.size(); i+) String name = (String)list.get(i); i+) String name
11、= (String)list.get(i); i+) String name = (String)list.get(i); i+) String name = (String)list.get(i); System.out.println(ame();System.out.println(ame();System.out.println(ame();System.out.println(ame(); HQL如果要查询两个以上的属性,查询结果会以数组的方如果要查询两个以上的属性,查询结果会以数组的方如果要查询两个以上的属性,查询结果会以数组的方如果要查询两个以上的属性,查询结果会以数组的方式返回
12、,如下所示:式返回,如下所示:式返回,如下所示:式返回,如下所示: Query query = session.createQuery(“select Query query = session.createQuery(“select Query query = session.createQuery(“select Query query = session.createQuery(“select s.name, s.sex from Student as s”);s.name, s.sex from Student as s”);s.name, s.sex from Student as
13、s”);s.name, s.sex from Student as s”); List list = query.list(); List list = query.list(); List list = query.list(); List list = query.list(); for (int i=0;ilist.size(); i+) for (int i=0;ilist.size(); i+) for (int i=0;ilist.size(); i+) for (int i=0;ilist.size(); i+) Object obj = (Object)list.get(i);
14、 Object obj = (Object)list.get(i); Object obj = (Object)list.get(i); Object obj = (Object)list.get(i); System.out.println(name(obj0 + “ System.out.println(name(obj0 + “ System.out.println(name(obj0 + “ System.out.println(name(obj0 + “的性的性的性的性别是:别是:别是:别是:” ” ” ” +obj1);+obj1);+obj1);+obj1); HQL在使用属性查
15、询时,由于使用对象数组,操作和在使用属性查询时,由于使用对象数组,操作和在使用属性查询时,由于使用对象数组,操作和在使用属性查询时,由于使用对象数组,操作和理解都不太方便,如果将一个理解都不太方便,如果将一个理解都不太方便,如果将一个理解都不太方便,如果将一个objectobjectobjectobject中所有成员封中所有成员封中所有成员封中所有成员封装成一个对象就方便多了。下面的程序将查询结果进装成一个对象就方便多了。下面的程序将查询结果进装成一个对象就方便多了。下面的程序将查询结果进装成一个对象就方便多了。下面的程序将查询结果进行了实例化行了实例化行了实例化行了实例化: Query qu
16、ery = session.createQuery(“select new Query query = session.createQuery(“select new Query query = session.createQuery(“select new Query query = session.createQuery(“select new Student(s.name, s.sex) from Student s”);Student(s.name, s.sex) from Student s”);Student(s.name, s.sex) from Student s”);Stud
17、ent(s.name, s.sex) from Student s”); List list = query.list(); List list = query.list(); List list = query.list(); List list = query.list(); for (int i=0;ilist.size(); i+) for (int i=0;ilist.size(); i+) for (int i=0;ilist.size(); i+) for (int i=0;i=,=,!=!=,likelike逻辑操作:逻辑操作:逻辑操作:逻辑操作:andand,or,notor
18、,not字符串连接:字符串连接:字符串连接:字符串连接:| |SQLSQL标量函数:例如标量函数:例如标量函数:例如标量函数:例如upper()upper()和和和和lower()lower()HQL如果子查询返回多条记录,可以用以下的关键字来量化:如果子查询返回多条记录,可以用以下的关键字来量化:如果子查询返回多条记录,可以用以下的关键字来量化:如果子查询返回多条记录,可以用以下的关键字来量化:allall:表示所有的记录。:表示所有的记录。:表示所有的记录。:表示所有的记录。anyany:表示所有记录中的任意一:表示所有记录中的任意一:表示所有记录中的任意一:表示所有记录中的任意一条。条。
19、条。条。somesome:与:与:与:与anyany用法相同。用法相同。用法相同。用法相同。inin:与:与:与:与anyany等价。等价。等价。等价。existsexists:表示子查询至少要返回一条记录。:表示子查询至少要返回一条记录。:表示子查询至少要返回一条记录。:表示子查询至少要返回一条记录。例如,下面语句返回所有学生的年龄都大于例如,下面语句返回所有学生的年龄都大于例如,下面语句返回所有学生的年龄都大于例如,下面语句返回所有学生的年龄都大于2222的班级对象:的班级对象:的班级对象:的班级对象:fromGroupgwhere22all(selects.agefromg.studen
20、tss)fromGroupgwhere22all(selects.agefromg.studentss)下述语句返回在所有学生中有一个学生的年龄等于下述语句返回在所有学生中有一个学生的年龄等于下述语句返回在所有学生中有一个学生的年龄等于下述语句返回在所有学生中有一个学生的年龄等于2222的班级:的班级:的班级:的班级:fromGroupgwhere22=any(selects.agefromg.studentss)fromGroupgwhere22=any(selects.agefromg.studentss)或者或者或者或者fromGroupgwhere22=some(selects.age
21、fromfromGroupgwhere22=some(selects.agefromg.studentss)g.studentss)或者或者或者或者fromGroupgwhere22in(selects.agefromg.studentss)fromGroupgwhere22in(selects.agefromg.studentss)HQLorderby子句子句查询返回的列表可以按照任何返回的类或者组件的属性排序:查询返回的列表可以按照任何返回的类或者组件的属性排序:查询返回的列表可以按照任何返回的类或者组件的属性排序:查询返回的列表可以按照任何返回的类或者组件的属性排序:fromStuden
22、tsorderbys.nameascfromStudentsorderbys.nameascascasc和和和和descdesc是可选的,分别代表升序或者降序。是可选的,分别代表升序或者降序。是可选的,分别代表升序或者降序。是可选的,分别代表升序或者降序。连接查询连接查询与与与与SQLSQL查询一样,查询一样,查询一样,查询一样, HQLHQL也支持连接查询,如内连接、外连接和交叉也支持连接查询,如内连接、外连接和交叉也支持连接查询,如内连接、外连接和交叉也支持连接查询,如内连接、外连接和交叉连接。连接。连接。连接。innerjoininnerjoin:内连接:内连接:内连接:内连接lefto
23、uterjoinleftouterjoin:左外连接:左外连接:左外连接:左外连接rightouterjoinrightouterjoin:右外连接:右外连接:右外连接:右外连接fulljoinfulljoin:全连接,但不常用:全连接,但不常用:全连接,但不常用:全连接,但不常用下面重点讲解内连接查询,左外连接和右外连接查询和内连接大同下面重点讲解内连接查询,左外连接和右外连接查询和内连接大同下面重点讲解内连接查询,左外连接和右外连接查询和内连接大同下面重点讲解内连接查询,左外连接和右外连接查询和内连接大同小异,而全连接几乎不怎么使用。小异,而全连接几乎不怎么使用。小异,而全连接几乎不怎么使
24、用。小异,而全连接几乎不怎么使用。innerjoininnerjoin可以简写为可以简写为可以简写为可以简写为joinjoin,HQLStudentstu=null;/Studentstu=null;/声明声明声明声明StudentStudent实例实例实例实例Groupgroup=null;/Groupgroup=null;/声明声明声明声明GroupGroup实例实例实例实例Queryquery=session.createQuery(fromGroupgjoing.students);Queryquery=session.createQuery(fromGroupgjoing.stude
25、nts);Listlist=query.list();Listlist=query.list();Objectobj=null;/Objectobj=null;/声明对象数组声明对象数组声明对象数组声明对象数组for(inti=0;ilist.size();i+)for(inti=0;ilist.size();i+)obj=(Object)list.get(i);/obj=(Object)list.get(i);/取得集合中的第取得集合中的第取得集合中的第取得集合中的第i i个数组个数组个数组个数组group=(Group)obj0;/groupgroup=(Group)obj0;/group
26、是数组中第一个对象是数组中第一个对象是数组中第一个对象是数组中第一个对象stu=(Student)obj1;/stustu=(Student)obj1;/stu是数组中第二个对象是数组中第二个对象是数组中第二个对象是数组中第二个对象System.out.println(stu.getName()+System.out.println(stu.getName()+属于:属于:属于:属于:+group.getName();+group.getName(); /提交事务,关闭提交事务,关闭提交事务,关闭提交事务,关闭SessionSessionjoinjoin的语法:的语法:selectselect
27、字段字段字段字段fromfrom表表表表1inner/left/right/fulljoin1inner/left/right/fulljoin 表表表表2on2on表表表表1. 1.某字段某字段某字段某字段/=/(=/=/表表表表2. 2.某字段某字段某字段某字段 crossjoin:crossjoin:是笛卡儿乘积,在没有任何条件约束下就是一张表的行数乘以别一张表是笛卡儿乘积,在没有任何条件约束下就是一张表的行数乘以别一张表是笛卡儿乘积,在没有任何条件约束下就是一张表的行数乘以别一张表是笛卡儿乘积,在没有任何条件约束下就是一张表的行数乘以别一张表的行数。的行数。的行数。的行数。leftjo
28、in:leftjoin:返回返回返回返回“ “表名表名表名表名1”1”的全部行,对于的全部行,对于的全部行,对于的全部行,对于“ “表名表名表名表名2”2”中,不满足中,不满足中,不满足中,不满足onon条件的记录用空值替条件的记录用空值替条件的记录用空值替条件的记录用空值替换。换。换。换。rigthjoin:rigthjoin:返回返回返回返回“ “表名表名表名表名2”2”的全部行,对于的全部行,对于的全部行,对于的全部行,对于“ “表名表名表名表名1”1”中,不满足中,不满足中,不满足中,不满足onon条件的记录用空值条件的记录用空值条件的记录用空值条件的记录用空值替换。替换。替换。替换。
29、fulljoin:fulljoin:返回两张表中的所有记录,对于不满足返回两张表中的所有记录,对于不满足返回两张表中的所有记录,对于不满足返回两张表中的所有记录,对于不满足onon条件一端的记录用空值替换。条件一端的记录用空值替换。条件一端的记录用空值替换。条件一端的记录用空值替换。innerjon:innerjon:只返回两张表中都满足只返回两张表中都满足只返回两张表中都满足只返回两张表中都满足onon条件的记录。条件的记录。条件的记录。条件的记录。Criteria Query9.1.2CriteriaQuery9.1.2CriteriaQuery方式方式方式方式当查询数据时,人们往往需要设
30、置查询条件。在当查询数据时,人们往往需要设置查询条件。在当查询数据时,人们往往需要设置查询条件。在当查询数据时,人们往往需要设置查询条件。在SQLSQL或或或或HQLHQL语句中,查语句中,查语句中,查语句中,查询条件常常放在询条件常常放在询条件常常放在询条件常常放在wherewhere子句中。此外,子句中。此外,子句中。此外,子句中。此外,HibernateHibernate还支持还支持还支持还支持CriteriaCriteria查询查询查询查询(CriteriaQueryCriteriaQuery),这种查询方式把查询条件封装为一个),这种查询方式把查询条件封装为一个),这种查询方式把查询
31、条件封装为一个),这种查询方式把查询条件封装为一个CriteriaCriteria对象。对象。对象。对象。在实际应用中,使用在实际应用中,使用在实际应用中,使用在实际应用中,使用SessionSession的的的的createCriteria()createCriteria()方法构建一个方法构建一个方法构建一个方法构建一个org.hibernate.Criteriaorg.hibernate.Criteria实例,然后把具体的查询条件通过实例,然后把具体的查询条件通过实例,然后把具体的查询条件通过实例,然后把具体的查询条件通过CriteriaCriteria的的的的add()add()方法加
32、入到方法加入到方法加入到方法加入到CriteriaCriteria实例中。这样,程序员可以不使用实例中。这样,程序员可以不使用实例中。这样,程序员可以不使用实例中。这样,程序员可以不使用SQLSQL甚至甚至甚至甚至HQLHQL的的的的情况下进行数据查询,如例程情况下进行数据查询,如例程情况下进行数据查询,如例程情况下进行数据查询,如例程9-19-1所示。所示。所示。所示。Criteriacr=session.createCriteria(Student.class);/Criteriacr=session.createCriteria(Student.class);/生成一个生成一个生成一个生
33、成一个CriteriaCriteria对对对对象象象象cr.add(Restrictions.eq(name,Bill);/cr.add(Restrictions.eq(name,Bill);/等价于等价于等价于等价于wherename=Billwherename=Bill/select*fromStudentwherename=“bill”;/select*fromStudentwherename=“bill”;Listlist=cr.list();Listlist=cr.list();Studentstu=(Student)list.get(0);Studentstu=(Student)l
34、ist.get(0);System.out.println(stu.getName();System.out.println(stu.getName();Criteria Query 常用的查询限制方法常用的查询限制方法常用的查询限制方法常用的查询限制方法Restrictions.eq()Restrictions.eq()方法表示方法表示方法表示方法表示equalequal,即等于的情况。,即等于的情况。,即等于的情况。,即等于的情况。RestrictionsRestrictions类提供了查询限制机制。它提供了许多类提供了查询限制机制。它提供了许多类提供了查询限制机制。它提供了许多类提供了查
35、询限制机制。它提供了许多方法,以实现查询限制。方法,以实现查询限制。方法,以实现查询限制。方法,以实现查询限制。criteriacriteria常用查询限制方法。常用查询限制方法。常用查询限制方法。常用查询限制方法。Restrictions.eq()Restrictions.eq():equalequal,= =Restrictions.allEq()Restrictions.allEq():参数为参数为参数为参数为MapMap对象,使用对象,使用对象,使用对象,使用 key/valuekey/value进行多个等于的对比,相当于多个进行多个等于的对比,相当于多个进行多个等于的对比,相当于多个
36、进行多个等于的对比,相当于多个Restrictions.eqRestrictions.eq() ()的效果的效果的效果的效果Restrictions.gt()Restrictions.gt():greater-than,greater-than,Criteria QueryRestrictions.lt()less-than,Restrictions.lt()less-than,Restrictions.le()less-equal,=Restrictions.le()less-equal,22;Stringsql=selects.*fromt_studentswheres.age22;SQL
37、QueryslqQuery=session.createSQLQuery(sql);SQLQueryslqQuery=session.createSQLQuery(sql);sqlQuery.addEntity(s,Student.class);sqlQuery.addEntity(s,Student.class);Listlist=sqlQuery.list();Listlist=sqlQuery.list();for(inti=0;list.size();i+)for(inti=0;list.size();i+)Studentstu=(Student)list.get(i);Student
38、stu=(Student)list.get(i);System.out.println(stu.getAge()+stu.getName();System.out.println(stu.getAge()+stu.getName(); createSQLQuery(Stringsql)createSQLQuery(Stringsql)利用传入的利用传入的利用传入的利用传入的SQLSQL参数构造一个参数构造一个参数构造一个参数构造一个SQLQuerySQLQuery实例实例实例实例(SQLQuerySQLQuery是是是是QueryQuery的子接口)。使用这个方法时,还需要传入查询的子接口)。
39、使用这个方法时,还需要传入查询的子接口)。使用这个方法时,还需要传入查询的子接口)。使用这个方法时,还需要传入查询的实体类,因此要配合的实体类,因此要配合的实体类,因此要配合的实体类,因此要配合SQLQuerySQLQuery的的的的addEntity()addEntity()方法一起使用。方法一起使用。方法一起使用。方法一起使用。addEntity()addEntity()方法是将实体类别与别名联系在一起的方法,此方法的定义如方法是将实体类别与别名联系在一起的方法,此方法的定义如方法是将实体类别与别名联系在一起的方法,此方法的定义如方法是将实体类别与别名联系在一起的方法,此方法的定义如下:下
40、:下:下:publicSQLQueryaddEntity(Stringalias,ClassentityClass)publicSQLQueryaddEntity(Stringalias,ClassentityClass)号用来引用数据表的别名,例如以上代码中号用来引用数据表的别名,例如以上代码中号用来引用数据表的别名,例如以上代码中号用来引用数据表的别名,例如以上代码中s.*s.*表示使用表示使用表示使用表示使用s s来作为来作为来作为来作为t_studentt_student表的别名。表的别名。表的别名。表的别名。Native SQL查询查询命名命名命名命名SQLSQL查询查询查询查询与与
41、与与HQLHQL的命名查询相似,也可以将本地的的命名查询相似,也可以将本地的的命名查询相似,也可以将本地的的命名查询相似,也可以将本地的SQLSQL查询语句定义在映射查询语句定义在映射查询语句定义在映射查询语句定义在映射文件中,然后像调用一个命名文件中,然后像调用一个命名文件中,然后像调用一个命名文件中,然后像调用一个命名HQLHQL查询一样直接调用命名查询一样直接调用命名查询一样直接调用命名查询一样直接调用命名SQLSQL查查查查询。询。询。询。例如在例如在例如在例如在Student.hbm.xmlStudent.hbm.xml中定义一个命名中定义一个命名中定义一个命名中定义一个命名SQLS
42、QL查询,如下所示:查询,如下所示:查询,如下所示:查询,如下所示:!CDATA22selects.*fromt_studentswheres.age22Native SQL查询查询3 3自定义自定义自定义自定义insertinsert、updateupdate和和和和deletedelete语句语句语句语句Hibernate3.xHibernate3.x的映射文件中新添了的映射文件中新添了的映射文件中新添了的映射文件中新添了、sql-update和和和和33个标记。可以使用这个标记。可以使用这个标记。可以使用这个标记。可以使用这3 3个标记个标记个标记个标记自定义自己的自定义自己的自定义自己
43、的自定义自己的insertinsert、updateupdate和和和和deletedelete语句,例如在语句,例如在语句,例如在语句,例如在Student.hbm.xmlStudent.hbm.xml中定义这些语句如下:中定义这些语句如下:中定义这些语句如下:中定义这些语句如下:idname=idunsaved-value=nulltype=stringcolumn=idNative SQL查询查询!-insert-insertintot_student(name,age,id)values(?,?,?)insertintot_student(name,age,id)values(?,?,
44、?)!-update-updatet_studentsetname=?,age=?whereid=?updatet_studentsetname=?,age=?whereid=?!-delete-deletefromt_studentwhereid=?deletefromt_studentwhereid=?Native SQL查询查询对于上述文件中自定义的对于上述文件中自定义的对于上述文件中自定义的对于上述文件中自定义的SQLSQL语句,要注意以下几语句,要注意以下几语句,要注意以下几语句,要注意以下几点。点。点。点。insertinsert和和和和updateupdate语句中定义的字段必须
45、和映射文件声语句中定义的字段必须和映射文件声语句中定义的字段必须和映射文件声语句中定义的字段必须和映射文件声明的属性相对应,一个都不能少。明的属性相对应,一个都不能少。明的属性相对应,一个都不能少。明的属性相对应,一个都不能少。在在在在insertinsert和和和和updateupdate语句中,属性出现的顺序必须和映语句中,属性出现的顺序必须和映语句中,属性出现的顺序必须和映语句中,属性出现的顺序必须和映射文件中声明的顺序一致。射文件中声明的顺序一致。射文件中声明的顺序一致。射文件中声明的顺序一致。在在在在insertinsert语句中,主键语句中,主键语句中,主键语句中,主键idid总是
46、放在最后。总是放在最后。总是放在最后。总是放在最后。在程序中实现以上自定义的在程序中实现以上自定义的在程序中实现以上自定义的在程序中实现以上自定义的insertinsert语句如下:语句如下:语句如下:语句如下:Studentstu=newStudent();Studentstu=newStudent();stu.setName(“Bill”);stu.setName(“Bill”);stu.setAge(22);stu.setAge(22);session.save(stu);session.save(stu);Native SQL查询查询运行上述程序,控制台显示的信息如下:运行上述程序,控
47、制台显示的信息如下:运行上述程序,控制台显示的信息如下:运行上述程序,控制台显示的信息如下:Hibernate:insertintot_student(name,age,id)Hibernate:insertintot_student(name,age,id)values(?,?,?)values(?,?,?)如果不想在如果不想在如果不想在如果不想在insertinsert或或或或updateupdate语句中包括所有属性,语句中包括所有属性,语句中包括所有属性,语句中包括所有属性,则可以在属性定义时,加上则可以在属性定义时,加上则可以在属性定义时,加上则可以在属性定义时,加上insert=f
48、alseinsert=false或或或或update=falseupdate=false,如下所示:,如下所示:,如下所示:,如下所示:propertyname=”name”type=”string”insert=”false”update=”false”/insertintot_student(age,id)insertintot_student(age,id)values(?,?)values(?,?)updatet_studentsetage=?whereupdatet_studentsetage=?whereid=?id=?作业作业v把用户管理实训把用户管理实训把用户管理实训把用户管理实训daodao层都替换成层都替换成层都替换成层都替换成hibernatehibernate的查的查的查的查询询询询重点知识重点知识v掌握掌握Hibernate查询查询