Mybatis基础:注解开发,面向接口(引出三个面向的区别)

面向接口的做作用:解耦

理解:定义(规范,约束),与实现的分离

  接口本身放映了系统设计人员对系统的抽象理解

  抽象接口应有两类:

    第一类是对一个个体的抽象,他可对应一个抽象体(abstact class);

    是对一个个体某一方面的抽象,即形成一个抽象面(inface);

  一个体可能有多个抽象面,抽象体和抽象面之间是有区别的  

三个面向的区别

  1.   面向对象:我们考虑问题时,以对象为单位,要考虑实例化对象的属性和方法
  2.   面向过程:当考虑问题时,是以一个具体流程(事务过程)为单位,考虑它的实现
  3.   面向接口:本质上与面对过程和面对对象不是一个问题,更多的是考虑它整体的一个架构

  

使用注解实现接口

  接口+注解

public interface UserMapper {

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

}

注册机

    <mappers>
        <mapper class="com.king.dao.UserMapper"/>
    </mappers>

 测试

    @Test
    public void mapperTest(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUsers();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }

缺点:

 本质:反射机制实现

底层:动态代理模式  

  

练习:增删改

mapper

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

    @Delete("DELETE FROM `user` WHERE id=#{id}")
    int delUser(int i);

    @Update("UPDATE `user` SET `name`=#{name},pwd=#{pwd} WHERE id=#{id}")
    int updateUser(User user);

注意:当接口要传递多个参数时,要用注解@Param标记每个参数,每个参数对应sql中的#{**}

    //注意:当有多个参数是需使用注解标记@Param(要与sql语句的传参名相同)
    @Select("select * from user where id=#{id} and name=#{name}")
    List<User> getUserList(@Param("id")int id,@Param("name")String name);
    

扩展:当使用Mapper.xml去实现接口时,接口方法需传递多个参数,该怎么办

mapper接口

    //多个参数
    List<User> getUsersList(@Param("id")int id,@Param("name")String name);

mapper.xml(不需要写传参类型了,以为在接口中就已经写明了)

    <select id="getUsersList" resultType="com.king.pojo.User">
         select * from mybatis.user where id = #{id} and `name` = #{name}
    </select>

  

扩展二:(1)当使用注解方式操作crud时,一个注册机只能注册一个文件/包

    <!--绑定接口-->
    <mappers>
        <mapper class="com.king.dao.UserMapper"/>
    </mappers>

    (2)当使用mapper.xml实现时,可利用通配符注册多个mapper.xml

 <mappers>
        <mapper resource="com/king/dao/*.xml"/>
    </mappers>

 

    

原文地址:https://www.cnblogs.com/CL-King/p/13873471.html