
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的设计思想等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)