• 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>

     

        

  • 相关阅读:
    C#.NET中的ToString()数字格式化
    Entity Framework实现属性映射约定
    CentOS6.3安装MySQL5.5
    Xshell传输文件
    centos直接yum安装nginx
    winform 开发中 把耗时操作 封装起来 异步执行(.net 4.0)
    c# action<> func<> 这2个委托怎么用和理解
    git@oschina使用入门(图形界面版)
    Linux任务前后台的切换
    linux 常用命令,开发记住这些基本能够玩转linux
  • 原文地址:https://www.cnblogs.com/CL-King/p/13873471.html
Copyright © 2020-2023  润新知