mybatis语法和介绍,详细.doc_第1页
mybatis语法和介绍,详细.doc_第2页
mybatis语法和介绍,详细.doc_第3页
mybatis语法和介绍,详细.doc_第4页
mybatis语法和介绍,详细.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、MyBatis简介与配置MyBatis+Spring+MySql1.1MyBatis简介 MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(与Spring结合包)。下载地址:/tools/ibator/p/mybatis/1.2MyBatis+Spring+MySql简单配置1.2.1搭建Spring环境1,建立maven的web项目;2,加入Spring框架、配置文件;3,在pom.xml中加入所需要的jar包(spring框架的、mybatis、mybatis-spring、junit等);4,更改web.xml和spring的配置文件;5,添加一个jsp页面和对应的Controller;6,测试。可参照:/blog/830409。使用Eclipse的Maven构建SpringMVC项目1.2.2建立MySql数据库建立一个学生选课管理数据库。表:学生表、班级表、教师表、课程表、学生选课表。逻辑关系:每个学生有一个班级;每个班级对应一个班主任教师;每个教师只能当一个班的班主任;使用下面的sql进行建数据库,先建立学生表,插入数据(2条以上)。更多sql请下载项目源文件,在resource/sql中。Sql代码1. /*建立数据库*/2. CREATEDATABASESTUDENT_MANAGER;3. USESTUDENT_MANAGER;4. 5. /*建立student表*/6. CREATETABLESTUDENT_TBL7. (8. STUDENT_IDVARCHAR(255)PRIMARYKEY,9. STUDENT_NAMEVARCHAR(10)NOTNULL,10. STUDENT_SEXVARCHAR(10),11. STUDENT_BIRTHDAYDATE,12. CLASS_IDVARCHAR(255)13. );14. 15. /*插入学生数据*/16. INSERTINTOSTUDENT_TBL(STUDENT_ID,17. STUDENT_NAME,18. STUDENT_SEX,19. STUDENT_BIRTHDAY,20. CLASS_ID)21. VALUES(123456,22. 某某某,23. 女,24. 1980-08-01,25. 12154626. )创建连接MySql使用的配置文件perties。Mperties代码1. jdbc.driverClassName=com.mysql.jdbc.Driver2. jdbc.url=jdbc:mysql:/localhost:3306/student_manager?user=root&password=limingnihao&useUnicode=true&characterEncoding=UTF-81.2.3搭建MyBatis环境顺序随便,现在的顺序是因为可以尽量的少的修改写好的文件。创建实体类: StudentEntityJava代码1. publicclassStudentEntityimplementsSerializable2. 3. privatestaticfinallongserialVersionUID=3096154202413606831L;4. privateClassEntityclassEntity;5. privateDatestudentBirthday;6. privateStringstudentID;7. privateStringstudentName;8. privateStringstudentSex;9. 10. publicClassEntitygetClassEntity()11. returnclassEntity;12. 13. 14. publicDategetStudentBirthday()15. returnstudentBirthday;16. 17. 18. publicStringgetStudentID()19. returnstudentID;20. 21. 22. publicStringgetStudentName()23. returnstudentName;24. 25. 26. publicStringgetStudentSex()27. returnstudentSex;28. 29. 30. publicvoidsetClassEntity(ClassEntityclassEntity)31. this.classEntity=classEntity;32. 33. 34. publicvoidsetStudentBirthday(DatestudentBirthday)35. this.studentBirthday=studentBirthday;36. 37. 38. publicvoidsetStudentID(StringstudentID)39. this.studentID=studentID;40. 41. 42. publicvoidsetStudentName(StringstudentName)43. this.studentName=studentName;44. 45. 46. publicvoidsetStudentSex(StringstudentSex)47. this.studentSex=studentSex;48. 49. 创建数据访问接口Student类对应的dao接口:StudentMapper。Java代码1. publicinterfaceStudentMapper2. 3. publicStudentEntitygetStudent(StringstudentID);4. 5. publicStudentEntitygetStudentAndClass(StringstudentID);6. 7. publicListgetStudentAll();8. 9. publicvoidinsertStudent(StudentEntityentity);10. 11. publicvoiddeleteStudent(StudentEntityentity);12. 13. publicvoidupdateStudent(StudentEntityentity);14. 创建SQL映射语句文件Student类的sql语句文件StudentMapper.xmlresultMap标签:表字段与属性的映射。Select标签:查询sql。Xml代码1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 18. 19. 20. 21. 22. 25. 26. 27. 创建MyBatis的mapper配置文件在src/main/resource中创建MyBatis配置文件:mybatis-config.xml。typeAliases标签:给类起一个别名。com.manager.data.model.StudentEntity类,可以使用StudentEntity代替。Mappers标签:加载MyBatis中实体类的SQL映射语句文件。Xml代码1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 修改Spring 的配置文件主要是添加SqlSession的制作工厂类的bean:SqlSessionFactoryBean,(在mybatis.spring包中)。需要指定配置文件位置和dataSource。和数据访问接口对应的实现bean。通过MapperFactoryBean创建出来。需要执行接口类全称和SqlSession工厂bean的引用。Xml代码1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 也可以不定义mapper的bean,使用注解:将StudentMapper加入注解Java代码1. Repository2. Transactional3. publicinterfaceStudentMapper4. 对应的需要在dispatcher-servlet.xml中加入扫描:Xml代码1. 2. 3. 4. 5. 1.2.4测试StudentMapper使用SpringMVC测试,创建一个TestController,配置tomcat,访问index.do页面进行测试:Java代码1. Controller2. publicclassTestController3. 4. Autowired5. privateStudentMapperstudentMapper;6. 7. RequestMapping(value=index.do)8. publicvoidindexPage()9. StudentEntityentity=studentMapper.getStudent(10000013);10. System.out.println(name:+entity.getStudentName();11. 12. 使用Junit测试:Java代码1. 使用Junit测试:2. Java代码3. RunWith(value=SpringJUnit4ClassRunner.class)4. ContextConfiguration(value=test-servlet.xml)5. publicclassStudentMapperTest6. 7. Autowired8. privateClassMapperclassMapper;9. 10. Autowired11. privateStudentMapperstudentMapper;12. 13. Transactional14. publicvoidgetStudentTest()15. StudentEntityentity=studentMapper.getStudent(10000013);16. System.out.println(+entity.getStudentID()+entity.getStudentName();17. 18. ListstudentList=studentMapper.getStudentAll();19. for(StudentEntityentityTemp:studentList)20. System.out.println(entityTemp.getStudentName();21. 22. 23. 24. 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息。使用Oracle的序列、mysql的函数生成Id。这时我们可以使用动态sql。下文均采用mysql语法和函数(例如字符串链接函数CONCAT)。二、SQL语句映射文件(1)resultMapSQL 映射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代码1. 2. 3. 4. 5. 6. 7. 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,CURSOR2.1.2 constructor 我们使用id、result时候,需要定义java实体类的属性映射到数据库表的字段上。这个时候是使用JavaBean实现的。当然我们也可以使用实体类的构造方法来实现值的映射,这个时候是通过构造方法参数的书写的顺序来进行赋值的。 使用construcotr功能有限(例如使用collection级联查询)。 上面使用id、result实现的功能就可以改为:Xml代码1. 2. 3. 4. 5. 6. 7. 8. 当然,我们需要定义StudentEntity实体类的构造方法:Java代码1. publicStudentEntity(StringstudentID,StringstudentName,StringstudentSex,DatestudentBirthday)2. this.studentID=studentID;3. this.studentName=studentName;4. this.studentSex=studentSex;5. this.studentBirthday=studentBirthday;6. 2.1.3 association联合联合元素用来处理“一对一”的关系。需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。如果想覆写的话返回结果的值,需要指定typeHandler。不同情况需要告诉MyBatis 如何加载一个联合。MyBatis 可以用两种方式加载:1.select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;2.resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。例如,一个班级对应一个班主任。首先定义好班级中的班主任属性:Java代码1. privateTeacherEntityteacherEntity;使用select实现联合例:班级实体类中有班主任的属性,通过联合在得到一个班级实体时,同时映射出班主任实体。这样可以直接复用在TeacherMapper.xml文件中定义好的查询teacher根据其ID的select语句。而且不需要修改写好的SQL语句,只需要直接修改resultMap即可。ClassMapper.xml文件部分内容:Xml代码1. 2. 3. 4. 5. 6. 7. 8. 9. SELECT*FROMCLASS_TBLCT10. WHERECT.CLASS_ID=#classID;11. TeacherMapper.xml文件部分内容:Xml代码1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. SELECT*12. FROMTEACHER_TBLTT13. WHERETT.TEACHER_ID=#teacherID14. 使用resultMap实现联合与上面同样的功能,查询班级,同时查询器班主任。需在association中添加resultMap(在teacher的xml文件中定义好的),新写sql(查询班级表left join教师表),不需要teacher的select。修改ClassMapper.xml文件部分内容:Xml代码1. 2. 3. 4. 5. 6. 7. 8. 9. SELECT*10. FROMCLASS_TBLCTLEFTJOINTEACHER_TBLTTONCT.TEACHER_ID=TT.TEACHER_ID11. WHERECT.CLASS_ID=#classID;12. 其中的teacherResultMap请见上面TeacherMapper.xml文件部分内容中。2.1.4 collection聚集聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载:1.select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;2.resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。例如,一个班级有多个学生。首先定义班级中的学生列表属性:Java代码1. privateListstudentList;使用select实现聚集用法和联合很类似,区别在于,这是一对多,所以一般映

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论