Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。
Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement
Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。
Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。
5. Service层和ServiceImpl层开AR方式?
接下来就是说IService接口和ServiceImpl,其实这两个类的存在也是很合理的,你想MP帮我们去实现了mapper接口,那mapper接口是不是得有Service接口和一个Service实现类啊?所以他其实帮我们连实现类也写好了,我们只需要去实现接口和继承实现类就好了。当然Service接口中我们也可以写自己的自定义方法但是同时我们也需要在ServiceImpl中自己去写我们自定义的方法,而从IService接口中实现的方法呢?ServiceImpl其实已经帮我们实现了,我们只要继承他就可以了。
使用微服务架构开发项目,经常遇到需要调用简单的增删改查操作,就想着如果能将mybatis-plus的通用方法暴露成接口,就无须针对操作方法暴露,比如经常遇到的查询方法list或page,入参为Wrapper。ServiceImpl类是我们进行SQL操作中非常重要的一个类,通过MybatisPlus生成的各个实体类的XXXImpl都会继承ServiceImpl类那里继承全部的方法