注解开发
面向接口编程
真正开发过程中大部分使用注解,mybatis大部分使用配置文件。
使用注解开发是为了更符合面向接口编程的思想。
面向接口编程,目的:解耦合。
在面向对象的系统中,系统的功能是由各种不同的对象协作完成的。对象之间相互调用,而调用的对象内部是如何实现的,对系统设计人员就不是那么的重要。
而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。
接口的理解
- 定义(规范,约束)与实现(名实分离的原则)的分离。
- 接口的本身反映了系统设计人员对系统的抽象理解。
三种面向之间的区别
-
面向对象:考虑问题时,以对象为单位,考虑对象的属性和方法。
-
面向过程编程:考虑问题时,以一个具体的流程(事务过程)为单位,考虑如何实现。
-
接口设计与非接口设计:针对复用技术而言,更多体现的是对系统整体的架构。
使用注解开发
一些简单的sql语句,直接给接口的方法加响应的注解。
sql类型有四类,对应的由四种注解:
- @select ()
- @update ()
- @Insert ()
- @delete ()
直接在注解中写sql语句,但是注解中不能提供mybatis强大的映射功能。
使用注解开发的流程:
- 在接口的方法添加对应的注解
//查询全部用户
@Select("select id,name,pwd password from user")
public List<User> getAllUser();
- 在mybatis配置文件中绑定接口
<!--使用class绑定接口-->
<mappers>
<mapper class="com.kuang.mapper.UserMapper"/>
</mappers>
- 方法测试:与之前代码相同
@Test
public void testGetAllUser() {
SqlSession session = MybatisUtils.getSession();
//本质上利用了jvm的动态代理机制
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.getAllUser();
for (User user : users){
System.out.println(user);
}
session.close();
}
本质
本质:反射机制实现
底层:动态代理
mybatis执行流程解析
参数注解
在接口的方法中,给每个参数都加上@param()
注解,SQL注解执行时,会以param注解中的参数名为准。
@Param注解
- 基本数据类型或者String类型需要加
- 引用类型不需要加
#{}与${}
#{}类似于预编译,可以有效防止SQL注入。
${}不能防止SQL注入。
#{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符
INSERT INTO user (name) VALUES (#{name});
INSERT INTO user (name) VALUES (?);
${} 的作用是直接进行字符串替换
INSERT INTO user (name) VALUES ('${name}');
INSERT INTO user (name) VALUES ('kuangshen');
Lombok
可以简化pojo类开发,少些许多代码,例如:有参构造、无参构造、set和get方法、tostring方法等,直接通过注解的方式实现。
使用步骤
- 在IDE中下载lombok插件
- 导入lombko的jar包
- 给实体类添加想要的注解
常用的注解
@Cleanup
自动调用close()方法。
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
会帮助自动关闭资源。
@Getter / @Setter
自动生成Getter/Setter方法。
public class GetterSetterExample {
@Getter @Setter private int age = 10;
@Setter(AccessLevel.PROTECTED) private String name;
}
@Data
自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter,@Setter方法。
@AllArgsConstructor
自动生成全参构造方法
@NoArgsConstructor
自动生成无参构造方法