使用注解开发
1, 面向接口编程
大家之前都学过面向对象编程, 也学习过接口, 但在真正的开发中, 很多时候我们会选择面向接口 编程
根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好
在一个面向对象的系统中, 系统的各种功能是由许许多多的不同对象协作完成的. 在这种情况下, 各个对象内部是如何实现自己的, 对系统设计人员来讲就不那么重要了;
而各个对象之间的协作关系则成为系统设计的关键. 小到不同类之间的通信, 大到各模块之间的交互, 在系统设计之初都是要着重考虑的, 这也是系统设计的主要工作内容. 面向接口编程就是指按照这种思想来编程.
关于接口的理解
接口从更深层次的理解, 应是定义 (规范, 约束) 与实现 (名实分离的原则) 的分离.
接口的本身反映了系统设计人员对系统的抽象理解.
接口应有两类:
第一类是对一个个体的抽象, 它可对应为一个抽象体(abstract class);
第二类是对一个个体某一方面的抽象, 即形成一个抽象面(interface);
一个个体有可能有多个抽象面. 抽象体与抽象面是有区别的.
三个面向的区别
面向对象是指, 我们考虑问题时, 以对象为单位, 考虑它的属性及方法 .
面向过程是指, 我们考虑问题时, 以一个具体的流程 (事务过程) 为单位, 考虑它的实现 .
接口设计与非接口设计是针对复用技术而言的, 与面向对象 (过程) 不是一个问题. 更多的体现就是对系统整体的架构
2, 利用注解开发
mybatis 最初配置信息是基于 xml, 映射语句(SQL 也是定义在 xml 中的, 而到了 MyBatis3 提供了新的基于注解的配置. 不幸的是,
java 注解的表达能力和灵活性十分有限, 最强大的 MyBatis 映射并不能用注解来构建
sql 类型的注解分为
- @select ()
- @update ()
- @Insert ()
- @delete ()
[注意] 利用注解开发就不需要 mapper.xml 映射文件了 .
1. 注解在接口上的实现
- public interface UserMapper {
- // 分页实现查询
- @Select("select * from user")
- List<User> getUser();
- }
2. 需要在核心配置文件中绑定接口
注解使用 class 绑定接口
- <mappers>
- <mapper class="com.lding.dao.UserMapper"></mapper>
- </mappers>
3. 测试
- @Test
- public void test(){
- SqlSession sqlSession = MybatisUtils.getSqlSession();
- // 底层主要应用反射
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- List<User> users = mapper.getUser();
- for (User user : users) {
- System.out.println(user);
- }
- sqlSession.close();
- }
本质: 反射机制实现
底层: 动态代理!
真实对象 目标对象 代理对象
客户端要访问每个目标对象, 它是一个接口, 代理对象去代理目标对象, 去做真实的事情.
Mybatis 详细的执行流程
本质上利用了 jvm 的动态代理机制
如果对您有帮助, 免费的赞点一个~~~感谢
来源: https://blog.csdn.net/qq_41359998/article/details/122423440