MyBatisGenerator代码生成.doc_第1页
MyBatisGenerator代码生成.doc_第2页
MyBatisGenerator代码生成.doc_第3页
MyBatisGenerator代码生成.doc_第4页
MyBatisGenerator代码生成.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

使用Mybatis Generator自动生成Mybatis相关代码本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码:一、构建一个环境: 1. 首先创建一个表:Sql代码 1. CREATETABLEpet(nameVARCHAR(20),ownerVARCHAR(20),speciesVARCHAR(20),sexCHAR(1),birthDATE,deathDATE); 2. 然后注入数据Sql代码 1. insertintopetvalues(Fluffy,Harold,cat,f,1993-02-04,null);2. insertintopetvalues(Claws,Gwen,cat,m,1994-03-17,null);3. insertintopetvalues(Buffy,Harold,dog,f,1989-05-13,null);4. insertintopetvalues(Fang,Benny,dog,m,1990-08-27,null);5. insertintopetvalues(Bowser,Diane,dog,m,1979-08-31,1995-07-29);6. insertintopetvalues(Chirpy,Gwen,bird,f,1998-09-11,null);7. insertintopetvalues(Whistler,Gwen,bird,null,1997-12-09,null);8. insertintopetvalues(Slim,Benny,snake,m,1996-04-29,null);注:这里的sql例子来自 /doc/refman/5.5/en/creating-tables.html3. 在 Mybatis 主页 /p/mybatis/ 上下载 Mybatis mybatis-generator-core 本文使用的是 1.3.0 版本。当然运行 mybatis-generator 生成的代码还需要下载 mybatis 的 jar 包本例使用的是 3.0.2 版本,和相关数据库的 jdbc 本文中使用的是MySql的jdbc 。二、运行 mybatis-generator 1. 要运行 generator ,需要给 generator 提供一个配置文件,指定其生成的数据库的相关信息。以下是一个示例:Xml代码 1. 2. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 17. 18. 19. 20. 21. 22. 23. 25. 26. 27. 28. 29. 31. 32. 33. 34. 36. 37. 38. 39. 40. 41. 42. 43. 这个配置文件提供了 mybatis-generator所需要的参数信息: * 其中classPathEntry 是引用的jdbc的类路径,这里将jdbc jar和generator的jar包放在一起了; * commentGenerator 是用来除去时间信息的,这在配合类似subversion的代码管理工具时使用很有效,因为可以减少没有必要的注释迁入; * jdbcConnection是指定的jdbc的连接信息; * javaTypeResolver式类型转换的信息,这里并没有用到; * javaModelGenerator是模型的生成信息,这里将指定这些Java model类的生成路径; * sqlMapGenerator是mybatis 的sqlMapper XML文件的生成信息,包括生成路径等; * javaClientGenerator是应用接口的生成信息; * table是用户指定的被生成相关信息的表,它必须在指定的jdbc连接中已经被建立。2. mybatis-generator 有多种运行方式,最简单的就是命令行的方式,只需要指定相应的配置文件的路径即可:Java代码 1. java-jarmybatis-generator-core-1.3.0.jar-configfile./src/main/resource/config.xml-overwrite运行后生成的代码包括模型类 test.model.Pet 和 test.model.PetExample , test.dao.PetMapper 接口以及其相对应的 xml 映射文件,在这里就不在赘述了。三、使用 mybatis-generator 生成的代码 1. 现在我们要利用这些生成的代码,首先我们需要一个关于所有映射的配置文件。需要我们手写如下:【不知道为什么generator没有选择自动生成这个文件,毕竟这些信息generator都可以得到】Xml代码 1. 2. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 2. 另外还要使用然后我们还需要一个Main示例方法来调用这些已生成的代码:Java代码 1. packagetest;2. 3. importjava.io.Reader;4. importjava.util.List;5. 6. importorg.apache.ibatis.io.Resources;7. importorg.apache.ibatis.session.SqlSession;8. importorg.apache.ibatis.session.SqlSessionFactory;9. importorg.apache.ibatis.session.SqlSessionFactoryBuilder;10. 11. importtest.dao.PetMapper;12. importtest.model.Pet;13. importtest.model.PetExample;14. 15. publicclassTest16. 17. publicstaticvoidmain(Stringargs)throwsException18. Stringresource=MapperConfig.xml;19. Readerreader=Resources.getResourceAsReader(resource);20. SqlSessionFactorysqlMapper=newSqlSessionFactoryBuilder().build(reader);21. SqlSessionsqlSession=sqlMapper.openSession();22. 23. PetExamplepet=newPetExample();24. pet.or().andDeathIsNotNull();25. try26. PetMappermapper=sqlSession.getMapper(PetMapper.class);27. ListallRecords=mapper.selectByExample(pet);28. for(Pets:allRecords)29. System.out.println(s);30. finally31. sqlSession.close();32. 33. 34. 这样就可以打印出相应的查询结果信息了。四、小结 该示例的完整的Eclipse工程见附件mybatis-generator-usage.zip,其中已经包含了示例需要使用的jar包。本文中只是用到了mybatis-generator 的一部分功能,mybatis-generator 生成代码的方式还包括ant或Maven脚本,或者直接使用java API生成;另外通过修改配置文件,generator还可以指定表的生成细节,并可以添加插件。其功能文档在generator的分发包的doc文件夹 下有更详细的介绍。这里使用的表示没有主键的表,针对有一个主键或多个主键的表,mybatis-generator的生成的内容也有所不同,感兴趣的读者可以自行试验一下。 mybatis-generator-usage.zip (1.6 MB)一、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. 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. 更详细的功能源代码/admin/blogs/782190页面最下面;二、SQL语句映射文件(1)resultMapSQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如:Xml代码 1. 2. 3. 4. 5. 6. 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. 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,BIGI

温馨提示

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

评论

0/150

提交评论