一、问题汇总
1.prepareStatement对象说明?
1.PreparedStatement是预编译的**,对于批量处理可以大大提高效率. **也叫JDBC存储过程
2.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译的, preparedstatement支持批处理
总体来说有两个原因:
第一是安全、防止sql注入
第二是方便、代码可读性更强,类型转换和设置更加明确,预编译可以减少很多重复的sql
2.特殊的ps类型对应的处理器和java类型是什么样的?
ps类型 | 处理器 | java类型 |
---|---|---|
BigDecimal | BigIntegerTypeHandler | BigInteger |
BinaryStream | BlobByteObjectArrayTypeHandler | Byte[] |
Blob | BlobInputStreamTypeHandler | InputStream |
BinaryStream | BlobTypeHandler | byte[] |
String | CharacterTypeHandler | Character |
Clob | ClobReaderTypeHandler | Reader |
CharacterStream | ClobTypeHandler | String |
int | EnumOrdinalTypeHandler | Enum |
3.TypeHandler体系的结构?
结构:顶层接口是TypeHandler
1.它有四个方法分别是:setParameter(将preparedStatement中的参数转换为jdbc类型) getResult(将ResultSet或者CallableStatement的返回参数转换为java类型)
2.它有一个抽象实现类BaseTypeHandler、其他所有的实现类都是集成该抽象类提供的具体实现、它实现了父类四个接口方法、setParameter在本类处理了null值的情况,在子类处理非null情况setNonNullParameter,getResultt则不管空不空、先尝试获取、直接先交给子类的getNullableResult方法获取结果
3.所有的子类都继承了BaseTypeHandler、同时加上泛型、此泛型代码要进行相互转换的java类型
4.TypeHandlerRegister有什么作用?结构是什么样?
作用:类型处理器注册中心的主要作用就是将所有已经定义的类型处理器集中分类管理、在后面需要使用的时候可以很方便快速的拿到类型处理器对象
结构:
1.它有4个成员变量
JDBC_TYPE_HANDLER_MAP:可以通过jdbcType来拿到TypeHandler
TYPE_HANDLER_MAP: 可以通过javaType来拿到TypeHandler,可能存在一个javaType有多个处理器的情况,比如String类型,int类型
UNKNOWN_TYPE_HANDLER:未知类型处理器,注意初始化将本类对象注入了
ALL_TYPE_HANDLERS_MAP:通过类TypeHandler的class对象拿到TypeHandler对象
2.它初始化的时候将所有已知的类型处理器都注册了进来
5.这种多类型处理的代码结构和设计思想是什么?
步骤相似、但是处理过程不一样的业务出现的频率确实是相当的高,所以类型处理器采用的模板模式。通俗点的理解就是 :完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成。