• Mybatis的SqlRunner执行流程


     Mybatis的SqlRunner执行流程

    1. SqlRunner exec = new SqlRunner(connection);
    2. Map row = exec.selectOne("SELECT * FROM PRODUCT WHERE PRODUCTID = ?", "FI-SW-01");
    3. connection.close();
    4. assertEquals("FI-SW-01", row.get("PRODUCTID"));

    TypeHandlerRegistry类中TYPE_HANDLER_MAP 的初始化过程

    1. public TypeHandlerRegistry() {
    2. //构造函数里注册系统内置的类型处理器
    3. //以下是为多个类型注册到同一个handler
    4. register(Boolean.class, new BooleanTypeHandler());
    5. register(boolean.class, new BooleanTypeHandler());
    6. register(JdbcType.BOOLEAN, new BooleanTypeHandler());
    7. register(JdbcType.BIT, new BooleanTypeHandler());
    8. register(Byte.class, new ByteTypeHandler());
    9. register(byte.class, new ByteTypeHandler());
    10. register(JdbcType.TINYINT, new ByteTypeHandler());
    11. register(Short.class, new ShortTypeHandler());
    12. register(short.class, new ShortTypeHandler());
    13. register(JdbcType.SMALLINT, new ShortTypeHandler());
    14. register(Integer.class, new IntegerTypeHandler());
    15. register(int.class, new IntegerTypeHandler());
    16. register(JdbcType.INTEGER, new IntegerTypeHandler());
    17. register(Long.class, new LongTypeHandler());
    18. register(long.class, new LongTypeHandler());
    19. register(Float.class, new FloatTypeHandler());
    20. register(float.class, new FloatTypeHandler());
    21. register(JdbcType.FLOAT, new FloatTypeHandler());
    22. register(Double.class, new DoubleTypeHandler());
    23. register(double.class, new DoubleTypeHandler());
    24. register(JdbcType.DOUBLE, new DoubleTypeHandler());
    25. //以下是为同一个类型的多种变种注册到多个不同的handler
    26. register(String.class, new StringTypeHandler());
    27. register(String.class, JdbcType.CHAR, new StringTypeHandler());
    28. register(String.class, JdbcType.CLOB, new ClobTypeHandler());
    29. register(String.class, JdbcType.VARCHAR, new StringTypeHandler());
    30. register(String.class, JdbcType.LONGVARCHAR, new ClobTypeHandler());
    31. register(String.class, JdbcType.NVARCHAR, new NStringTypeHandler());
    32. register(String.class, JdbcType.NCHAR, new NStringTypeHandler());
    33. register(String.class, JdbcType.NCLOB, new NClobTypeHandler());
    34. register(JdbcType.CHAR, new StringTypeHandler());
    35. register(JdbcType.VARCHAR, new StringTypeHandler());
    36. register(JdbcType.CLOB, new ClobTypeHandler());
    37. register(JdbcType.LONGVARCHAR, new ClobTypeHandler());
    38. register(JdbcType.NVARCHAR, new NStringTypeHandler());
    39. register(JdbcType.NCHAR, new NStringTypeHandler());
    40. register(JdbcType.NCLOB, new NClobTypeHandler());
    41. register(Object.class, JdbcType.ARRAY, new ArrayTypeHandler());
    42. register(JdbcType.ARRAY, new ArrayTypeHandler());
    43. register(BigInteger.class, new BigIntegerTypeHandler());
    44. register(JdbcType.BIGINT, new LongTypeHandler());
    45. register(BigDecimal.class, new BigDecimalTypeHandler());
    46. register(JdbcType.REAL, new BigDecimalTypeHandler());
    47. register(JdbcType.DECIMAL, new BigDecimalTypeHandler());
    48. register(JdbcType.NUMERIC, new BigDecimalTypeHandler());
    49. register(Byte[].class, new ByteObjectArrayTypeHandler());
    50. register(Byte[].class, JdbcType.BLOB, new BlobByteObjectArrayTypeHandler());
    51. register(Byte[].class, JdbcType.LONGVARBINARY, new BlobByteObjectArrayTypeHandler());
    52. register(byte[].class, new ByteArrayTypeHandler());
    53. register(byte[].class, JdbcType.BLOB, new BlobTypeHandler());
    54. register(byte[].class, JdbcType.LONGVARBINARY, new BlobTypeHandler());
    55. register(JdbcType.LONGVARBINARY, new BlobTypeHandler());
    56. register(JdbcType.BLOB, new BlobTypeHandler());
    57. register(Object.class, UNKNOWN_TYPE_HANDLER);
    58. register(Object.class, JdbcType.OTHER, UNKNOWN_TYPE_HANDLER);
    59. register(JdbcType.OTHER, UNKNOWN_TYPE_HANDLER);
    60. register(Date.class, new DateTypeHandler());
    61. register(Date.class, JdbcType.DATE, new DateOnlyTypeHandler());
    62. register(Date.class, JdbcType.TIME, new TimeOnlyTypeHandler());
    63. register(JdbcType.TIMESTAMP, new DateTypeHandler());
    64. register(JdbcType.DATE, new DateOnlyTypeHandler());
    65. register(JdbcType.TIME, new TimeOnlyTypeHandler());
    66. register(java.sql.Date.class, new SqlDateTypeHandler());
    67. register(java.sql.Time.class, new SqlTimeTypeHandler());
    68. register(java.sql.Timestamp.class, new SqlTimestampTypeHandler());
    69. // issue #273
    70. register(Character.class, new CharacterTypeHandler());
    71. register(char.class, new CharacterTypeHandler());
    72. }

    回到流程

     

     

     

     

    原始的jdbc代码 

    1. /*
    2. 执行DQL语句
    3. */
    4. import java.sql.*;
    5. import java.util.*;
    6. public class JDBCTest05 {
    7. public static void main(String[] args) {
    8. // 1、注册驱动
    9. // 2、建立连接
    10. // 3、获取数据库操作对象
    11. // 4、执行sql语句
    12. // 5、获取查询结果集
    13. // 6、释放资源
    14. Connection conn = null;
    15. Statement stmt = null;
    16. ResultSet rs = null;
    17. try{
    18. ResourceBundle rb = ResourceBundle.getBundle("jdbc");
    19. String driver = rb.getString("driver");
    20. String url = rb.getString("url");
    21. String user = rb.getString("user");
    22. String password = rb.getString("password");
    23. Class.forName(driver);
    24. conn = DriverManager.getConnection(url,user,password);
    25. stmt = conn.createStatement();
    26. rs = stmt.executeQuery("select empno,ename,sal from emp");
    27. while(rs.next()){
    28. /*
    29. String empno = rs.getString(1);
    30. String ename = rs.getString(2);
    31. String sal = rs.getString(3);
    32. System.out.println(empno + "," + ename + "," + sal);
    33. */
    34. /*
    35. // 按下标取出,程序不健壮
    36. String empno = rs.getString("empno");
    37. String ename = rs.getString("ename");
    38. String sal = rs.getString("sal");
    39. System.out.println(empno + "," + ename + "," + sal);
    40. */
    41. /*
    42. // 以指定的格式取出
    43. int empno = rs.getInt(1);
    44. String ename = rs.getString(2);
    45. double sal = rs.getDouble(3);
    46. System.out.println(empno + "," + ename + "," + (sal + 100));
    47. */
    48. int empno = rs.getInt("empno");
    49. String ename = rs.getString("ename");
    50. double sal = rs.getDouble("sal");
    51. System.out.println(empno + "," + ename + "," + (sal + 200));
    52. }
    53. } catch(Exception e){
    54. e.printStackTrace();
    55. }finally{
    56. if(rs != null){
    57. try{
    58. rs.close();
    59. } catch (Exception e){
    60. e.printStackTrace();
    61. }
    62. }
    63. if(stmt != null){
    64. try{
    65. stmt.close();
    66. } catch (Exception e){
    67. e.printStackTrace();
    68. }
    69. }
    70. if(conn != null){
    71. try{
    72. conn.close();
    73. } catch (Exception e){
    74. e.printStackTrace();
    75. }
    76. }
    77. }
    78. }
    79. }
  • 相关阅读:
    巧家蒙姑文笔社区:和谐社区育新风 用心铺就团结路
    Jenkins 结合 ANT 发送测试报告
    Python---练习:for循环 求1-100的和/所有偶数的和
    Oracle的 dblink 学习笔记
    本地库覆盖glibc的API
    cad图片怎么转换成pdf格式
    计算机视觉基础:【矩阵】矩阵选取子集
    操作系统学习笔记3 | 操作系统简史
    HTML 之 块级元素、行内元素和行内块元素之间的嵌套规则
    【Cadence】配置文件cdsinit和cdsenv的使用
  • 原文地址:https://blog.csdn.net/qq_56800327/article/details/133974859