MyBatis学习总结 + 【手写MyBatis底层机制焦点】

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

MyBatis条记

MyBatis介绍

MyBatis 是一个长期层框架

  • 前身是ibatis, 在ibatis3.x 时,更名为MyBatis
  • MyBatis 在java 和sql 之间提供更机动的映射方案
  • mybatis 可以将对数据表的操纵(sql,方法)等等直接剥离,写到xml 配置文件,实现和java
    代码的解耦
  • mybatis 通过SQL 操纵DB, 建库建表的工作必要程序员完成
相关文档

MyBatis 中文手册、
https://mybatis.org/mybatis-3/zh/index.html
https://mybatis.net.cn/
为什么必要MyBatis?


  • 传统jdbc连接数据库必要本身编写,不同一标准
  • 程序不是OOP的方式编写的
  • SQL语句是写在程序中,属于硬编码,没有解耦
  • mybatis 可以将对数据表的操纵(sql,方法)等等直接剥离,写到xml 配置文件,实现和java
    代码的解耦
  • MyBatis 是一个长期层框架所以它同一
  • MyBatis 是OOP方式操纵数据库


MyBatis案例

实体类
  1. @Setter
  2. @Getter
  3. @AllArgsConstructor
  4. @NoArgsConstructor
  5. @ToString
  6. public class Monk {
  7. <mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>private Integer id;
  10. <mappers>
  11.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  12. </mappers>private String nickname;
  13. <mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers>private String skill;
  16. <mappers>
  17.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  18. </mappers>private String grade;
  19. <mappers>
  20.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  21. </mappers>private Double salary;
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers>private String birthTime;
  25. <mappers>
  26.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  27. </mappers>private Date entry;
  28. }
复制代码
mapper接口

  • 只是一个接口
  • 该接口用于声明操纵monster表的方法
  • 这些方法可以通过注解或者xml文件实现
  1. public interface MonkMapper {
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers>void addMonk(Monk monk);
  5. }
复制代码
mapper.xml

  • 这是一个mapper xml 文件
  • 该文件可以去实现对应的接口的方法
  • namespace 指定该xml文件和哪个接口对应
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.   
  4. <mappers>
  5.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  6. </mappers><properties resource="jdbc.properties"/>  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  7.   
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  11. <mapper namespace="com.code_study.mapper.MonkMapper">
  12. <mappers>
  13.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  14. </mappers>
  15. <mappers>
  16.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  17. </mappers>
  18. <mappers>
  19.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  20. </mappers><insert id="addMonk" parameterType="Monk">
  21.   
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers><properties resource="jdbc.properties"/>  INSERT INTO `monk`
  25.   
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>(`nickname`,`skill`,`grade`,`salary`,`birthTime`,`entry`)
  32.   
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/>  VALUES(#{nickname},#{skill},#{grade},#{salary},#{birthTime},#{entry})
  36. <mappers>
  37.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  38. </mappers></insert>
  39. </mapper>
复制代码
原生的API和注解的方式

Mybatis原生的API调用

添加
  1. @Test
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers>public void myBatisNativeCrud(){
  5.   
  6. <mappers>
  7.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  8. </mappers><properties resource="jdbc.properties"/>  Monk monk = new Monk();
  9.   
  10. <mappers>
  11.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  12. </mappers><properties resource="jdbc.properties"/>  monk.setBirthTime("1999-9-9 10:11:02");
  13.   
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  Calendar instance = Calendar.getInstance();
  17.   
  18. <mappers>
  19.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  20. </mappers><properties resource="jdbc.properties"/>  instance.set(Calendar.YEAR,2020);
  21.   
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers><properties resource="jdbc.properties"/>  instance.set(Calendar.MONTH,Calendar.OCTOBER);
  25.   
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  instance.set(Calendar.DAY_OF_MONTH,15);
  29.   
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>  Date time = instance.getTime();
  33.   
  34. <mappers>
  35.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  36. </mappers><properties resource="jdbc.properties"/>  monk.setEntry(time);
  37.   
  38. <mappers>
  39.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  40. </mappers><properties resource="jdbc.properties"/>  monk.setGrade("大宗师");
  41.   
  42. <mappers>
  43.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  44. </mappers><properties resource="jdbc.properties"/>  monk.setNickname("法海");
  45.   
  46. <mappers>
  47.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  48. </mappers><properties resource="jdbc.properties"/>  monk.setSalary(200.5);
  49.   
  50. <mappers>
  51.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  52. </mappers><properties resource="jdbc.properties"/>  monk.setSkill("大威天龙");
  53.   
  54. <mappers>
  55.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  56. </mappers><properties resource="jdbc.properties"/>  int insert = sqlSession.insert("com.code_study.mapper.MonkMapper.addMonk", monk);
  57.   
  58. <mappers>
  59.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  60. </mappers><properties resource="jdbc.properties"/>  System.out.println("insert~~" + insert);
  61.   
  62. <mappers>
  63.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  64. </mappers><properties resource="jdbc.properties"/>  System.out.println("操作成功");
  65.    }
复制代码
删除
  1.   <mappers>
  2. <mappers>
  3. <mappers>
  4.         <package name="com.cody_study.mapper"/>
  5. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  6. </mappers><mapper />
  7. </mappers>@Test
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers>public void myBatisNativeCrud(){
  11. <mappers>
  12. <mappers>
  13. <mappers>
  14.         <package name="com.cody_study.mapper"/>
  15. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  16. </mappers><mapper />
  17. </mappers><mappers>
  18. <mappers>
  19. <mappers>
  20.         <package name="com.cody_study.mapper"/>
  21. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  22. </mappers><mapper />
  23. </mappers>int delete = sqlSession.delete("com.code_study.mapper.MonkMapper.deleteMonk", 6);
  24.   
  25. <mappers>
  26.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  27. </mappers><properties resource="jdbc.properties"/>  System.out.println("delete~~" + delete);
  28.   
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>  System.out.println("操作成功");
  32.   
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/>}
复制代码
修改
  1. @Test
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers>public void myBatisNativeCrud(){
  5. <mappers>
  6. <mappers>
  7. <mappers>
  8.         <package name="com.cody_study.mapper"/>
  9. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  10. </mappers><mapper />
  11. </mappers><mappers>
  12. <mappers>
  13. <mappers>
  14.         <package name="com.cody_study.mapper"/>
  15. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  16. </mappers><mapper />
  17. </mappers> Monk monk = new Monk();
  18.   
  19. <mappers>
  20.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  21. </mappers><properties resource="jdbc.properties"/>  monk.setBirthTime("1999-9-9 10:11:02");
  22.   
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>  Calendar instance = Calendar.getInstance();
  26.   
  27. <mappers>
  28.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  29. </mappers><properties resource="jdbc.properties"/>  instance.set(Calendar.YEAR,2020);
  30.   
  31. <mappers>
  32.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  33. </mappers><properties resource="jdbc.properties"/>  instance.set(Calendar.MONTH,Calendar.OCTOBER);
  34.   
  35. <mappers>
  36.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  37. </mappers><properties resource="jdbc.properties"/>  instance.set(Calendar.DAY_OF_MONTH,15);
  38.   
  39. <mappers>
  40.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  41. </mappers><properties resource="jdbc.properties"/>  Date time = instance.getTime();
  42.   
  43. <mappers>
  44.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  45. </mappers><properties resource="jdbc.properties"/>  monk.setEntry(time);
  46.   
  47. <mappers>
  48.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  49. </mappers><properties resource="jdbc.properties"/>  monk.setGrade("大宗师");
  50.   
  51. <mappers>
  52.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  53. </mappers><properties resource="jdbc.properties"/>  monk.setNickname("法海");
  54.   
  55. <mappers>
  56.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  57. </mappers><properties resource="jdbc.properties"/>  monk.setSalary(200.5);
  58.   
  59. <mappers>
  60.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  61. </mappers><properties resource="jdbc.properties"/>  monk.setSkill("乾坤大挪移");
  62.   
  63. <mappers>
  64.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  65. </mappers><properties resource="jdbc.properties"/>  monk.setId(8);
  66.   
  67. <mappers>
  68.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  69. </mappers><properties resource="jdbc.properties"/>  int update = sqlSession.update("com.code_study.mapper.MonkMapper.updateMonk", monk);
  70.   
  71. <mappers>
  72.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  73. </mappers><properties resource="jdbc.properties"/>  System.out.println("update~~" + update);
  74.   
  75. <mappers>
  76.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  77. </mappers><properties resource="jdbc.properties"/>  System.out.println("操作成功");
  78.   
  79. <mappers>
  80.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  81. </mappers><properties resource="jdbc.properties"/>}
复制代码
查询
  1. @Test
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers>public void myBatisNativeCrud(){
  5. <mappers>
  6. <mappers>
  7. <mappers>
  8.         <package name="com.cody_study.mapper"/>
  9. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  10. </mappers><mapper />
  11. </mappers><mappers>
  12. <mappers>
  13. <mappers>
  14.         <package name="com.cody_study.mapper"/>
  15. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  16. </mappers><mapper />
  17. </mappers>List<Monk> monks =
  18.   
  19. <mappers>
  20.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  21. </mappers><properties resource="jdbc.properties"/>  
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers><properties resource="jdbc.properties"/>sqlSession.selectList("com.code_study.mapper.MonkMapper.findAllMonk");
  25.   
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  for (Monk monk : monks) {
  29.   
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>  
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/>System.out.println("monk= "+ monk);
  36.   
  37. <mappers>
  38.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  39. </mappers><properties resource="jdbc.properties"/>  }
  40.   
  41. <mappers>
  42.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  43. </mappers><properties resource="jdbc.properties"/>  if (sqlSession != null){
  44.   
  45. <mappers>
  46.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  47. </mappers><properties resource="jdbc.properties"/>  
  48. <mappers>
  49.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  50. </mappers><properties resource="jdbc.properties"/>sqlSession.commit();
  51.   
  52. <mappers>
  53.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  54. </mappers><properties resource="jdbc.properties"/>  
  55. <mappers>
  56.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  57. </mappers><properties resource="jdbc.properties"/>sqlSession.close();
  58.   
  59. <mappers>
  60.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  61. </mappers><properties resource="jdbc.properties"/>  }
  62. <mappers>
  63.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  64. </mappers>}
复制代码
Mybatis注解的方式操纵

添加
  1.   /*
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers>useGeneratedKeys = true : 表示可以返回自增长的值
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>keyProperty = "id"  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>: 表示 自增值对应对象的哪个属性
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers>keyColumn = "id"  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  : 表示 自增值对应表的哪个字段
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers>如果 keyProperty = "id" 和  keyColumn = "id"  一致,可以只保留 keyProperty = "id"
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers> */
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers>@Insert(value = "INSERT INTO `monk` " +
  26.   
  27. <mappers>
  28.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  29. </mappers><properties resource="jdbc.properties"/>  
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>"  
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/>  
  36. <mappers>
  37.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  38. </mappers><properties resource="jdbc.properties"/>(`nickname`,`skill`,`grade`,`salary`,`birthTime`,`entry`) " +
  39.   
  40. <mappers>
  41.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  42. </mappers><properties resource="jdbc.properties"/>  
  43. <mappers>
  44.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  45. </mappers><properties resource="jdbc.properties"/>"  
  46. <mappers>
  47.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  48. </mappers><properties resource="jdbc.properties"/>  VALUES(#{nickname},#{skill},#{grade},#{salary},#{birthTime},#{entry})")
  49. <mappers>
  50.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  51. </mappers>@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
  52. <mappers>
  53.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  54. </mappers>void addMonk(Monk monk);
复制代码
删除
  1.   @Delete(value = "  DELETE FROM `monk` WHERE id = #{id}")
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers>void deleteMonk(Integer id);
复制代码
修改
  1. @Update(value = " UPDATE `monk` " +
  2.   
  3. <mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers><properties resource="jdbc.properties"/>  
  6. <mappers>
  7.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  8. </mappers><properties resource="jdbc.properties"/>"  
  9. <mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers><properties resource="jdbc.properties"/>  SET `nickname`=#{nickname}, " +
  12.   
  13. <mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers><properties resource="jdbc.properties"/>  
  16. <mappers>
  17.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  18. </mappers><properties resource="jdbc.properties"/>"  
  19. <mappers>
  20.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  21. </mappers><properties resource="jdbc.properties"/>  
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers><properties resource="jdbc.properties"/>`skill`=#{skill}, " +
  25.   
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>"  
  32. <mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers><properties resource="jdbc.properties"/>  
  35. <mappers>
  36.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  37. </mappers><properties resource="jdbc.properties"/>`grade`=#{grade}, " +
  38.   
  39. <mappers>
  40.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  41. </mappers><properties resource="jdbc.properties"/>  
  42. <mappers>
  43.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  44. </mappers><properties resource="jdbc.properties"/>"  
  45. <mappers>
  46.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  47. </mappers><properties resource="jdbc.properties"/>  
  48. <mappers>
  49.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  50. </mappers><properties resource="jdbc.properties"/>`salary`=#{salary}, " +
  51.   
  52. <mappers>
  53.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  54. </mappers><properties resource="jdbc.properties"/>  
  55. <mappers>
  56.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  57. </mappers><properties resource="jdbc.properties"/>"  
  58. <mappers>
  59.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  60. </mappers><properties resource="jdbc.properties"/>  
  61. <mappers>
  62.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  63. </mappers><properties resource="jdbc.properties"/>`birthTime`=#{birthTime}, " +
  64.   
  65. <mappers>
  66.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  67. </mappers><properties resource="jdbc.properties"/>  
  68. <mappers>
  69.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  70. </mappers><properties resource="jdbc.properties"/>"  
  71. <mappers>
  72.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  73. </mappers><properties resource="jdbc.properties"/>  
  74. <mappers>
  75.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  76. </mappers><properties resource="jdbc.properties"/>`entry`=#{entry} " +
  77.   
  78. <mappers>
  79.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  80. </mappers><properties resource="jdbc.properties"/>  
  81. <mappers>
  82.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  83. </mappers><properties resource="jdbc.properties"/>"  
  84. <mappers>
  85.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  86. </mappers><properties resource="jdbc.properties"/>   WHERE id = #{id}")
  87. <mappers>
  88.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  89. </mappers>void updateMonk(Monk monk);
复制代码
查询单个
  1. //查询-根据id
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers>@Select(value = "  select * from `monk` where id = #{id}")
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>Monk getMonkById(Integer id);
复制代码
查询多个
  1. //查询所有的Monster
  2. @Select(value = "<mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers>select * from `monk`")
  5. List<Monk> findAllMonk();
复制代码
mybatis-config.xml配置文件详解

根本介绍


  • mybatis 的焦点配置文件(mybatis-config.xml),好比配置jdbc 连接信息,注册mapper
    等等
properties 属性


  • 通过该属性,可以指定一个外部的jdbc.properties 文件,引入我们的jdbc 连接信息
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>
复制代码
settings 全局参数界说


  • 是MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

typeAliases 别名处理器


  • 别名是为Java 类型命名一个短名字。它只和XML 配置有关,用来减少类名重复的部分
  • 如果指定了别名,我们的MappperXxxx.xml 文件就可以做相应的简化处理
  • 注意指定别名后,照旧可以利用全名的
  • 可以直接指向包,这样包下的所有类都是取类名作为别名
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>   
复制代码
typeHandlers 类型处理器


  • MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。
  • 用于java 类型和jdbc 类型映射
  • Mybatis 的映射根本已经满足,不太必要重新界说
  • 这个我们利用默认即可,也就是mybatis 会主动的将java 和jdbc 类型进行转换.

environments 环境

resource 注册Mapper 文件:
  1. <mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>
复制代码
class:接口注解实现
  1. <mappers>
  2. <mappers>
  3. <mappers>
  4.         <package name="com.cody_study.mapper"/>
  5. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  6. </mappers><mapper />
  7. </mappers>
复制代码
url:外部路径,利用很少,不推荐
  1. <mappers>
  2. <mappers>
  3. <mappers>
  4.         <package name="com.cody_study.mapper"/>
  5. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  6. </mappers><mapper />
  7. </mappers>
复制代码
package 方式注册
  1. <mappers>
  2. <mappers>
  3. <mappers>
  4.         <package name="com.cody_study.mapper"/>
  5. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  6. </mappers><mapper />
  7. </mappers>
复制代码
XxxMapper.xml<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>SQL映射文件


根本介绍

​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>MyBatis 的真正强大在于它的语句映射(在XxxMapper.xml 配置), 由于它的异常强大, 如
果拿它跟具有雷同功能的JDBC 代码进行对比,你会立即发现省掉了将近95% 的代码。
MyBatis 致力于减少利用成本,让用户能更专注于SQL 代码。
SQL 映射文件常用的几个顶级元素


  • cache – 该命名空间的缓存配置。
  • cache-ref – 引用别的命名空间的缓存配置。
  • resultMap – 形貌怎样从数据库结果集中加载对象,是最复杂也是最强大的元素。
  • parameterType - 将会传入这条语句的参数的类全限定名或别名
  • sql – 可被别的语句引用的可重用语句块。
  • insert – 映射插入语句。
  • update – 映射更新语句。
  • delete – 映射删除语句。
  • select – 映射查询语句。
parameterType(输入参数类型)


  • 传入简单类型,好比按照id 查Monster
  • 传入POJO 类型,查询时必要有多个筛选条件
  • 当有多个条件时,传入的参数就是Pojo 类型的Java 对象
  • 当传入的参数类是String 时,也可以利用${} 来接收参数
  1. <mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>SELECT * FROM  `monk` WHERE `nickname`  LIKE '%${name}%'
复制代码

  • 传入的是List 时,resultType=“T”类型
  1. <mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>SELECT * FROM `monk` WHERE `id` = #{id} OR `nickname` = #{nickname}
复制代码
传入HashMap


  • HashMap 传入参数更加机动,好比可以机动的增长查询的属性,而不受限于Monster 这
    个Pojo 属性本身
  • parameterType="map"
  1. <mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>SELECT * FROM  `monk` WHERE `id` > #{id} AND `salary` > #{salary}
复制代码
传入和返回HashMap


  • parameterType="map"
  • resultType="map"
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/><mappers>
  5.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  6. </mappers>SELECT * FROM  `monk` WHERE `id` > #{id} AND `salary` > #{salary}<mappers>
  7.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  8. </mappers>
复制代码
resultMap(结果集映射)

根本介绍

​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>当实体类的属性和表的字段名字不一致时,我们可以通过resultMap 进行映射,从而屏蔽
实体类属性名和表的字段名的不同.(作用)
案例
  1. public interface UserMapper {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//查询所有的User<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>public List findAllUser();}
复制代码
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/><mappers>
  5.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  6. </mappers> SELECT * FROM `user`
复制代码
动态SQL语句

根本介绍


  • 在一个现实的项目中,sql 语句往往是比较复杂的
  • 为了满足更加复杂的业务需求,MyBatis 的筹划者,提供了动态天生SQL 的功能。
  • 动态SQL 是MyBatis 的强大特性之一
  • 利用JDBC 或别的类似的框架,根据不同条件拼接SQL 语句非常贫苦,比方拼接时要
  • 确保不能忘记添加必要的空格,还要注意去掉列表末了一个列名的逗号等
  • SQL 映射语句中的强大的动态SQL 语言, 可以很好的办理这个问题.
  • 最重要的是办理一些普通的SQL无法处理的带有复杂逻辑的语句
动态SQL 常用标签

动态SQL 提供了如下几种常用的标签,类似我们Java 的控制语句:

  • if [判定]
  • where [拼接where 子句]
  • choose/when/otherwise [类似java 的switch 语句, 注意是单分支]
  • foreach [类似in ]
  • trim [更换关键字/定制元素的功能]
  • set [在update 的set 中,可以保证进入set 标签的属性被修改,而没有进入set 的,保
    持原来的值]
if [判定]
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>SELECT * FROM `monk` WHERE 1 = 1  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  AND  id > #{id}  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/>
复制代码
where [拼接where 子句]
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>SELECT * FROM `monk`  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/>  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>AND id > #{id}  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>  
  32. <mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers><properties resource="jdbc.properties"/>  
  35. <mappers>
  36.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  37. </mappers><properties resource="jdbc.properties"/>  
  38. <mappers>
  39.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  40. </mappers><properties resource="jdbc.properties"/>  
  41. <mappers>
  42.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  43. </mappers><properties resource="jdbc.properties"/><mappers>
  44.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  45. </mappers>AND `nickname` = #{nic kname}  
  46. <mappers>
  47.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  48. </mappers><properties resource="jdbc.properties"/>  
  49. <mappers>
  50.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  51. </mappers><properties resource="jdbc.properties"/>  
  52. <mappers>
  53.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  54. </mappers><properties resource="jdbc.properties"/>  
  55. <mappers>
  56.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  57. </mappers><properties resource="jdbc.properties"/>
复制代码
choose/when/otherwise [类似java 的switch 语句, 注意是单分支]
  1. <mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>select * from `monk`  
  4. <mappers>
  5.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  6. </mappers><properties resource="jdbc.properties"/>  
  7. <mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers><properties resource="jdbc.properties"/>  
  10. <mappers>
  11.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  12. </mappers><properties resource="jdbc.properties"/>  
  13. <mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers><properties resource="jdbc.properties"/>where nickname = #{nickname}  
  16. <mappers>
  17.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  18. </mappers><properties resource="jdbc.properties"/>  
  19. <mappers>
  20.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  21. </mappers><properties resource="jdbc.properties"/>  
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers><properties resource="jdbc.properties"/>  
  25. <mappers>
  26.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  27. </mappers><properties resource="jdbc.properties"/><mappers>
  28.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  29. </mappers>where id = #{id}  
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>  
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/>  
  36. <mappers>
  37.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  38. </mappers><properties resource="jdbc.properties"/>  
  39. <mappers>
  40.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  41. </mappers><properties resource="jdbc.properties"/><mappers>
  42.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  43. </mappers>where salary > 10000  
  44. <mappers>
  45.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  46. </mappers><properties resource="jdbc.properties"/>  
  47. <mappers>
  48.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  49. </mappers><properties resource="jdbc.properties"/>
复制代码
foreach [类似in ]
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/><mappers>
  5.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  6. </mappers> SELECT * FROM `monk`  
  7. <mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers><properties resource="jdbc.properties"/>  
  10. <mappers>
  11.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  12. </mappers><properties resource="jdbc.properties"/>  
  13. <mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers><properties resource="jdbc.properties"/>  
  16. <mappers>
  17.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  18. </mappers><properties resource="jdbc.properties"/>  
  19. <mappers>
  20.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  21. </mappers><properties resource="jdbc.properties"/>  
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers><properties resource="jdbc.properties"/>id IN  
  25. <mappers>
  26.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  27. </mappers><properties resource="jdbc.properties"/>  
  28. <mappers>
  29.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  30. </mappers><properties resource="jdbc.properties"/>  
  31. <mappers>
  32.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  33. </mappers><properties resource="jdbc.properties"/>  
  34. <mappers>
  35.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  36. </mappers><properties resource="jdbc.properties"/>  
  37. <mappers>
  38.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  39. </mappers><properties resource="jdbc.properties"/>  
  40. <mappers>
  41.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  42. </mappers><properties resource="jdbc.properties"/>#{id}  
  43. <mappers>
  44.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  45. </mappers><properties resource="jdbc.properties"/>  
  46. <mappers>
  47.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  48. </mappers><properties resource="jdbc.properties"/>  
  49. <mappers>
  50.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  51. </mappers><properties resource="jdbc.properties"/>  
  52. <mappers>
  53.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  54. </mappers><properties resource="jdbc.properties"/>  
  55. <mappers>
  56.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  57. </mappers><properties resource="jdbc.properties"/>  
  58. <mappers>
  59.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  60. </mappers><properties resource="jdbc.properties"/><mappers>
  61.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  62. </mappers>
复制代码
trim [更换关键字/定制元素的功能]
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>  SELECT * FROM `monk`  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/>  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>ZY id > #{id}  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>  
  32. <mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers><properties resource="jdbc.properties"/>  
  35. <mappers>
  36.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  37. </mappers><properties resource="jdbc.properties"/>  
  38. <mappers>
  39.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  40. </mappers><properties resource="jdbc.properties"/>  
  41. <mappers>
  42.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  43. </mappers><properties resource="jdbc.properties"/><mappers>
  44.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  45. </mappers>AND `nickname` = #{nickname}  
  46. <mappers>
  47.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  48. </mappers><properties resource="jdbc.properties"/>  
  49. <mappers>
  50.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  51. </mappers><properties resource="jdbc.properties"/>  
  52. <mappers>
  53.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  54. </mappers><properties resource="jdbc.properties"/>  
  55. <mappers>
  56.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  57. </mappers><properties resource="jdbc.properties"/>
复制代码
set [在update 的set 中,可以保证进入set 标签的属性被修改,而没有进入set 的,保
持原来的值]
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>UPDATE `monk`  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/>  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>`grade` = #{grade},  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>  
  32. <mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers><properties resource="jdbc.properties"/>  
  35. <mappers>
  36.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  37. </mappers><properties resource="jdbc.properties"/>  
  38. <mappers>
  39.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  40. </mappers><properties resource="jdbc.properties"/>  
  41. <mappers>
  42.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  43. </mappers><properties resource="jdbc.properties"/><mappers>
  44.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  45. </mappers>`skill` = #{skill},  
  46. <mappers>
  47.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  48. </mappers><properties resource="jdbc.properties"/>  
  49. <mappers>
  50.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  51. </mappers><properties resource="jdbc.properties"/>  
  52. <mappers>
  53.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  54. </mappers><properties resource="jdbc.properties"/>  
  55. <mappers>
  56.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  57. </mappers><properties resource="jdbc.properties"/>  
  58. <mappers>
  59.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  60. </mappers><properties resource="jdbc.properties"/>  
  61. <mappers>
  62.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  63. </mappers><properties resource="jdbc.properties"/><mappers>
  64.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  65. </mappers>`nickname` = #{nickname},  
  66. <mappers>
  67.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  68. </mappers><properties resource="jdbc.properties"/>  
  69. <mappers>
  70.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  71. </mappers><properties resource="jdbc.properties"/>  
  72. <mappers>
  73.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  74. </mappers><properties resource="jdbc.properties"/>  
  75. <mappers>
  76.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  77. </mappers><properties resource="jdbc.properties"/>  
  78. <mappers>
  79.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  80. </mappers><properties resource="jdbc.properties"/>  
  81. <mappers>
  82.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  83. </mappers><properties resource="jdbc.properties"/><mappers>
  84.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  85. </mappers>`grade` = #{grade},  
  86. <mappers>
  87.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  88. </mappers><properties resource="jdbc.properties"/>  
  89. <mappers>
  90.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  91. </mappers><properties resource="jdbc.properties"/>  
  92. <mappers>
  93.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  94. </mappers><properties resource="jdbc.properties"/>  
  95. <mappers>
  96.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  97. </mappers><properties resource="jdbc.properties"/>  
  98. <mappers>
  99.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  100. </mappers><properties resource="jdbc.properties"/>  
  101. <mappers>
  102.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  103. </mappers><properties resource="jdbc.properties"/><mappers>
  104.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  105. </mappers>`salary` = #{salary},  
  106. <mappers>
  107.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  108. </mappers><properties resource="jdbc.properties"/>  
  109. <mappers>
  110.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  111. </mappers><properties resource="jdbc.properties"/>  
  112. <mappers>
  113.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  114. </mappers><properties resource="jdbc.properties"/>  
  115. <mappers>
  116.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  117. </mappers><properties resource="jdbc.properties"/>  
  118. <mappers>
  119.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  120. </mappers><properties resource="jdbc.properties"/>  
  121. <mappers>
  122.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  123. </mappers><properties resource="jdbc.properties"/><mappers>
  124.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  125. </mappers>`birthTime` = #{birthTime},  
  126. <mappers>
  127.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  128. </mappers><properties resource="jdbc.properties"/>  
  129. <mappers>
  130.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  131. </mappers><properties resource="jdbc.properties"/>  
  132. <mappers>
  133.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  134. </mappers><properties resource="jdbc.properties"/>  
  135. <mappers>
  136.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  137. </mappers><properties resource="jdbc.properties"/>  
  138. <mappers>
  139.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  140. </mappers><properties resource="jdbc.properties"/>  
  141. <mappers>
  142.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  143. </mappers><properties resource="jdbc.properties"/><mappers>
  144.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  145. </mappers>`entry` = #{entry},  
  146. <mappers>
  147.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  148. </mappers><properties resource="jdbc.properties"/>  
  149. <mappers>
  150.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  151. </mappers><properties resource="jdbc.properties"/>  
  152. <mappers>
  153.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  154. </mappers><properties resource="jdbc.properties"/>  
  155. <mappers>
  156.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  157. </mappers><properties resource="jdbc.properties"/><mappers>
  158.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  159. </mappers>WHERE id = #{id}<mappers>
  160.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  161. </mappers>
复制代码
映射关系一对一

根本介绍


  • 项目中1 对1 的关系是一个根本的映射关系,好比erson(人) --- IDCard(身份证
映射方式


  • 通过配置XxxMapper.xml 实现1 对1 [配置方式]
  • 通过注解的方式实现1 对1 [注解方式]
映射方式一:配置Mapper.xml实现


  • 通过配置XxxMapper.xml 的方式,实现级联查询,通过person 可以获取到对应的idencard 信息
接口:
  1. public interface PersonMapper {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//通过Person 的id 获取到Person,包括这个Person 关联的IdenCard 对象<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>Person getPersonById(Integer id);<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>//通过Person 的id 获取到Person,包括这个Person 管理的IdenCard 对象,方式2<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>Person getPersonById2(Integer id);<mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers>//通过Person 的id 获取到Person<mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers>Person getPerson(Integer id);}
复制代码
  1. public interface IdenCardMapper {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//根据id 获取到身份证序列号<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>IdenCard getIdenCardById(Integer id);<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>//通过IdenCard 的id 获取到Person<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>IdenCard getIdenCardAndPerson(Integer id);}
复制代码
mapper.xml:
通过person 可以获取到对应的idencard 信息
方式一 :多表联查
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/>  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  select *<mappers>
  29.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  30. </mappers>from `person` join `idencard` on person.card_id = idencard.id<mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers>where person.id = #{id}
复制代码
方式二:分解成单表操纵
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/><mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>SELECT * FROM `person` where `id` = #{id}
复制代码
映射方式二:注解实现
  1. public interface PersonMapperAnnotation {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>@Select(value = "SELECT * FROM `person` where `id` = #{id}")<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>@Results({  
  6. <mappers>
  7.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  8. </mappers><properties resource="jdbc.properties"/>  
  9. <mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers><properties resource="jdbc.properties"/>@Result(id = true,property = "id",column = "id"),  
  12. <mappers>
  13.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  14. </mappers><properties resource="jdbc.properties"/>  
  15. <mappers>
  16.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  17. </mappers><properties resource="jdbc.properties"/>@Result(property = "name",column = "name"),  
  18. <mappers>
  19.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  20. </mappers><properties resource="jdbc.properties"/>  
  21. <mappers>
  22.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  23. </mappers><properties resource="jdbc.properties"/>@Result(property = "card",column = "card_id",  
  24. <mappers>
  25.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  26. </mappers><properties resource="jdbc.properties"/>  
  27. <mappers>
  28.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  29. </mappers><properties resource="jdbc.properties"/>  
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>  one = @One(select = "com.code_study.mapper.IdenCardMapperAnnotation.getIdenCardById"))<mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers>})<mappers>
  35.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  36. </mappers>Person getPersonById(Integer id);}
复制代码




映射关系多对一

根本介绍


  • 项目中多对1 的关系是一个根本的映射关系, 多对1, 也可以理解成是1 对多.
  • User --- Pet: 一个用户可以养多只宠物
  • Dep ---Emp : 一个部门可以有多个员工
映射方式


  • 通过配置XxxMapper.xml 实现1 对1 [配置方式]
  • 通过注解的方式实现1 对1 [注解方式]
映射方式一:配置Mapper.xml实现

接口:
  1. public interface UserMapper {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//通过id 获取User 对象<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>public User getUserById(Integer id);}
复制代码
  1. public interface PetMapper {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//通过User 的id 来获取pet 对象,可能有多个,因此利用List 接收<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>public List getPetByUserId(Integer userId);<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>//通过pet 的id 获取Pet 对象<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>public Pet getPetById(Integer id);}
复制代码
mapper.xml
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/> SELECT * FROM `mybatis_pet` WHERE user_id = #{userId}  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>  
  32. <mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers><properties resource="jdbc.properties"/>select * from `mybatis_pet` where id = #{id}<mappers>
  35.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  36. </mappers>
复制代码
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/><mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>SELECT * from `mybatis_user` WHERE id = #{id}
复制代码
说明:


  • 多对一时,resultMap中 collection 标签表示集合
  • 在 collection 标签中 属性 ofType 表示集合中存放的数据类型
  • 双向多对一时,toString应该去掉,避免栈溢出
  • resultMap中 select 标签表示复用这个目的方法,推荐利用,这样提高代码的复用性,将多表拆解成单表
映射方式二:注解实现
  1. public interface UserMapperAnnotation {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//通过id 获取User 对象  
  4. <mappers>
  5.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  6. </mappers><properties resource="jdbc.properties"/> @Select(value = "SELECT * from `mybatis_user` WHERE id = #{id}")<mappers>
  7.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  8. </mappers>@Results({  
  9. <mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers><properties resource="jdbc.properties"/>  
  12. <mappers>
  13.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  14. </mappers><properties resource="jdbc.properties"/>@Result(id = true,property = "id",column = "id"),  
  15. <mappers>
  16.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  17. </mappers><properties resource="jdbc.properties"/>  
  18. <mappers>
  19.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  20. </mappers><properties resource="jdbc.properties"/>@Result(property = "name",column = "name"),  
  21. <mappers>
  22.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  23. </mappers><properties resource="jdbc.properties"/>  
  24. <mappers>
  25.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  26. </mappers><properties resource="jdbc.properties"/>@Result(property = "pets",column = "id",  
  27. <mappers>
  28.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  29. </mappers><properties resource="jdbc.properties"/>  
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>  
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/>  many = @Many(select = "com.code_study.mapper.PetMapperAnnotation.getPetByUserId"))<mappers>
  36.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  37. </mappers>})<mappers>
  38.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  39. </mappers>public User getUserById(Integer id);}
复制代码
  1. public interface PetMapperAnnotation {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//通过User 的id 来获取pet 对象,可能有多个,因此利用List 接收<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>@Select(value = "SELECT * FROM `mybatis_pet` WHERE user_id = #{userId}")<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>@Results(id = "PetResultMap",value = {  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>@Result(id = true,property = "id",column = "id"),  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>@Result(property = "nickname",column = "nickname"),  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/>  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>@Result(property = "user",column = "user_id",  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>  
  32. <mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers><properties resource="jdbc.properties"/>  one = @One(select = "com.code_study.mapper.UserMapperAnnotation.getUserById"))<mappers>
  35.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  36. </mappers>})<mappers>
  37.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  38. </mappers>List getPetByUserId(Integer userId);<mappers>
  39.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  40. </mappers>//通过pet 的id 获取Pet 对象<mappers>
  41.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  42. </mappers>@Select(value = " select * from `mybatis_pet` where id = #{id}")<mappers>
  43.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  44. </mappers>@ResultMap(value = "PetResultMap")<mappers>
  45.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  46. </mappers>Pet getPetById(Integer id);}
复制代码

  • @Results(id = "etResultMap"...)可以给@Results设置一个 id 用来复用代码
  • 在下面就进行了@Results 的复用
  1. //通过pet 的id 获取Pet 对象   <mappers>
  2. <mappers>
  3. <mappers>
  4.         <package name="com.cody_study.mapper"/>
  5. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  6. </mappers><mapper />
  7. </mappers>@Select(value = " select * from `mybatis_pet` where id = #{id}") <mappers>
  8. <mappers>
  9. <mappers>
  10.         <package name="com.cody_study.mapper"/>
  11. </mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
  12. </mappers><mapper />
  13. </mappers>@ResultMap(value = "PetResultMap")<mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers>Pet getPetById(Integer id);
复制代码
MyBatis缓存

根本介绍


  • MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。
相关文档

一级缓存


  • 默认情况下,mybatis 是启用一级缓存的/本地缓存/local Cache,它是SqlSession 级别的。
  • 同一个SqlSession 接口对象调用了雷同的select 语句,会直接从缓存里面获取,而不是再
    去查询数据库
一级缓存原理图


一级缓存失效的情况


  • 关闭sqlSession 会话后, 再次查询,会到数据库查询
  • 当实行sqlSession.clearCache() 会使一级缓存失效
  • 当对同一个monster 修改,该对象在一级缓存会失效
二级缓存


  • 二级缓存和一级缓存都是为了提高检索服从的技能
  • 最大的区别就是作用域的范围不一样,一级缓存的作用域是sqlSession 会话级别,在一次
    会话有效,而二级缓存作用域是全局范围,针对不同的会话都有效
二级缓存原理图


二级缓存配置

​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>1.在mybatis-config.xml中 全局性的开启缓存
​<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>
​<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>

​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>2.利用二级缓存时entity 类实现序列化接口(serializable),由于二级缓存可能利用到序列化技能
​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers><mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>*大部分情况不必要这样配置,只是某些第三方缓存库必要序列化到磁盘!
​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>3.再对应的XxxMapper.xml中设置二级缓存的计谋
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>   SELECT * FROM `monster` WHERE id = #{id}<mappers>
  11.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  12. </mappers>
复制代码
注意事项


  • 表示创建了FIFO 的计谋,每隔30 秒刷新一次,最多存放360 个对象而且返回的对象被认为是只读的。
  • eviction:缓存的回收计谋
  • flushInterval:时间隔断,单位是毫秒,
  • size:引用数目,内存大就多配置点,要记住你缓存的对象数目和你运行环境的可用内存
  • 资源数目。默认值是1024
  • readOnly:true,只读
四大计谋

  • LRU – 最近最少利用:移除最长时间不被利用的对象。
  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  • SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
  • WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象
怎样禁用二级缓存

方式一
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
复制代码
方式二

在XxxMapper.xml文件中不配做
方式三

直接在XxxMapper.xml文件对应的方法上 设置属性 useCache=false
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>   SELECT * FROM `monster`<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>
复制代码
一级缓存和二级缓存的实行顺序


  • 缓存实行顺序是:二级缓存-->一级缓存-->数据库
  • 当我们关闭了一级缓存的时候,如果配置了二级缓存,那么一级缓存的数据会放入二级缓存中
  • 不会出现一级缓存和二级缓存中有同一个数据。由于二级缓存(数据)是在一级缓存关闭之后才有的
第三方缓存框架---EhCache

根本介绍


  • EhCache 是一个纯Java 的缓存框架,具有快速、精干等特点
  • MyBatis 有本身默认的二级缓存(前面我们已经利用过了),但是在现实项目中,往往利用
    的是更加专业的第三方缓存产品作为MyBatis 的二级缓存,EhCache 就是非常优秀的缓存
    产品
配置利用第三方缓存框架

添加依赖
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>net.sf.ehcache  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  ehcache-core  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  2.6.11  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/><mappers>
  20.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  21. </mappers>org.slf4j  
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers><properties resource="jdbc.properties"/>  slf4j-api  
  25. <mappers>
  26.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  27. </mappers><properties resource="jdbc.properties"/>  1.7.25  
  28. <mappers>
  29.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  30. </mappers><properties resource="jdbc.properties"/>  
  31. <mappers>
  32.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  33. </mappers><properties resource="jdbc.properties"/><mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers>org.mybatis.caches  
  36. <mappers>
  37.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  38. </mappers><properties resource="jdbc.properties"/>  mybatis-ehcache  
  39. <mappers>
  40.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  41. </mappers><properties resource="jdbc.properties"/>  1.2.1<mappers>
  42.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  43. </mappers>
复制代码
在XxxMapper.xml文件中启用EhCache
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/> SELECT * FROM `monster` WHERE id = #{id}<mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers>
复制代码
怎样理解EhCache 和MyBatis 缓存的关系


  • MyBatis 提供了一个接口Cacheorg.apache.ibatis.cache.Cache
  • 只要实现了该Cache 接口,就可以作为二级缓存产品和MyBatis 整合利用,Ehcache 就
    是实现了该接口
  • MyBatis 默认情况(即一级缓存)是利用的PerpetualCache 类实现Cache 接口的,是焦点类
  • 当我们利用了Ehcahce 后,就是EhcacheCache 类实现Cache 接口的,是焦点类.
  • 缓存的本质就是Map
手写MyBatis底层机制


读取配置文件,得到数据库连接

思绪


  • 引入必要的依赖
  • 必要写一个本身的config.xml文件,在里面配置一些信息,driver,url ,password,username
  • 必要编写Configuration类,对 本身的config.xml文件 进行解析,得到一个数据库连接
实现


  • 引入必要的依赖
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  dom4j  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>dom4j  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/>1.6.1  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>  
  32. <mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers><properties resource="jdbc.properties"/><mappers>
  35.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  36. </mappers>mysql  
  37. <mappers>
  38.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  39. </mappers><properties resource="jdbc.properties"/>  
  40. <mappers>
  41.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  42. </mappers><properties resource="jdbc.properties"/>mysql-connector-java  
  43. <mappers>
  44.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  45. </mappers><properties resource="jdbc.properties"/>  
  46. <mappers>
  47.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  48. </mappers><properties resource="jdbc.properties"/>5.1.49  
  49. <mappers>
  50.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  51. </mappers><properties resource="jdbc.properties"/>  
  52. <mappers>
  53.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  54. </mappers><properties resource="jdbc.properties"/>  
  55. <mappers>
  56.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  57. </mappers><properties resource="jdbc.properties"/>  
  58. <mappers>
  59.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  60. </mappers><properties resource="jdbc.properties"/><mappers>
  61.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  62. </mappers>org.projectlombok  
  63. <mappers>
  64.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  65. </mappers><properties resource="jdbc.properties"/>  
  66. <mappers>
  67.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  68. </mappers><properties resource="jdbc.properties"/>lombok  
  69. <mappers>
  70.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  71. </mappers><properties resource="jdbc.properties"/>  
  72. <mappers>
  73.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  74. </mappers><properties resource="jdbc.properties"/>1.18.4  
  75. <mappers>
  76.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  77. </mappers><properties resource="jdbc.properties"/>  
  78. <mappers>
  79.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  80. </mappers><properties resource="jdbc.properties"/>  
  81. <mappers>
  82.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  83. </mappers><properties resource="jdbc.properties"/>  
  84. <mappers>
  85.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  86. </mappers><properties resource="jdbc.properties"/><mappers>
  87.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  88. </mappers>junit  
  89. <mappers>
  90.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  91. </mappers><properties resource="jdbc.properties"/>  
  92. <mappers>
  93.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  94. </mappers><properties resource="jdbc.properties"/>junit  
  95. <mappers>
  96.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  97. </mappers><properties resource="jdbc.properties"/>  
  98. <mappers>
  99.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  100. </mappers><properties resource="jdbc.properties"/>4.12  
  101. <mappers>
  102.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  103. </mappers><properties resource="jdbc.properties"/>  
  104. <mappers>
  105.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  106. </mappers><properties resource="jdbc.properties"/>
复制代码

  • 必要写一个本身的config.xml文件,在里面配置一些信息,driver,url ,password,username
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/><mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>
复制代码

  • 必要编写Configuration类,对 本身的config.xml文件 进行解析,得到一个数据库连接
  1. public class ZyConfiguration {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//属性 类加载器<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>private ClassLoader classLoader =  
  6. <mappers>
  7.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  8. </mappers><properties resource="jdbc.properties"/>  
  9. <mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers><properties resource="jdbc.properties"/>ClassLoader.getSystemClassLoader();<mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers>//读取xml文件信息并处理<mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers>public Connection build(String resource) {  
  16. <mappers>
  17.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  18. </mappers><properties resource="jdbc.properties"/>  Connection connection = null;  
  19. <mappers>
  20.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  21. </mappers><properties resource="jdbc.properties"/>  
  22. <mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers><properties resource="jdbc.properties"/><mappers>
  25.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  26. </mappers>//加载配置文件,获取对应的InputStream流  
  27. <mappers>
  28.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  29. </mappers><properties resource="jdbc.properties"/>  InputStream resourceAsStream =  
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>  
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/><mappers>
  36.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  37. </mappers>classLoader.getResourceAsStream(resource);  
  38. <mappers>
  39.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  40. </mappers><properties resource="jdbc.properties"/>  //解析xml文件  
  41. <mappers>
  42.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  43. </mappers><properties resource="jdbc.properties"/>  SAXReader reader = new SAXReader();  
  44. <mappers>
  45.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  46. </mappers><properties resource="jdbc.properties"/>  try {  
  47. <mappers>
  48.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  49. </mappers><properties resource="jdbc.properties"/>  
  50. <mappers>
  51.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  52. </mappers><properties resource="jdbc.properties"/>Document document = reader.read(resourceAsStream);  
  53. <mappers>
  54.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  55. </mappers><properties resource="jdbc.properties"/>  
  56. <mappers>
  57.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  58. </mappers><properties resource="jdbc.properties"/>Element root = document.getRootElement();  
  59. <mappers>
  60.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  61. </mappers><properties resource="jdbc.properties"/>  
  62. <mappers>
  63.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  64. </mappers><properties resource="jdbc.properties"/>//解析rootElement  
  65. <mappers>
  66.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  67. </mappers><properties resource="jdbc.properties"/>  
  68. <mappers>
  69.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  70. </mappers><properties resource="jdbc.properties"/>System.out.println("root= "+root);  
  71. <mappers>
  72.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  73. </mappers><properties resource="jdbc.properties"/>  
  74. <mappers>
  75.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  76. </mappers><properties resource="jdbc.properties"/>return evalDataSource(root);  
  77. <mappers>
  78.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  79. </mappers><properties resource="jdbc.properties"/>  } catch (DocumentException e) {  
  80. <mappers>
  81.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  82. </mappers><properties resource="jdbc.properties"/>  
  83. <mappers>
  84.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  85. </mappers><properties resource="jdbc.properties"/>throw new RuntimeException(e);  
  86. <mappers>
  87.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  88. </mappers><properties resource="jdbc.properties"/>  }<mappers>
  89.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  90. </mappers>}<mappers>
  91.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  92. </mappers>//解析xml文件 并返回一个连接<mappers>
  93.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  94. </mappers>private Connection evalDataSource(Element node) {  
  95. <mappers>
  96.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  97. </mappers><properties resource="jdbc.properties"/>  Iterator property = node.elementIterator("property");  
  98. <mappers>
  99.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  100. </mappers><properties resource="jdbc.properties"/>  String driverClassName = null;  
  101. <mappers>
  102.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  103. </mappers><properties resource="jdbc.properties"/>  String url = null;  
  104. <mappers>
  105.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  106. </mappers><properties resource="jdbc.properties"/>  String username = null;  
  107. <mappers>
  108.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  109. </mappers><properties resource="jdbc.properties"/>  String password = null;  
  110. <mappers>
  111.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  112. </mappers><properties resource="jdbc.properties"/>  //遍历node子节点 获取属性值  
  113. <mappers>
  114.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  115. </mappers><properties resource="jdbc.properties"/>  while(property.hasNext()){  
  116. <mappers>
  117.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  118. </mappers><properties resource="jdbc.properties"/>  
  119. <mappers>
  120.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  121. </mappers><properties resource="jdbc.properties"/>Element pro = (Element)property.next();  
  122. <mappers>
  123.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  124. </mappers><properties resource="jdbc.properties"/>  
  125. <mappers>
  126.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  127. </mappers><properties resource="jdbc.properties"/>String name = pro.attributeValue("name");  
  128. <mappers>
  129.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  130. </mappers><properties resource="jdbc.properties"/>  
  131. <mappers>
  132.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  133. </mappers><properties resource="jdbc.properties"/>String value = pro.attributeValue("value");  
  134. <mappers>
  135.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  136. </mappers><properties resource="jdbc.properties"/>  
  137. <mappers>
  138.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  139. </mappers><properties resource="jdbc.properties"/>//判定是否得到了name 和 value  
  140. <mappers>
  141.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  142. </mappers><properties resource="jdbc.properties"/>  
  143. <mappers>
  144.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  145. </mappers><properties resource="jdbc.properties"/>if (name == null || value == null){  
  146. <mappers>
  147.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  148. </mappers><properties resource="jdbc.properties"/>  
  149. <mappers>
  150.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  151. </mappers><properties resource="jdbc.properties"/><mappers>
  152.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  153. </mappers>throw new RuntimeException("property 节点没有设置name 或 value属性");  
  154. <mappers>
  155.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  156. </mappers><properties resource="jdbc.properties"/>  
  157. <mappers>
  158.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  159. </mappers><properties resource="jdbc.properties"/>}  
  160. <mappers>
  161.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  162. </mappers><properties resource="jdbc.properties"/>  
  163. <mappers>
  164.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  165. </mappers><properties resource="jdbc.properties"/>switch (name){  
  166. <mappers>
  167.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  168. </mappers><properties resource="jdbc.properties"/>  
  169. <mappers>
  170.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  171. </mappers><properties resource="jdbc.properties"/><mappers>
  172.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  173. </mappers>case "driverClassName":  
  174. <mappers>
  175.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  176. </mappers><properties resource="jdbc.properties"/>  
  177. <mappers>
  178.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  179. </mappers><properties resource="jdbc.properties"/>  
  180. <mappers>
  181.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  182. </mappers><properties resource="jdbc.properties"/>  driverClassName = value;  
  183. <mappers>
  184.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  185. </mappers><properties resource="jdbc.properties"/>  
  186. <mappers>
  187.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  188. </mappers><properties resource="jdbc.properties"/>  
  189. <mappers>
  190.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  191. </mappers><properties resource="jdbc.properties"/>  break;  
  192. <mappers>
  193.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  194. </mappers><properties resource="jdbc.properties"/>  
  195. <mappers>
  196.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  197. </mappers><properties resource="jdbc.properties"/><mappers>
  198.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  199. </mappers>case "url":  
  200. <mappers>
  201.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  202. </mappers><properties resource="jdbc.properties"/>  
  203. <mappers>
  204.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  205. </mappers><properties resource="jdbc.properties"/>  
  206. <mappers>
  207.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  208. </mappers><properties resource="jdbc.properties"/>  url = value;  
  209. <mappers>
  210.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  211. </mappers><properties resource="jdbc.properties"/>  
  212. <mappers>
  213.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  214. </mappers><properties resource="jdbc.properties"/>  
  215. <mappers>
  216.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  217. </mappers><properties resource="jdbc.properties"/>  break;  
  218. <mappers>
  219.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  220. </mappers><properties resource="jdbc.properties"/>  
  221. <mappers>
  222.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  223. </mappers><properties resource="jdbc.properties"/><mappers>
  224.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  225. </mappers>case "username":  
  226. <mappers>
  227.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  228. </mappers><properties resource="jdbc.properties"/>  
  229. <mappers>
  230.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  231. </mappers><properties resource="jdbc.properties"/>  
  232. <mappers>
  233.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  234. </mappers><properties resource="jdbc.properties"/>  username = value;  
  235. <mappers>
  236.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  237. </mappers><properties resource="jdbc.properties"/>  
  238. <mappers>
  239.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  240. </mappers><properties resource="jdbc.properties"/>  
  241. <mappers>
  242.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  243. </mappers><properties resource="jdbc.properties"/>  break;  
  244. <mappers>
  245.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  246. </mappers><properties resource="jdbc.properties"/>  
  247. <mappers>
  248.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  249. </mappers><properties resource="jdbc.properties"/><mappers>
  250.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  251. </mappers>case "password":  
  252. <mappers>
  253.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  254. </mappers><properties resource="jdbc.properties"/>  
  255. <mappers>
  256.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  257. </mappers><properties resource="jdbc.properties"/>  
  258. <mappers>
  259.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  260. </mappers><properties resource="jdbc.properties"/>  password = value;  
  261. <mappers>
  262.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  263. </mappers><properties resource="jdbc.properties"/>  
  264. <mappers>
  265.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  266. </mappers><properties resource="jdbc.properties"/>  
  267. <mappers>
  268.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  269. </mappers><properties resource="jdbc.properties"/>  break;  
  270. <mappers>
  271.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  272. </mappers><properties resource="jdbc.properties"/>  
  273. <mappers>
  274.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  275. </mappers><properties resource="jdbc.properties"/><mappers>
  276.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  277. </mappers>default:  
  278. <mappers>
  279.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  280. </mappers><properties resource="jdbc.properties"/>  
  281. <mappers>
  282.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  283. </mappers><properties resource="jdbc.properties"/>  
  284. <mappers>
  285.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  286. </mappers><properties resource="jdbc.properties"/>  throw new RuntimeException("属性名没有匹配到");  
  287. <mappers>
  288.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  289. </mappers><properties resource="jdbc.properties"/>  
  290. <mappers>
  291.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  292. </mappers><properties resource="jdbc.properties"/>}  
  293. <mappers>
  294.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  295. </mappers><properties resource="jdbc.properties"/>  }  
  296. <mappers>
  297.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  298. </mappers><properties resource="jdbc.properties"/>  Connection connection = null;  
  299. <mappers>
  300.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  301. </mappers><properties resource="jdbc.properties"/>  try {  
  302. <mappers>
  303.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  304. </mappers><properties resource="jdbc.properties"/>  
  305. <mappers>
  306.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  307. </mappers><properties resource="jdbc.properties"/>Class.forName(driverClassName);  
  308. <mappers>
  309.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  310. </mappers><properties resource="jdbc.properties"/>  
  311. <mappers>
  312.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  313. </mappers><properties resource="jdbc.properties"/>connection = DriverManager.getConnection(url, username, password);  
  314. <mappers>
  315.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  316. </mappers><properties resource="jdbc.properties"/>  } catch (Exception e) {  
  317. <mappers>
  318.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  319. </mappers><properties resource="jdbc.properties"/>  
  320. <mappers>
  321.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  322. </mappers><properties resource="jdbc.properties"/>throw new RuntimeException(e);  
  323. <mappers>
  324.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  325. </mappers><properties resource="jdbc.properties"/>  }  
  326. <mappers>
  327.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  328. </mappers><properties resource="jdbc.properties"/>  return connection;<mappers>
  329.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  330. </mappers>}}
复制代码
编写实行器,输入SQL语句,完成操纵

思绪


  • 必要写一个实体类,对应monster表
  • 编写接口executor
  • 实现接口,编写本身的实行器
  • 必要一个 本身的Configuration类 返回连接,通过连接对数据库进行操纵
实现


  • 必要写一个实体类,对应monster表
  1. @Setter@Getter@ToString@NoArgsConstructor@AllArgsConstructorpublic class Monster {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>private Integer id;<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>private Integer age;<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>private String name;<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>private String email;<mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers>private Date birthday;<mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers>private double salary;<mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers>private Integer gender;}
复制代码

  • 编写接口executor
  1. public interface Executor {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>public  T query(String statement,Object parameter);}
复制代码

  • 实现接口,编写本身的实行器
  1. public class ZyExecutor implements Executor{<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>private ZyConfiguration zyConfiguration = new ZyConfiguration();<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>@Override<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>public  T query(String sql, Object parameter) {  
  8. <mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers><properties resource="jdbc.properties"/>  Connection connection = getConnection();  
  11. <mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers><properties resource="jdbc.properties"/>  //查询返回的结果集  
  14. <mappers>
  15.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  16. </mappers><properties resource="jdbc.properties"/>  ResultSet set = null;  
  17. <mappers>
  18.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  19. </mappers><properties resource="jdbc.properties"/>  PreparedStatement pre = null;  
  20. <mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers><properties resource="jdbc.properties"/>  try {  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/>pre = connection.prepareStatement(sql);  
  29. <mappers>
  30.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  31. </mappers><properties resource="jdbc.properties"/>  
  32. <mappers>
  33.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  34. </mappers><properties resource="jdbc.properties"/>//设置参数,如果参数多,用数组处理  
  35. <mappers>
  36.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  37. </mappers><properties resource="jdbc.properties"/>  
  38. <mappers>
  39.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  40. </mappers><properties resource="jdbc.properties"/>pre.setString(1, parameter.toString());  
  41. <mappers>
  42.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  43. </mappers><properties resource="jdbc.properties"/>  
  44. <mappers>
  45.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  46. </mappers><properties resource="jdbc.properties"/>set = pre.executeQuery();  
  47. <mappers>
  48.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  49. </mappers><properties resource="jdbc.properties"/>  
  50. <mappers>
  51.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  52. </mappers><properties resource="jdbc.properties"/>//把set数据封装到对象 -- monster  
  53. <mappers>
  54.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  55. </mappers><properties resource="jdbc.properties"/>  
  56. <mappers>
  57.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  58. </mappers><properties resource="jdbc.properties"/>Monster monster = new Monster();//简化处理 认为返回的结果就是一个monster记录  
  59. <mappers>
  60.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  61. </mappers><properties resource="jdbc.properties"/>  
  62. <mappers>
  63.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  64. </mappers><properties resource="jdbc.properties"/>//遍历结果集  
  65. <mappers>
  66.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  67. </mappers><properties resource="jdbc.properties"/>  
  68. <mappers>
  69.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  70. </mappers><properties resource="jdbc.properties"/>while(set.next()){  
  71. <mappers>
  72.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  73. </mappers><properties resource="jdbc.properties"/>  
  74. <mappers>
  75.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  76. </mappers><properties resource="jdbc.properties"/><mappers>
  77.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  78. </mappers>monster.setId(set.getInt("id"));  
  79. <mappers>
  80.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  81. </mappers><properties resource="jdbc.properties"/>  
  82. <mappers>
  83.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  84. </mappers><properties resource="jdbc.properties"/><mappers>
  85.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  86. </mappers>monster.setName(set.getString("name"));  
  87. <mappers>
  88.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  89. </mappers><properties resource="jdbc.properties"/>  
  90. <mappers>
  91.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  92. </mappers><properties resource="jdbc.properties"/><mappers>
  93.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  94. </mappers>monster.setEmail(set.getString("email"));  
  95. <mappers>
  96.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  97. </mappers><properties resource="jdbc.properties"/>  
  98. <mappers>
  99.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  100. </mappers><properties resource="jdbc.properties"/><mappers>
  101.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  102. </mappers>monster.setAge(set.getInt("age"));  
  103. <mappers>
  104.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  105. </mappers><properties resource="jdbc.properties"/>  
  106. <mappers>
  107.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  108. </mappers><properties resource="jdbc.properties"/><mappers>
  109.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  110. </mappers>monster.setGender(set.getInt("gender"));  
  111. <mappers>
  112.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  113. </mappers><properties resource="jdbc.properties"/>  
  114. <mappers>
  115.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  116. </mappers><properties resource="jdbc.properties"/><mappers>
  117.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  118. </mappers>monster.setBirthday(set.getDate("birthday"));  
  119. <mappers>
  120.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  121. </mappers><properties resource="jdbc.properties"/>  
  122. <mappers>
  123.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  124. </mappers><properties resource="jdbc.properties"/><mappers>
  125.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  126. </mappers>monster.setSalary(set.getDouble("salary"));  
  127. <mappers>
  128.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  129. </mappers><properties resource="jdbc.properties"/>  
  130. <mappers>
  131.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  132. </mappers><properties resource="jdbc.properties"/>}  
  133. <mappers>
  134.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  135. </mappers><properties resource="jdbc.properties"/>  
  136. <mappers>
  137.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  138. </mappers><properties resource="jdbc.properties"/>return (T)monster;  
  139. <mappers>
  140.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  141. </mappers><properties resource="jdbc.properties"/>  } catch (SQLException e) {  
  142. <mappers>
  143.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  144. </mappers><properties resource="jdbc.properties"/>  
  145. <mappers>
  146.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  147. </mappers><properties resource="jdbc.properties"/>throw new RuntimeException(e);  
  148. <mappers>
  149.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  150. </mappers><properties resource="jdbc.properties"/>  }finally {  
  151. <mappers>
  152.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  153. </mappers><properties resource="jdbc.properties"/>  
  154. <mappers>
  155.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  156. </mappers><properties resource="jdbc.properties"/>try {  
  157. <mappers>
  158.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  159. </mappers><properties resource="jdbc.properties"/>  
  160. <mappers>
  161.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  162. </mappers><properties resource="jdbc.properties"/><mappers>
  163.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  164. </mappers>if (set != null) {  
  165. <mappers>
  166.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  167. </mappers><properties resource="jdbc.properties"/>  
  168. <mappers>
  169.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  170. </mappers><properties resource="jdbc.properties"/>  
  171. <mappers>
  172.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  173. </mappers><properties resource="jdbc.properties"/>  set.close();  
  174. <mappers>
  175.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  176. </mappers><properties resource="jdbc.properties"/>  
  177. <mappers>
  178.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  179. </mappers><properties resource="jdbc.properties"/><mappers>
  180.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  181. </mappers>}  
  182. <mappers>
  183.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  184. </mappers><properties resource="jdbc.properties"/>  
  185. <mappers>
  186.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  187. </mappers><properties resource="jdbc.properties"/><mappers>
  188.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  189. </mappers>if (pre != null) {  
  190. <mappers>
  191.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  192. </mappers><properties resource="jdbc.properties"/>  
  193. <mappers>
  194.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  195. </mappers><properties resource="jdbc.properties"/>  
  196. <mappers>
  197.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  198. </mappers><properties resource="jdbc.properties"/>  pre.close();  
  199. <mappers>
  200.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  201. </mappers><properties resource="jdbc.properties"/>  
  202. <mappers>
  203.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  204. </mappers><properties resource="jdbc.properties"/><mappers>
  205.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  206. </mappers>}  
  207. <mappers>
  208.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  209. </mappers><properties resource="jdbc.properties"/>  
  210. <mappers>
  211.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  212. </mappers><properties resource="jdbc.properties"/><mappers>
  213.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  214. </mappers>if (connection != null) {  
  215. <mappers>
  216.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  217. </mappers><properties resource="jdbc.properties"/>  
  218. <mappers>
  219.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  220. </mappers><properties resource="jdbc.properties"/>  
  221. <mappers>
  222.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  223. </mappers><properties resource="jdbc.properties"/>  connection.close();  
  224. <mappers>
  225.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  226. </mappers><properties resource="jdbc.properties"/>  
  227. <mappers>
  228.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  229. </mappers><properties resource="jdbc.properties"/><mappers>
  230.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  231. </mappers>}  
  232. <mappers>
  233.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  234. </mappers><properties resource="jdbc.properties"/>  
  235. <mappers>
  236.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  237. </mappers><properties resource="jdbc.properties"/>} catch (Exception e) {  
  238. <mappers>
  239.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  240. </mappers><properties resource="jdbc.properties"/>  
  241. <mappers>
  242.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  243. </mappers><properties resource="jdbc.properties"/><mappers>
  244.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  245. </mappers>throw new RuntimeException(e);  
  246. <mappers>
  247.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  248. </mappers><properties resource="jdbc.properties"/>  
  249. <mappers>
  250.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  251. </mappers><properties resource="jdbc.properties"/>}  
  252. <mappers>
  253.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  254. </mappers><properties resource="jdbc.properties"/>  }  
  255. <mappers>
  256.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  257. </mappers><properties resource="jdbc.properties"/>  
  258. <mappers>
  259.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  260. </mappers><properties resource="jdbc.properties"/>}<mappers>
  261.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  262. </mappers>public Connection getConnection(){//Configuration类 返回连接,通过连接对数据库进行操纵  
  263. <mappers>
  264.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  265. </mappers><properties resource="jdbc.properties"/> return zyConfiguration.build("zy_mybatis.xml");<mappers>
  266.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  267. </mappers>}}
复制代码

  • 必要一个 本身的Configuration类 返回连接,通过连接对数据库进行操纵
将Sqlsession封装到实行器

思绪


  • 必要写本身的Sqlsession类,它是搭建连接和实行器之间的桥梁,里面封装有 实行器 和 配置文件 以及 操纵DB 的具体方法
  • 写一个selectOne方法 ,SelectOne() 返回一条记录,一条记录对应一个Monster对象
实现


  • 必要写本身的Sqlsession类,它是搭建连接和实行器之间的桥梁,里面封装有 实行器 和 配置文件 以及 操纵DB 的具体方法
  1. public class ZySqlSession {//搭建连接和实行器之间的桥梁<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//实行器<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>private Executor executor = new ZyExecutor();<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>//配置<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>private ZyConfiguration zyConfiguration = new ZyConfiguration();<mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers>//操纵DB 的具体方法<mappers>
  12.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  13. </mappers>//SelectOne 返回一条记录-对象<mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers>public  T selectOne(String statement,Object parameter){  
  16. <mappers>
  17.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  18. </mappers><properties resource="jdbc.properties"/>  return executor.query(statement,parameter);<mappers>
  19.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  20. </mappers>}}
复制代码

  • 写一个selectOne方法 ,SelectOne() 返回一条记录,一条记录对应一个Monster对象
  1. //操纵DB 的具体方法<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//SelectOne 返回一条记录-对象<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>public  T selectOne(String statement,Object parameter){  
  6. <mappers>
  7.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  8. </mappers><properties resource="jdbc.properties"/>  return executor.query(statement,parameter);<mappers>
  9.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  10. </mappers>}
复制代码

开发Mapper接口和Mapper.xml

思绪


  • 编写MonsterMapper接口,里面有方法getMonsterById(Integer id)根据id返回一个monster对象
  • 在resources下编写对应的monsterMapper.xml(简化:由于在resources 编译时会在类路径下比较好写)
  • monsterMapper.xml 编写具体的sql语句,并指定语句类型,id,resultType(和原生Mybatis一样)
实现


  • 编写MonsterMapper接口,里面有方法getMonsterById(Integer id)根据id返回一个monster对象
  1. public interface MonsterMapper {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>public Monster getMonsterById(Integer id);}
复制代码

  • 在resources下编写对应的monsterMapper.xml(简化:由于在resources 编译时会在类路径下比较好写)
  • monsterMapper.xml 编写具体的sql语句,并指定语句类型,id,resultType(和原生Mybatis一样)
  1.   
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/><mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>SELECT * FROM monster WHERE id = ?<mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers>
复制代码
开发MapperBean,可以和Mapper接口相映射

思绪


  • 开发 Function类 ,用于记录对应的Mapper的方法信息,好比sql类型,方法名,实行的sql语句,返回类型,入参类型
  • 开发 MapperBean类,记录接口信息和接口下的所有方法
  • Function类 对应 monsterMapper.xml中的信息
  • MapperBean类 对应 MonsterMapper 接口中的信息
实现


  • 开发 Function类 ,用于记录对应的Mapper的方法信息,好比sql类型,方法名,实行的sql语句,返回类型,入参类型
  1. //对应 monsterMapper.xml中的信息public class Function {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>private String sqlType;//sql类型,好比select,insert,update,delete<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>private String funcName;//方法名<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>private String sql;//实行的sql语句<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>private Object resultType;//返回类型<mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers>private String parameterType;//入参类型}
复制代码

  • 开发 MapperBean类,记录接口信息和接口下的所有方法
  1. //对应 MonsterMapper 接口中的信息public class MapperBean {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>private String interfaceName;//接口名<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>//<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>接口下的所有方法<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>private List functions;}
复制代码

  • Function类 对应 monsterMapper.xml中的信息
  • MapperBean类 对应 MonsterMapper 接口中的信息
在Configuration中解析MapperXML获取MapperBean对象

思绪


  • 在Configuration 添加方法readMapper(String path)
  • 通过 path 读取接口对应的Mapper方法
  • 保存接口下所有的方法信息
  • 封装成 MapperBean对象
实现


  • 在Configuration 添加方法readMapper(String path)
  • 通过 path 读取接口对应的Mapper方法
  • 保存接口下所有的方法信息
  • 封装成 MapperBean对象
  1. //解析MapperXML获取MapperBean对象<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>//path = xml的路径+文件名 是从类的加载路径计算的(如果放在resource目录下 之间传xml文件名即可)<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>public MapperBean readMapper(String path) {  
  6. <mappers>
  7.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  8. </mappers><properties resource="jdbc.properties"/>  MapperBean mapperBean = new MapperBean();  
  9. <mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers><properties resource="jdbc.properties"/>  InputStream resourceAsStream = classLoader.getResourceAsStream(path);  
  12. <mappers>
  13.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  14. </mappers><properties resource="jdbc.properties"/>  SAXReader reader = new SAXReader();  
  15. <mappers>
  16.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  17. </mappers><properties resource="jdbc.properties"/>  try {  
  18. <mappers>
  19.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  20. </mappers><properties resource="jdbc.properties"/>  
  21. <mappers>
  22.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  23. </mappers><properties resource="jdbc.properties"/>Document document = reader.read(resourceAsStream);  
  24. <mappers>
  25.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  26. </mappers><properties resource="jdbc.properties"/>  
  27. <mappers>
  28.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  29. </mappers><properties resource="jdbc.properties"/>Element root = document.getRootElement();  
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>  
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/>String namespace = root.attributeValue("namespace");  
  36. <mappers>
  37.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  38. </mappers><properties resource="jdbc.properties"/>  
  39. <mappers>
  40.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  41. </mappers><properties resource="jdbc.properties"/>mapperBean.setInterfaceName(namespace);  
  42. <mappers>
  43.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  44. </mappers><properties resource="jdbc.properties"/>  
  45. <mappers>
  46.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  47. </mappers><properties resource="jdbc.properties"/>List list = new ArrayList();//保存接口下所有的方法信息  
  48. <mappers>
  49.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  50. </mappers><properties resource="jdbc.properties"/>  
  51. <mappers>
  52.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  53. </mappers><properties resource="jdbc.properties"/>//得到root的迭代器  
  54. <mappers>
  55.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  56. </mappers><properties resource="jdbc.properties"/>  
  57. <mappers>
  58.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  59. </mappers><properties resource="jdbc.properties"/>Iterator iterator = root.elementIterator();  
  60. <mappers>
  61.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  62. </mappers><properties resource="jdbc.properties"/>  
  63. <mappers>
  64.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  65. </mappers><properties resource="jdbc.properties"/>while(iterator.hasNext()){  
  66. <mappers>
  67.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  68. </mappers><properties resource="jdbc.properties"/>  
  69. <mappers>
  70.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  71. </mappers><properties resource="jdbc.properties"/><mappers>
  72.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  73. </mappers>Element e = (Element)iterator.next();  
  74. <mappers>
  75.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  76. </mappers><properties resource="jdbc.properties"/>  
  77. <mappers>
  78.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  79. </mappers><properties resource="jdbc.properties"/><mappers>
  80.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  81. </mappers>String sqlType = e.getName().trim();  
  82. <mappers>
  83.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  84. </mappers><properties resource="jdbc.properties"/>  
  85. <mappers>
  86.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  87. </mappers><properties resource="jdbc.properties"/><mappers>
  88.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  89. </mappers>String sql = e.getText().trim();  
  90. <mappers>
  91.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  92. </mappers><properties resource="jdbc.properties"/>  
  93. <mappers>
  94.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  95. </mappers><properties resource="jdbc.properties"/><mappers>
  96.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  97. </mappers>String funcName = e.attributeValue("id");  
  98. <mappers>
  99.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  100. </mappers><properties resource="jdbc.properties"/>  
  101. <mappers>
  102.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  103. </mappers><properties resource="jdbc.properties"/><mappers>
  104.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  105. </mappers>String resultType = e.attributeValue("resultType");  
  106. <mappers>
  107.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  108. </mappers><properties resource="jdbc.properties"/>  
  109. <mappers>
  110.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  111. </mappers><properties resource="jdbc.properties"/><mappers>
  112.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  113. </mappers>//ResultType 返回的是一个Object对象 ->反射  
  114. <mappers>
  115.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  116. </mappers><properties resource="jdbc.properties"/>  
  117. <mappers>
  118.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  119. </mappers><properties resource="jdbc.properties"/><mappers>
  120.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  121. </mappers>Object instance = Class.forName(resultType).newInstance();  
  122. <mappers>
  123.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  124. </mappers><properties resource="jdbc.properties"/>  
  125. <mappers>
  126.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  127. </mappers><properties resource="jdbc.properties"/><mappers>
  128.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  129. </mappers>//封装 function 对象  
  130. <mappers>
  131.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  132. </mappers><properties resource="jdbc.properties"/>  
  133. <mappers>
  134.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  135. </mappers><properties resource="jdbc.properties"/><mappers>
  136.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  137. </mappers>Function function = new Function();  
  138. <mappers>
  139.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  140. </mappers><properties resource="jdbc.properties"/>  
  141. <mappers>
  142.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  143. </mappers><properties resource="jdbc.properties"/><mappers>
  144.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  145. </mappers>function.setSql(sql);  
  146. <mappers>
  147.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  148. </mappers><properties resource="jdbc.properties"/>  
  149. <mappers>
  150.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  151. </mappers><properties resource="jdbc.properties"/><mappers>
  152.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  153. </mappers>function.setSqlType(sqlType);  
  154. <mappers>
  155.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  156. </mappers><properties resource="jdbc.properties"/>  
  157. <mappers>
  158.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  159. </mappers><properties resource="jdbc.properties"/><mappers>
  160.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  161. </mappers>function.setFuncName(funcName);  
  162. <mappers>
  163.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  164. </mappers><properties resource="jdbc.properties"/>  
  165. <mappers>
  166.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  167. </mappers><properties resource="jdbc.properties"/><mappers>
  168.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  169. </mappers>function.setResultType(instance);  
  170. <mappers>
  171.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  172. </mappers><properties resource="jdbc.properties"/>  
  173. <mappers>
  174.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  175. </mappers><properties resource="jdbc.properties"/><mappers>
  176.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  177. </mappers>//将封装好的function对象 放入 list中  
  178. <mappers>
  179.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  180. </mappers><properties resource="jdbc.properties"/>  
  181. <mappers>
  182.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  183. </mappers><properties resource="jdbc.properties"/><mappers>
  184.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  185. </mappers>list.add(function);  
  186. <mappers>
  187.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  188. </mappers><properties resource="jdbc.properties"/>  
  189. <mappers>
  190.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  191. </mappers><properties resource="jdbc.properties"/><mappers>
  192.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  193. </mappers>mapperBean.setFunctions(list);  
  194. <mappers>
  195.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  196. </mappers><properties resource="jdbc.properties"/>  
  197. <mappers>
  198.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  199. </mappers><properties resource="jdbc.properties"/>}  
  200. <mappers>
  201.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  202. </mappers><properties resource="jdbc.properties"/>  } catch (Exception e) {  
  203. <mappers>
  204.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  205. </mappers><properties resource="jdbc.properties"/>  
  206. <mappers>
  207.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  208. </mappers><properties resource="jdbc.properties"/>throw new RuntimeException(e);  
  209. <mappers>
  210.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  211. </mappers><properties resource="jdbc.properties"/>  }  
  212. <mappers>
  213.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  214. </mappers><properties resource="jdbc.properties"/>  return mapperBean;<mappers>
  215.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  216. </mappers>}
复制代码
动态代理Mapper方法

思绪


  • 在SqlSession中添加方法 getMapper 输入一个Class类型,返回mapper的动态代理对象
  • 编写动态代理类 实现 InvocationHandler 接口
  • 取出mapperBean的functions 遍历
  • 判定 当前要实行的方法和function.getFunctionName是否一致
  • 调用方法返回 动态代理对象
  • 编写SqlSessionFactory 会话工厂,可以返回SqlSession
实现


  • 编写动态代理类 实现 InvocationHandler 接口
  • 在SqlSession中添加方法 getMapper 输入一个Class类型,返回mapper的动态代理对象
  1. //返回mapper的动态代理对象<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>public  T getMapper(Class clazz){  
  4. <mappers>
  5.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  6. </mappers><properties resource="jdbc.properties"/>  return (T) Proxy.newProxyInstance(  
  7. <mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers><properties resource="jdbc.properties"/>  
  10. <mappers>
  11.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  12. </mappers><properties resource="jdbc.properties"/><mappers>
  13.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  14. </mappers>clazz.getClassLoader(),  
  15. <mappers>
  16.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  17. </mappers><properties resource="jdbc.properties"/>  
  18. <mappers>
  19.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  20. </mappers><properties resource="jdbc.properties"/><mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers>new Class[]{clazz},  
  23. <mappers>
  24.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  25. </mappers><properties resource="jdbc.properties"/>  
  26. <mappers>
  27.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  28. </mappers><properties resource="jdbc.properties"/><mappers>
  29.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  30. </mappers>new ZyMapperProxy(zyConfiguration,clazz,this));<mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers>}
复制代码

  • 取出mapperBean的functions 遍历
  • 判定 当前要实行的方法和function.getFunctionName是否一致
  • 调用方法返回 动态代理对象
  1. public class ZyMapperProxy implements InvocationHandler {<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>private ZySqlSession zySqlSession;<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>private String mapperFile;<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>private ZyConfiguration zyConfiguration;<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>public ZyMapperProxy(ZySqlSession zySqlSession, Class clazz, ZyConfiguration zyConfiguration) {  
  10. <mappers>
  11.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  12. </mappers><properties resource="jdbc.properties"/>  this.zySqlSession = zySqlSession;  
  13. <mappers>
  14.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  15. </mappers><properties resource="jdbc.properties"/>  this.zyConfiguration = zyConfiguration;  
  16. <mappers>
  17.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  18. </mappers><properties resource="jdbc.properties"/>  this.mapperFile = clazz.getSimpleName() + ".xml";<mappers>
  19.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  20. </mappers>}<mappers>
  21.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  22. </mappers>//当实行Mapper接口的代理对象方法时,会实行到invoke方法<mappers>
  23.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  24. </mappers>@Override<mappers>
  25.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  26. </mappers>public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
  27. <mappers>
  28.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  29. </mappers><properties resource="jdbc.properties"/>  MapperBean mapperBean = zyConfiguration.readMapper(this.mapperFile);  
  30. <mappers>
  31.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  32. </mappers><properties resource="jdbc.properties"/>  //判定是否为当前xml文件对应的接口  
  33. <mappers>
  34.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  35. </mappers><properties resource="jdbc.properties"/>  if (!method.getDeclaringClass().getName().equals(mapperBean.getInterfaceName())){  
  36. <mappers>
  37.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  38. </mappers><properties resource="jdbc.properties"/>  
  39. <mappers>
  40.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  41. </mappers><properties resource="jdbc.properties"/>return null;  
  42. <mappers>
  43.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  44. </mappers><properties resource="jdbc.properties"/>  }  
  45. <mappers>
  46.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  47. </mappers><properties resource="jdbc.properties"/>  //取出mapperBean的functions  
  48. <mappers>
  49.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  50. </mappers><properties resource="jdbc.properties"/>  List functions = mapperBean.getFunctions();  
  51. <mappers>
  52.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  53. </mappers><properties resource="jdbc.properties"/>  //判定当前的mapperBean 解析对应的MapperXML后,有方法  
  54. <mappers>
  55.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  56. </mappers><properties resource="jdbc.properties"/>  if (null != functions || 0 != functions.size()){  
  57. <mappers>
  58.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  59. </mappers><properties resource="jdbc.properties"/>  
  60. <mappers>
  61.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  62. </mappers><properties resource="jdbc.properties"/>for (Function function : functions) {  
  63. <mappers>
  64.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  65. </mappers><properties resource="jdbc.properties"/>  
  66. <mappers>
  67.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  68. </mappers><properties resource="jdbc.properties"/><mappers>
  69.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  70. </mappers>//当前要实行的方法和function.getFunctionName  
  71. <mappers>
  72.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  73. </mappers><properties resource="jdbc.properties"/>  
  74. <mappers>
  75.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  76. </mappers><properties resource="jdbc.properties"/><mappers>
  77.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  78. </mappers>if (method.getName().equals(function.getFuncName())){  
  79. <mappers>
  80.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  81. </mappers><properties resource="jdbc.properties"/>  
  82. <mappers>
  83.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  84. </mappers><properties resource="jdbc.properties"/>  
  85. <mappers>
  86.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  87. </mappers><properties resource="jdbc.properties"/>  if ("SELECT".equalsIgnoreCase(function.getSqlType())){  
  88. <mappers>
  89.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  90. </mappers><properties resource="jdbc.properties"/>  
  91. <mappers>
  92.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  93. </mappers><properties resource="jdbc.properties"/>  
  94. <mappers>
  95.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  96. </mappers><properties resource="jdbc.properties"/>  
  97. <mappers>
  98.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  99. </mappers><properties resource="jdbc.properties"/>return zySqlSession.selectOne(function.getSql(),String.valueOf(args[0]));  
  100. <mappers>
  101.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  102. </mappers><properties resource="jdbc.properties"/>  
  103. <mappers>
  104.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  105. </mappers><properties resource="jdbc.properties"/>  
  106. <mappers>
  107.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  108. </mappers><properties resource="jdbc.properties"/>  }  
  109. <mappers>
  110.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  111. </mappers><properties resource="jdbc.properties"/>  
  112. <mappers>
  113.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  114. </mappers><properties resource="jdbc.properties"/><mappers>
  115.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  116. </mappers>}  
  117. <mappers>
  118.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  119. </mappers><properties resource="jdbc.properties"/>  
  120. <mappers>
  121.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  122. </mappers><properties resource="jdbc.properties"/>}  
  123. <mappers>
  124.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  125. </mappers><properties resource="jdbc.properties"/>  }  
  126. <mappers>
  127.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  128. </mappers><properties resource="jdbc.properties"/>  return null;<mappers>
  129.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  130. </mappers>}}
复制代码

  • 编写SqlSessionFactory 会话工厂,可以返回SqlSession
  1. public class ZySqlSessionFactory {  
  2. <mappers>
  3.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  4. </mappers><properties resource="jdbc.properties"/>  public static ZySqlSession open(){  
  5. <mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers><properties resource="jdbc.properties"/>  return new ZySqlSession();<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>}}
复制代码
测试
  1. @Testpublic void openSession(){<mappers>
  2.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  3. </mappers>ZySqlSession zySqlSession = ZySqlSessionFactory.openSession();<mappers>
  4.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  5. </mappers>System.out.println("zySqlSession= "+zySqlSession);<mappers>
  6.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  7. </mappers>MonsterMapper mapper = zySqlSession.getMapper(MonsterMapper.class);<mappers>
  8.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  9. </mappers>Monster monster = mapper.getMonsterById(1);<mappers>
  10.     <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
  11. </mappers>System.out.println("monster= "+monster);}
复制代码
本文学习内容来自韩顺平老师的课程
仅供个人参考学习

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表