Mybatis配置Mapper.doc_第1页
Mybatis配置Mapper.doc_第2页
Mybatis配置Mapper.doc_第3页
Mybatis配置Mapper.doc_第4页
Mybatis配置Mapper.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

Mybatis配置Mapper我们知道在Mybatis中定义Mapper信息有两种方式,一种是利用xml写一个对应的包含Mapper信息的配置文件;另一种就是定义一个Mapper接口,然后定义一些相应的操作方法,再辅以相应的操作注解。现假设我有这样一个实体类:Java代码1. packagecom.tiantian.mybatis.model;2. 3. publicclassUser4. 5. privateintid;6. privateStringname;7. privateintage;8. publicintgetId()9. returnid;10. 11. publicvoidsetId(intid)12. this.id=id;13. 14. publicStringgetName()15. returnname;16. 17. publicvoidsetName(Stringname)18. =name;19. 20. publicintgetAge()21. returnage;22. 23. publicvoidsetAge(intage)24. this.age=age;25. 26. 27. 它对应的数据库表结构是这样的:然后我要利用Mybatis对它做一个简单的增删改查操作,那么如果利用xml配置Mapper的方式来定义的话,我对应的UserMapper.xml文件会是这样:Xml代码1. 2. 5. 6. 7. 8. insertintot_user(name,age)values(#name,#age)9. 10. 11. 12. updatet_usersetname=#name,age=#agewhereid=#id13. 14. 15. 16. select*fromt_userwhereid=#id17. 18. 19. 20. deletefromt_userwhereid=#id21. 22. 如果使用接口加注解的方式,那么我们的UserMapper接口应该这样定义:Java代码1. packagecom.tiantian.mybatis.mapperinterface;2. 3. importorg.apache.ibatis.annotations.Delete;4. importorg.apache.ibatis.annotations.Insert;5. importorg.apache.ibatis.annotations.Select;6. importorg.apache.ibatis.annotations.Update;7. 8. importcom.tiantian.mybatis.model.User;9. 10. publicinterfaceUserMapper11. 12. Insert(insertintot_user(name,age)values(#name,#age)13. publicvoidinsertUser(Useruser);14. 15. Update(updatet_usersetname=#name,age=#agewhereid=#id)16. publicvoidupdateUser(Useruser);17. 18. Select(select*fromt_userwhereid=#id)19. publicUserfindById(intid);20. 21. Delete(deletefromt_userwhereid=#id)22. publicvoiddeleteUser(intid);23. 24. 注意看这里我故意把UserMapper接口的namespace也就是它的包名置为与UserMapper.xml的namespace属性不一样。这主要是为了要更好的讲以下的内容。接下来要做的就是把Mapper信息注册到Mybatis的配置中,告诉Mybatis我们定义了哪些Mapper信息。这主要是在Mybatis的配置文件中通过mappers元素来进行的。在以前版本的Mybatis中我们在Mybatis的配置文件中需要这样定义Mapper信息资源的位置。Xml代码1. 2. 3. 4. 这主要是通过mapper元素的resource和url属性来指定的,resource属性指定的是相对于跟类路径下的资源,url属性指定的是通过URL可以获取到的资源。这有一点不好的地方,当我们使用Mapper接口加注解来定义当前Mapper的操作信息时,我们还需要定义一个与它对应的Mapper.xml文件。如:Xml代码1. 2. 5. 6. 7. Java代码1. packagecom.tiantian.mybatis.mapperinterface;2. 3. importorg.apache.ibatis.annotations.Delete;4. importorg.apache.ibatis.annotations.Insert;5. importorg.apache.ibatis.annotations.Select;6. importorg.apache.ibatis.annotations.Update;7. 8. importcom.tiantian.mybatis.model.User;9. 10. publicinterfaceUserMapper11. 12. Insert(insertintot_user(name,age)values(#name,#age)13. publicvoidinsertUser(Useruser);14. 15. Update(updatet_usersetname=#name,age=#agewhereid=#id)16. publicvoidupdateUser(Useruser);17. 18. Select(select*fromt_userwhereid=#id)19. publicUserfindById(intid);20. 21. Delete(deletefromt_userwhereid=#id)22. publicvoiddeleteUser(intid);23. 24. 我发现在现在使用的这个Mybatis3.2.1中这个问题已经得到了改善,现在我们在定义基于接口的定义的Mapper时可以通过一个class属性来指定接口。Xml代码1. 2. 3. 除了通过class属性指定Mapper接口外,Mybatis还为我们提供了一个可以同时指定多个Mapper接口的方法。在现在的Mybatis版本中我们可以在mappers元素下面定义一个package子元素,用以指定Mapper接口所在的包,这样Mybatis就会把这个包下面的所有Mapper接口都进行注册。Xml代码1. 2. 3. 这里的一个package只针对于一个包。当在多个包里面定义有Mapper接口时,我们需要定义对应的多个package元素。这四种注册Mapper的方式就是我想在这篇文章中表达的。总结一下:Xml代码1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 当使用mapper元素进行Mapper定义的时候需要注意:mapper的三个属性resource、url和class对于每个mapper元素只能指定一个,要么指定resource属性,要么指定url属性,要么指定class属性,不能都指定,也不能都不指定。下面将对上面的代码给出一些对应的测试代码。先贴出测试对应的Mybatis的配置文件:Xml代码1. 2. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 1.对于使用xml方式定义的UserMapper.xml,然后直接使用SqlSession访问定义在其中的statement的测试:Java代码1. packagecom.tiantian.mybatis.test;2. 3. importorg.apache.ibatis.session.SqlSession;4. importorg.apache.ibatis.session.SqlSessionFactory;5. importorg.junit.Before;6. importorg.junit.Test;7. 8. importcom.tiantian.mybatis.model.User;9. importcom.tiantian.mybatis.util.Util;10. 11. /*12. *13. *这个类主要用来测试直接使用SqlSession访问定义在UserMapper.xml文件中的statement14. *15. */16. publicclassUserMapperTest17. 18. SqlSessionFactorysqlSessionFactory=null;19. 20. Before21. publicvoidbefore()22. sqlSessionFactory=Util.getSqlSessionFactory();23. 24. 25. Test26. publicvoidtestInsert()27. SqlSessionsqlSession=sqlSessionFactory.openSession();28. try29. Useruser=newUser();30. user.setName(张三);31. user.setAge(30);32. sqlSession.insert(com.tiantian.mybatis.mapper.UserMapper.insertUser,user);33. sqlSmit();34. finally35. sqlSession.close();36. 37. 38. 39. Test40. publicvoidtestUpdate()41. SqlSessionsqlSession=sqlSessionFactory.openSession();42. try43. Useruser=newUser();44. user.setId(1);45. user.setName(李四);46. user.setAge(34);47. sqlSession.update(com.tiantian.mybatis.mapper.UserMapper.updateUser,user);48. sqlSmit();49. finally50. sqlSession.close();51. 52. 53. 54. Test55. publicvoidtestFind()56. SqlSessionsqlSession=sqlSessionFactory.openSession();57. try58. Useruser=sqlSession.selectOne(com.tiantian.mybatis.mapper.UserMapper.findById,1);59. System.out.println(user.getId()+-+user.getName()+-+user.getAge();60. finally61. sqlSession.close();62. 63. 64. 65. Test66. publicvoidtestDelele()67. SqlSessionsqlSession=sqlSessionFactory.openSession();68. try69. sqlSession.delete(com.tiantian.mybatis.mapper.UserMapper.deleteUser,2);70. sqlSmit();71. finally72. sqlSession.close();73. 74. 75. 76. 2.对于使用Mapper接口加对应的注解来定义的Mapper信息直接使用SqlSession访问Mapper接口中使用注解定义好的statement的测试:Java代码1. packagecom.tiantian.mybatis.test;2. 3. importorg.apache.ibatis.session.SqlSession;4. importorg.apache.ibatis.session.SqlSessionFactory;5. importorg.junit.Before;6. importorg.junit.Test;7. 8. importcom.tiantian.mybatis.model.User;9. importcom.tiantian.mybatis.util.Util;10. 11. /*12. *13. *这个类是测试直接使用SqlSession访问UserMapper接口中使用注解定义好的statement14. *15. */16. publicclassUserMapperTest217. 18. SqlSessionFactorysqlSessionFactory=null;19. 20. Before21. publicvoidbefore()22. sqlSessionFactory=Util.getSqlSessionFactory();23. 24. 25. Test26. publicvoidtestInsert()27. SqlSessionsqlSession=sqlSessionFactory.openSession();28. try29. Useruser=newUser();30. user.setName(张三);31. user.setAge(30);32. sqlSession.insert(com.tiantian.mybatis.mapperinterface.UserMapper.insertUser,user);33. sqlSmit();34. finally35. sqlSession.close();36. 37. 38. 39. Test40. publicvoidtestUpdate()41. SqlSessionsqlSession=sqlSessionFactory.openSession();42. try43. Useruser=newUser();44. user.setId(1);45. user.setName(李四);46. user.setAge(34);47. sqlSession.update(com.tiantian.mybatis.mapperinterface.UserMapper.updateUser,user);48. sqlSmit();49. finally50. sqlSession.close();51. 52. 53. 54. Test55. publicvoidtestFind()56. SqlSessionsqlSession=sqlSessionFactory.openSession();57. try58. Useruser=sqlSession.selectOne(com.tiantian.mybatis.mapperinterface.UserMapper.findById,1);59. System.out.println(user.getId()+-+user.getName()+-+user.getAge();60. finally61. sqlSession.close();62. 63. 64. 65. Test66. publicvoidtestDelele()67. SqlSessionsqlSession=sqlSessionFactory.openSession();68. try69. sqlSession.delete(com.tiantian.mybatis.mapperinterface.UserMapper.deleteUser,3);70. sqlSmit();71. finally72. sqlSession.close();73. 74. 75. 76. 3.对于使用Mapper接口加注解定义好的Mapper信息通过SqlSession获取其对应的Mapper接口来操作其中定义好的statement的测试:Java代码1. packagecom.tiantian.mybatis.test;2. 3. importorg.apache.ibatis.session.SqlSession;4. importorg.apache.ibatis.session.SqlSessionFactory;5. importorg.junit.Before;6. importorg.junit.Test;7. 8. importcom.tiantian.mybatis.mapperinterface.UserMapper;9. importcom.tiantian.mybatis.model.User;10. importcom.tiantian.mybatis.util.Util;11. 12. /*13. *14. *这个类是测试使用SqlSession获取UserMapper接口来执行使用注解定义在UserMapper接口中的statement15. *16. */17. publicclassUserMapperTest318. 19. SqlSessionFactorysqlSessionFactory=null;20. 21. Before22. publicvoidbefore()23. sqlSessionFactory=Util.getSqlSessionFactory();24. 25. 26. Test27. publicvoidtestInsert()28. SqlSessionsqlSession=sqlSessionFactory.openSession();29. try30. Useruser=newUser();31. user.setName(张三);32. user.setAge(30);33. UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);34. userMapper.insertUser(user);35. sqlSmit();36. finally37. sqlSession.close();38. 39. 40. 41. Test42. publicvoidtestUpdate()43. Sq

温馨提示

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

评论

0/150

提交评论