ComplexContent的用法:(x)
<?xml version="1.0" encoding="UTF-8"?>
<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
01 | <? xml version = "1.0" encoding = "UTF-8" ?> |
02 | <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd"> |
03 | < mapping > |
04 | < class name = "com.hoo.entity.Account" auto-complete = "true" > |
05 | < map-to xml = "Account" /> |
06 | |
07 | < field name = "id" type = "integer" > |
08 | < bind-xml name = "id" node = "attribute" /> |
09 | </ field > |
10 | |
11 | < field name = "name" type = "string" > |
12 | < bind-xml name = "name" node = "element" /> |
13 | </ field > |
14 | |
15 | < field name = "email" type = "string" > |
16 | < bind-xml name = "email" node = "element" /> |
17 | </ field > |
18 | |
19 | < field name = "address" type = "string" > |
20 | < bind-xml name = "address" node = "element" /> |
21 | </ field > |
22 | |
23 | < field name = "birthday" type = "com.hoo.entity.Birthday" > |
24 | < bind-xml name = "生日" node = "element" /> |
25 | </ field > |
26 | </ class > |
27 | |
28 | < class name = "com.hoo.entity.Birthday" > |
29 | < map-to xml = "birthday" /> |
30 | |
31 | < field name = "birthday" type = "string" > |
32 | < bind-xml name = "birthday" node = "attribute" /> |
33 | </ field > |
34 | </ class > |
35 | </ mapping > |
anyURI 数据cd用于规定 URI?/p>
下面是一个关于某?scheme ?anyURI 声明的例子:(x)
<xs:attribute name="src" type="xs:anyURI"/>
文档中的元素看上d该类DP(x)
<pic src="http://www.w3school.com.cn/images/smiley.gif" />
XML Schema 是基?XML ?DTD 替代者?/strong>
XML Schema 描述 XML 文档的结构?/strong>
XML Schema 语言也称?XML Schema 定义QXML Schema DefinitionQXSDQ?/strong>
在此教程中,你将学习(fn)如何在应用程序中d和创?XML Schema 语言QXML Schema Z?DTD 更加强大Q以?qing)如何在?zhn)的应用E序中?XML Schema?/strong>
XML中的Schema元素详解Q?/pre>http://www.w3school.com.cn/schema/schema_schema.asp
]]>
<xs:element name="xxx" type="yyy"/>
定义属?/strong>
HQL(Hibernate Query Language):是面向对象的查询语句,它的语法和SQL语句有些相像,在运行时才得以解?HQLq不像SQL那样是数据操作语a,它用来取得对?而不是进行update,delete和insert操作. HQL 是一门对大小写不敏感的的语言,所以SeLect与SELECT和sELeCT是相同的.
----------------
现在有四张表:student,team,course,student_course.
student 表中有五个字D?分别?id,name,cardId,age,team_id;
team 表中有两个字D?id,teamname;
course 表中有id,name;
student_course 表中有stu_id,course_id; 保存多对多的关系?br />----------------
Student 是一个对?student 是数据库中的一个表.
查询所有的Student对象?最单的HQL语句? from Student,也可以写?select s from Student (as)s. ?q的as可以省略
1:单的查询遍历对象:
遍历Student
Query query=session.createQuery("form Student"); //? 如果Student对象不是唯一?那么需要写上包?? from test.Student test为包?
List list=query.list();
for(int i=0;i<list.size();i++)
{
Student stu=(Student)list.get(i);
System.out.println(stu.getName());
}
注意: 如果执行HQL语句"from Student,Course",q不时单单返回两个对?而是q回两个对象的笛卡尔U?q类似SQL语句中字D늚全外q接.实际的应用中,"from Student,Course"q种语句几乎是不回出现的.
2:属性查?
----单个属性查?
Query query=session.createQuery("select s.name form Student s");
List list=query.list();
for(int i=0;i<list.size();i++)
{
String name=(String)list.get(i);
System.out.println(name);
}
----多个属性查?
Query query=session.createQuery("select s.name,s.age form Student s");
List list=query.list();
for(int i=0;i<list.size();i++)
{
Object obj[]=(Object[])list.get(i); //取得list中的Wi个对?br />System.out.println(obj[0]+"的年龄ؓ(f): "+obj[1]);
}
3:实例化查?
实例化查询结果可以说是对属性查询的一重改q?在用属性查询时׃使用对象数组,操作和理解不太方?如果以个Object[]中的成员装成一个对象就方便多了.
Query query=session.createQuery("select new Student(s.name,s.age) form Student s");
List list=query.list();
for(int i=0;i<list.size();i++)
{
Student stu=(Student)list.get(i);
System.out.println(stu.getName());
}
?q行q个E序的时?需要一个new Student(s.name,s.age)构造函?在Student.java中编写这个构造函?
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
4:查询链接:
与SQL查询一?HQL也支持连接查?如内q接,外连接和交叉q接.支持的链接类型是从ANSI SQL中借鉴来的.
1: inner jion (内连?
2: left outer join (左外q接)
3: right outer join(叛_q接)
4: full join(全连?-不常?
inner jion 可以写ؓ(f)join.
正常情况下必要建关联?/p>
select a.id, b.id from A a, B b where a.id = b.id;
上面每条记录q回的是一个Object[]对象?br />你也可以把结果重新封装一下?br />String hql = "select a.id, b.id from A a, B b where a.id = b.id";
List result = getHibernateTemplate().find(hql);
if (result.size() > 0) {
for (int i = 0; i < result.size(); i++){
Object[] obj = (Object[]) result.get(i);
//q里可以重新封装数?br />}
}
5:l计函数查询:
1: count() l计记录的条?br />2: min() 求最?br />3: max() 求最大?br />4: sum() 求和
4: avg() 求^均?/p>
//取得Student的数?br />Query query=session.createQuery("select count(*) from Student")
//avg()取得Studentq_q龄
Query query=session.createQuery("select avg(s.age) from Student as s")
//upper()Ҏ(gu)字W串转ؓ(f)大写
Query query=session.createQuery("select upper(s.name) from Student as s")
//去除重复行distinct
Query query=session.createQuery("select distinct s.age from Student as s")
6:子查?
all 表示所有记?br />any 便是所有记录中的Q意一?br />somy 与any用法一?br />in {h(hun)于any
exists 表示子查询至要q回一条数?
all:
from Team t where 22<all(select s.age from Student s)
from Team t where all(select s.age from t.student s)>22
7:修改
update()
Student stu=(Student)session.get(Student.class,"id"); //Ҏ(gu)id 得到stu对象
stu.setName("123");
session.update(stu);
8:删除:
delete()
Student stu=(Student)session.get(Student.class,"id"); //Ҏ(gu)id 得到stu对象
session.delete(stu);