需要用到哪些技术?
- 动态代理
- 解析动态sql中的标签
- 封装JDBC执行sql的操作
- 对结果集进行封装
动态代理
因为MyBatis只需要定义接口与编写XML文件,所以我们需要使用到Java中的动态代理来生成一个代理类,来负责执行JDBC操作,并将调用接口的具体的接口与XML中的sql映射起来,一般是通过接口的全限定名与XML中的sql映射。
解析动态sql中的标签
需要将MyBatis的xml文件中的sql中的动态sql中的#{field_name}解析成JDBC的预编译,将${table_name}进行sql拼接。
根据参数对if、foreach等标签进行解析。
对于foreach标签,使用的时候如下所示:
<update id="updateList">
<foreach collection="deviceList" item="item" separator=";">
UPDATE device
SET
name = #{item.name},
no = #{item.no}
WHERE
id = #{item.id}
</foreach>
</update>
可以使用反射,通过反射调用对象get方法来获取数据值给sql,获取我们需要的数据。
封装JDBC执行SQL相关的操作
需要封装注册驱动、获取连接、获取执行对象、预编译、执行sql等操作
封装结果集
获取到结果集之后,需要使用反射技术创建具体的结果实体对象,并使用反射调用实体对象的属性的set方法,将结果设置到具体的属性里面。
然后返回给方法的调用者。