面试题:如何实现一个ORM框架,比如MyBatis

需要用到哪些技术?

  • 动态代理
  • 解析动态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方法,将结果设置到具体的属性里面。
然后返回给方法的调用者。

封装一级缓存、二级缓存

参考

MyBatis面试题集锦(精选)

MyBatis<foreach>标签的用法及多种循环方式

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值