MyBatis⑤注解开发

MyBatis⑤注解开发

 

9、注解开发

9.1、面向接口编程

在实际开发中,很多时候我们会选择面向接口编程。

好处:

  1. 定义了标准规范:更加抽象,更加面向对象;
  2. 提高编程的灵活性:分层开发中,系统设计不用管具体的实现;
  3. 实现“高内聚、低耦合“:提高复用性,利于维护。

关于接口的理解

  • 从更深层次的理解:定义(规范,约束)与实现的分离。

  • 反映了系统设计人员对系统的抽象理解。

  • 接口应有两类:

    1. 对个体的抽象,对应一个抽象体(abstract class);

    2. 对个体某一方面的抽象,即形成一个抽象面(interface)。

三个面向区别

  • 面向过程:以一个具体的流程(事务过程)为单位,考虑它的实现;

  • 面向对象:以对象为单位,考虑它的属性及方法;

  • 面向接口:体现对系统整体的架构。

9.2、注解

在MyBatis实际开发中,建议使用XML配置文件。注解开发作为了解即可。

  1. 本质:反射机制的实现;
  2. 底层:动态代理;
  3. 使用注解开发:
    • 对于简单的 SQL语句,使用注解会使代码更加简洁;
    • 对于复杂的 SQL语句,使用注解会显得代码非常混乱。
  4. 注解和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);

注:

  1. 增删改操作使用相应的注解,不是用Select注解;
  2. 增删改操作需要提交事务;
  3. 关于@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
 
 
posted @ 2022-02-24 22:55  扬帆起航$  阅读(32)  评论(0)    收藏  举报