MyBatis的Mapper映射文件是如何与对应的接口相关联的

MyBatis的Mapper映射文件是如何与对应的接口相关联的,第1张

public interface UserDao 实现类里面应该有写selectUserByUsernameAndPassword这个ID的。你到实现类里面看看。

比如:getSqlMapClientTemplate()queryForList(“selectUserByUsernameAndPassword

”);如果加了命名空间namespace,那么语句是这样getSqlMapClientTemplate()queryForList(“命名空间名称selectUserByUsernameAndPassword

”);

 sqlSessionFactorygetConfiguration()getMappedStatement("comdaoResourceDaosave")getBoundSql(null)getSql()

如果让我们自己设计一个MyBatis,那么最核心的思想是什么呢?

答案:JDK动态代理和反射

MyBatis的作用就是 调用一个Mapper接口的方法就相当于执行一条sql

1、MyBatis在SqlSession为给Mapper接口通过动态代理实现一个代理

2、在代理方法里面通过反射获取接口名称、方法名称、参数,拿这些数据后执行Executor的jdbc与sql交互的方法(这个才是真正去执行sql)

3、执行sql的结果集通过反射设置到Bean对象里面返回

注意 InvocationHandler 接口,这是proxy代理实例的调用处理程序实现的一个接口

mapper映射器其实就是一个动态代理对象,进入到MapperMethod的方法就能找到SqlSession的删除、更新、查询、选择方法,从底层实现来说:通过动态代理技术,让接口跑起来

首先根据命名空间,找出与mapper接口方法名相同的sql语句,然后交给sqlSession来执行。(这里用到反射)

1写一个普通查询语句

<select id="byDeptIdCondition" >

SELECT t1userId,t1userName from user

</select>

2嵌套

<dynamic prepend="and">

<include refid="byDeptIdCondition"/>

where 1=1//其他sql语句 注意命名空间

</dynamic>

以上就是关于MyBatis的Mapper映射文件是如何与对应的接口相关联的全部的内容,包括:MyBatis的Mapper映射文件是如何与对应的接口相关联的、请教Mybatis中如何在程序中获取Mapper中定义的SQL语句、MyBatis的设计思想等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10139397.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存