




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如: Xml代码 1 2 3 4 5 6 当Java接口与XML文件在一个相对路径下时,可以不在myBatis配置文件的mappers中声明。 SQL 映射XML 文件一些初级的元素:1. cache 配置给定模式的缓存2. cache-ref 从别的模式中引用一个缓存3. resultMap 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象4. sql 一个可以被其他语句复用的SQL 块5. insert 映射INSERT 语句6. update 映射UPDATE 语句7. delete 映射DELEETE 语句8. select - 映射SELECT语句 2.1 resultMap resultMap 是MyBatis 中最重要最强大的元素了。你可以让你比使用JDBC 调用结果集省掉90%的代码,也可以让你做许多JDBC 不支持的事。现实上,要写一个等同类似于交互的映射这样的复杂语句,可能要上千行的代码。ResultMaps 的目的,就是这样简单的语句而不需要多余的结果映射,更多复杂的语句,除了只要一些绝对必须的语句描述关系以外,再也不需要其它的。resultMap属性:type为java实体类;id为此resultMap的标识。 resultMap可以设置的映射:1. constructor 用来将结果反射给一个实例化好的类的构造器a) idArg ID 参数;将结果集标记为ID,以方便全局调用b) arg 反射到构造器的通常结果2. id ID 结果,将结果集标记为ID,以方便全局调用3. result 反射到JavaBean 属性的普通结果4. association 复杂类型的结合;多个结果合成的类型a) nested result mappings 几resultMap 自身嵌套关联,也可以引用到一个其它上5. collection 复杂类型集合a collection of complex types6. nested result mappings resultMap 的集合,也可以引用到一个其它上7. discriminator 使用一个结果值以决定使用哪个resultMapa) case 基本一些值的结果映射的case 情形i. nested result mappings 一个case 情形本身就是一个结果映射,因此也可以包括一些相同的元素,也可以引用一个外部resultMap。 2.1.1 id、resultid、result是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。 最简单的例子: Xml代码 7 8 9 10 11 12 13 id、result语句属性配置细节: 属性描述 property需要映射到JavaBean 的属性名称。 column数据表的列名或者标签别名。 javaType一个完整的类名,或者是一个类型别名。如果你匹配的是一个JavaBean,那MyBatis 通常会自行检测到。然后,如果你是要映射到一个HashMap,那你需要指定javaType 要达到的目的。 jdbcType数据表支持的类型列表。这个属性只在insert,update 或delete 的时候针对允许空的列有用。JDBC 需要这项,但MyBatis 不需要。如果你是直接针对JDBC 编码,且有允许空的列,而你要指定这项。 typeHandler使用这个属性可以覆写类型处理器。这项值可以是一个完整的类名,也可以是一个类型别名。 支持的JDBC类型 为了将来的引用,MyBatis 支持下列JDBC 类型,通过JdbcType 枚举:BIT,FLOAT,CHAR,TIMESTAMP,OTHER,UNDEFINED,TINYINT,REAL,VARCHAR,BINARY,BLOB,NVARCHAR,SMALLINT,DOUBLE,LONGVARCHAR,VARBINARY,CLOB,NCHAR,INTEGER,NUMERIC,DATE,LONGVARBINARY,BOOLEAN,NCLOB,BIGINT,DECIMAL,TIME,NULL,CURSOR 2.1.2 constructor 我们使用id、result时候,需要定义java实体类的属性映射到数据库表的字段上。这个时候是使用JavaBean实现的。当然我们也可以使用实体类的构造方法来实现值的映射,这个时候是通过构造方法参数的书写的顺序来进行赋值的。 使用construcotr功能有限(例如使用collection级联查询)。 上面使用id、result实现的功能就可以改为:Xml代码 14 15 16 17 18 19 20 21 当然,我们需要定义StudentEntity实体类的构造方法:Java代码 22 public StudentEntity(String studentID, String studentName, String studentSex, Date studentBirthday) 23 this.studentID = studentID; 24 this.studentName = studentName; 25 this.studentSex = studentSex; 26 this.studentBirthday = studentBirthday; 27 2.1.3 association联合联合元素用来处理“一对一”的关系。需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。如果想覆写的话返回结果的值,需要指定typeHandler。不同情况需要告诉MyBatis 如何加载一个联合。MyBatis 可以用两种方式加载:1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;2. resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。 例如,一个班级对应一个班主任。 首先定义好班级中的班主任属性:Java代码 28 private TeacherEntity teacherEntity; 2.1.3.1使用select实现联合 例:班级实体类中有班主任的属性,通过联合在得到一个班级实体时,同时映射出班主任实体。 这样可以直接复用在TeacherMapper.xml文件中定义好的查询teacher根据其ID的select语句。而且不需要修改写好的SQL语句,只需要直接修改resultMap即可。 ClassMapper.xml文件部分内容:Xml代码 29 30 31 32 33 34 35 36 37 SELECT * FROM CLASS_TBL CT 38 WHERE CT.CLASS_ID = #classID; 39 TeacherMapper.xml文件部分内容:Xml代码 40 41 42 43 44 45 46 47 48 49 50 SELECT * 51 FROM TEACHER_TBL TT 52 WHERE TT.TEACHER_ID = #teacherID 53 2.1.3.2使用resultMap实现联合 与上面同样的功能,查询班级,同时查询器班主任。需在association中添加resultMap(在teacher的xml文件中定义好的),新写sql(查询班级表left join教师表),不需要teacher的select。 修改ClassMapper.xml文件部分内容:Xml代码 54 55 56 57 58 59 60 61 62 SELECT * 63 FROM CLASS_TBL CT LEFT JOIN TEACHER_TBL TT ON CT.TEACHER_ID = TT.TEACHER_ID 64 WHERE CT.CLASS_ID = #classID; 65 其中的teacherResultMap请见上面TeacherMapper.xml文件部分内容中。 2.1.4 collection聚集聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载:1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;2. resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。 例如,一个班级有多个学生。首先定义班级中的学生列表属性:Java代码 66 private List studentList; 2.1.4.1使用select实现聚集 用法和联合很类似,区别在于,这是一对多,所以一般映射过来的都是列表。所以这里需要 定义javaType为ArrayList,还需要定义列表中对象的类型ofType,以及必须设置的select的语句名称(需要注意的是,这里的查询 student的select语句条件必须是外键classID)。 ClassMapper.xml文件部分内容:Xml代码 67 68 69 70 71 72 73 74 75 76 SELECT * FROM CLASS_TBL CT 77 WHERE CT.CLASS_ID = #classID; 78 StudentMapper.xml文件部分内容:Xml代码 79 80 81 82 83 84 85 86 87 88 89 90 WHERE ST.CLASS_ID = #classID 91 2.1.4.2使用resultMap实现聚集 使用resultMap,就需要重写一个sql,left join学生表。Xml代码 92 93 94 95 96 97 98 99 100 101 SELECT * 102 FROM CLASS_TBL CT 103 LEFT JOIN STUDENT_TBL ST 104 ON CT.CLASS_ID = ST.CLASS_ID 105 LEFT JOIN TEACHER_TBL TT 106 ON CT.TEACHER_ID = TT.TEACHER_ID 107 WHERE CT.CLASS_ID = #classID; 108 其中的teacherResultMap请见上面TeacherMapper.xml文件部分内容中。studentResultMap请见上面StudentMapper.xml文件部分内容中。 2.1.5discriminator鉴别器 有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的结果集。鉴别器元素就是被设计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 彭阳消防考试题库及答案
- 2025年贵州公务员考试行测真题及答案
- 2025年广西壮族自治区中央遴选真题及参考答案(b类)
- 淮安清中开学考试卷及答案
- 母婴护理师考试试卷题库及答案
- 信息技术考试真题分类及答案
- 医学生化考试试题及答案
- 广东春季高考考试卷子及答案
- 九江编制考试题库及答案
- 2025年医疗器械法规与管理考试试题及答案
- 10000中国普通人名大全
- 高中数学《组合》公开课优秀课件
- 钢铁冶金学(炼钢学)课件
- 历史虚无主义课件
- 转动设备机械对中技术汇编
- 毕业论文范文3000字(精选十六篇)
- 南京力学小学苏教版六年级上册数学《分数乘分数》公开课课件
- 陶艺制作过程介绍教学课件(共48张)
- 发动机构造第7章 发动机总体结构
- 个人劳动防护用品发放记录
- 四川建龙软件全套表格word版
评论
0/150
提交评论