MyBatis⑤注解开发
MyBatis⑤注解开发
9、注解开发
9.1、面向接口编程
在实际开发中,很多时候我们会选择面向接口编程。
好处:
- 定义了标准规范:更加抽象,更加面向对象;
- 提高编程的灵活性:分层开发中,系统设计不用管具体的实现;
- 实现“高内聚、低耦合“:提高复用性,利于维护。
关于接口的理解
-
从更深层次的理解:
定义(规范,约束)与实现的分离。 -
反映了系统设计人员对系统的抽象理解。
-
接口应有两类:
-
对个体的抽象,对应一个抽象体(abstract class);
-
对个体某一方面的抽象,即形成一个抽象面(interface)。
-
三个面向区别
-
面向过程:以一个具体的流程(事务过程)为单位,考虑它的实现;
-
面向对象:以对象为单位,考虑它的属性及方法;
-
面向接口:体现对系统整体的架构。
9.2、注解
在MyBatis实际开发中,建议使用XML配置文件。注解开发作为了解即可。
- 本质:反射机制的实现;
- 底层:动态代理;
- 使用注解开发:
- 对于简单的 SQL语句,使用注解会使代码更加简洁;
- 对于复杂的 SQL语句,使用注解会显得代码非常混乱。
- 注解和XML配置
- 使用注解开发:在接口方法上添加注解,编写SQL语句,具有一定耦合性。维护时要修改接口代码,不利于维护;
- 使用XML配置:通过映射绑定接口和方法,Java代码和SQL语句分离。维护时只需修改XML文件,利于维护。
例:
Mapper接口
/**
* 获取所有用户:通过注解
*
* @return 用户列表
*/
@Select("select * from user")
List<User> listUsers();
mybatis-config.xml:绑定接口
<mappers>
<mapper class="indi.jaywee.dao.UserMapper"/>
</mappers>
JUnit
@Test
public void testListUsers() {
// 获取SqlSession实例
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 获取Mapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 执行方法
List<User> users = mapper.listUsers();
for (User user : users) {
System.out.println(user);
}
// 关闭连接
sqlSession.close();
}
9.3、注解CRUD
Select
/**
* 通过ID获取用户
* @param id ID
* @return 用户
*/
@Select("select * from user where id = #{id}")
User getUserById(int id);
Insert
/**
* 添加用户
* @param user 待添加用户
* @return 受影响行数
*/
@Insert("insert into user(name,password) values(#{name},#{password})")
int insertUser(User user);
Remove
/**
* 通过ID删除用户
* @param id ID
* @return 受影响行数
*/
@Delete("delete from user where id = #{id}")
int deleteUserById(int id);
Update
/**
* 通过id修改用户名
*
* @param id ID
* @param name 用户名
* @return 受影响行数
*/
@Update("update user set name = #{name} where id = #{id}")
int updateUser(@Param("id") int id, @Param("name") String name);
注:
增删改操作使用相应的注解,不是用Select注解;增删改操作需要提交事务;- 关于
@Param注解:- 需要传递一个以上的基本类型或String型的参数时,需要在参数前加上;
- 引用类型无需添加注解;
- 如果使用了
@Param注解,SQL语句中引用的是注解值,而非参数名。
9.4、Lombok
Project Lombok是一个java库,它可以自动插入编辑器和构建工具。
使用一个注释,你的类就有了一个功能齐全的构建器、自动化你的日志变量,等等

Lombok 4.14版本包含以下注解:
@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Data
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@val
@var
experimental @var
@UtilityClass
1、导入Maven依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
2、新建Person类,作为测试。
public class Person {
private String name;
private int gender;
private int age;
}
结构图

3、使用注解
例如:
@Data
public class Person {
private String name;
private int gender;
private int age;
}
查看结构图:增加了无参构造、getter和setter、equals和hashCode方法、toString方法。

标签: MyBatis

浙公网安备 33010602011771号