mybatis之注解开发以及mybatis的执行流程(六)

文章探讨了面向接口、面向对象和面向过程编程的区别,强调了面向接口编程在解耦和可扩展性上的优势。同时,介绍了MyBatis框架中注解开发的应用,如@Select、@Param等,以及简单的SQL操作。通过案例展示了如何使用注解进行MyBatis的Mapper接口开发,并提醒了使用注解时应注意的事项,如事物管理和SQL语句的预编译方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 区别面向接口、面向对象、面向过程

1.1 面向接口编程

在之前的学习当中我们学习过面向对象 面向过程的编程 也学习过接口 但其实在真正的开发当中,绝大多数都是选择面向接口编程。

  • 根本原因: 解耦,可扩展性,提高服用,分层开发中,上层不同管理具体的实现,大家都遵守共同的标准,是得开发更容易,规范性更好!!

面向对象:

  • 在一个面向对象的系统当中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了。
  • 而各个对象之间的协作关系则称为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。

 1.2关于接口的理解

  • 接口是更深层次的理解,应是定义(规范和约束)与实现(名实分离的原则)的分离
  • 接口的本身反映了系统设计人员对系统的抽象理解。
  • 接口应该有两类:
  1. 第一类是对一个 个体的抽象, 她可对应位一个抽象体。(abstract class)
  2. 第二类是对一个 个体的 某一方面的抽象, 即形成一个抽象面(interface)
  • 一个 个体有可能有多个抽象面 。 抽象体与抽象面是有区别的

1.3 三个面向的区别

面向过程:我们考虑问题的时候,以一个具体的流程(事务过程)为单位,考虑他的实现。

面向对象:我们考虑问题的时候, 以对象为单位 ,考略他的属性及方法。

面向接口 与非接口的设计是针对复用技术而言的,与面向对象(过程)不是一个问题。更多的体现就是对系统的整体的架构

利用注解开发

  1. mybatis最初的配置信息是基于XML文件的, 映射语句(sql)也是定义在XML文件当中。
  2. 而到Mybatis 3 提供了新的基于注解的配置。 
  3. 不幸的是:java注解的表达能力和灵活性十分有限(只适用于简单的sql语句)
  4. 而mybatis当中最强大的映射并不能用注解来构建。
  • 简单的sql类型主要分:
  1. @select()
  2. @insert()
  3. @update()
  4. @delete()

注意事项: 如果利用了上诉的注解开发 就不需要在xml文件当中写sql直接在Mappe接口当中的方法上写语句就可以了

案例

步骤 :环境搭建---》pojo类--》UserMapper接口--》测试

环境搭建

  1. 创建子工程
  2. 创建mybatis-config.xml核心配置文件  记得注册Mapper.
  3. 创建工具类mybatisUtils类

User类

public class User {
    private int id;
    private String name;
    private String password;

    public User() {
    }

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserMapper接口:

public interface UserMapper {
    @Select("select * from user where id=#{id1}" )
    List<User> getUserByID(@Param("id1")int id);
}

测试:

public class UserMapperTest {
    @Test
    public void getUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
//本质上利用了jvm的动态代理机制        
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userByID = mapper.getUserByID(1);
        System.out.println(userByID);


        sqlSession.close();
    }
}

结果展示:

增删改相同 但一定要注意事物的提交

补充点:

@Param注解用于给方法参数起一个名字。以下是总结的使用原则:

  • 在方法只接受一个参数的情况下,可以不使用@Param。

  • 在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名

  • 如果参数是 JavaBean , 则不能使用@Param

  • 不使用@Param注解时,参数只能有一个,并且是Javabean。

  • #与$的区别

  • #{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符? 【推荐使用】

    INSERT INTO user (name) VALUES (#{name});
    INSERT INTO user (name) VALUES (?);
  • ${} 的作用是直接进行字符串替换

    INSERT INTO user (name) VALUES ('${name}');
    INSERT INTO user (name) VALUES ('kuangshen');

三 mybatis的执行过程:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值