《SSM笔记——Mybatis》8、使用注解开发

8、使用注解开发

8.1、面向接口编程

虽然都学过面向对象编程,也学习过接口,但是在真正的开发中,很多时候我们会选择面向接口编程。

根本原因:解耦!还有可拓展,可复用,在分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性更好。

关于接口的理解:

    接口从更深层次的理解,应该是定义(规范,约束)与实现的分离。(由系统设计人员,即架构师定义接口,然后由开发人员实现接口,接口的实现类再去调用下一层的接口的方法) 接口的本身反映了架构师对系统的抽象理解 接口应该有两类: 第一类是对一个个体的抽象,它可对应为一个抽象类 第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface)

接口设计与非接口设计是针对复用技术而言的。

8.2、使用注解开发(不需要mapper.xml)

  1. 接口
@Select("select * from user")
public List<User> getUserList();
  1. mybatis-config.xml
<mappers>
    <mapper class="com.Excelman.dao.UserMapper" />
</mappers>
  1. 测试

注意:在核心配置文件,一定要记得配置mapper!

本质:反射机制实现;

底层:动态代理;

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句(比如需要使用resultMap),Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。(两者可以共存)

不过其实在SSM框架中,一般就是由mapper对应的xml文件来编写sql的,有利用统一管理。

8.3、采用注解实现CRUD

public interface UserMapper {
          
   

    @Select("select * from user")
    public List<User> getUserList();

    // 方法存在多个基本类型的参数或者String时,一定要加上@Param注解。如果是引用类型,则不用加
    @Select("select * from user where id = #{id}")
    User getUserById(@Param("id") int id);

    @Insert("insert into user(id,name,pwd) values(#{id},#{name},#{pwd})")
    int addUser(User user);

    @Update("update user set name=#{name} where id=#{id}")
    int update(User user);

    @Delete("delete from user where id = #{uid}")
    int delete(@Param("uid") int uid);
}

#{} ${}的区别:

就是Statement和preStatement的区别。

前者可以防止sql注入,后者不可以,所以后者基本不用了。

8.4、注解的小结

  1. @Select
  2. @Insert
  3. @Update
  4. @Delete
  5. @Param:当接口方法存在多个参数需要传递到sql时,一般加上这个注解(不过引用类型不需要加);
经验分享 程序员 微信小程序 职场和发展