mybatis 接口绑定方案及多参数传递

接口绑定

  • MyBatis 中, 提供了一套接口绑定方案. 程序员可以提供一个接口, 然后提供对应接口的一个mapper.xml 文件.
  • MyBatis 会自动将接口和 xml 文件进行绑定. 实际上就是MyBatis 会根据接口和对应的 xml文件创建接口的实现类.
  • 其原理是使用了JDK动态代理Proxy来实现接口,代理类使用 反射调用mapper.xml生成的原生 sql 方法

  优点

    • 通过调用接口对象的方法就可以操作 mapper.xml 中编写的 sql
    • 调用方法明确,因为我们调用的是接口中的某个具体方法,而不再是通过一个字符串来指定执行映射文件中的某个SQL语句了

  使用

    1. 、创建一个接口
      接口包名和接口名与 mapper.xml 中<mapper>namespace相同。即接口的全限定类名要和 xml中的 <mapper>namespace相同
      接口中方法名和 mapper.xml 标签的 id 属性相同
    2. 在 mybatis.xml 中使用<package>进行扫描接口和 mapper.xml
      扫描单个接口, 可以使用 mapper 标签的 class 属性

      <mappers>
          <mapper class="com.bjsxt.mapper.UserMapper" />
      </mappers>

      当扫描多个接口时, 为简化配置, 可以使用 package 标签

      <mappers>
      <package name="com.bjsxt.mapper" />
      </mappers>
    3. 调用 sqlSession 的 getMapper(Class c); 方法,参数为对应 mapper.xml的接口的 类类型 -->即 ‘接口名.class‘
    4. getMapper(Class c) 返回是该接口的实现类 对象,可以通过接口的实现类对象调用接口中定义好的方法

    使用注意

    • mapper.xml 中编写 sql 标签语句时,无需再写 parameterType 这个属性,传入参数直接在接口中传入
    • 通过:#{0},#{1}来引用接口中的传递的参数
      或者使用:#{param+数字}的方式.(数字,从 1 开始)
      注意:在有些情况下 #{0},#{1}可能无法找到参数,需要使用#{arg0}, #{arg1} 的方式来获取 (arg 角标,从 0 开始)

    #{} 和 ${} 的区别

    • #{}   (建议使用该方式)
      #是占位符, 会对SQL进行预编译,相当于?
      #不需要关注数据类型, MyBatis自动实现数据类型转换
    • ${}
      $是做sql拼接, 有SQL注入的隐患
      ${} 必须自己判断数据类型

多参数传递

 多参数传递依赖于接口绑定,传递方式是在接口方法的形参中设置多个参数

在 全局配置文件添加以下标签,可以省略 包名,达到简写的效果
<!--直接给某个包下所有类起别名,别名为类名, 不区分大小写  -->
     <typeAliases>
         <package name="com.pojo"/>
         </typeAliases>

  常用的传参方式

parameterType:接收参数类型resultType:返回值类型,使用接口绑定 可以省略。因为在接口中已经定义了返回值类型resultMap:方返回值类型不是基本数据类型时,使用resultMap 自定义对结果集的处理
  1. 顺序传参法

    public User selUser(String name, int pwd);
    <select id="selectUser" resultType="User">// resultType 可以省略不谢
          select * from user where username = #{0} and pwd = #{1}
    </select>
  2. @Param 注解传参

    public User selUser(@Param("username")String name, @Param("pwd")int pwd);
    <select id="selectUser" parameterType="User">
          select * from user where username = #{username} and pwd = #{pwd}
    </select>
  3. Map 传参

    public User selectUser(Map<String, Object> params);//集合中包含 key=username:value=xxxx,key=pwd:value=xxxxx
    <select id="selectUser" parameterType="java.uyil.Map">
          select * from user where username = #{username} and pwd = #{pwd}
    </select>
  4. Javabean 传参(类似第一种顺序传参(传递的参数是基本数据类型),只不过传递的是一个对象了,)

    public User selUser(User user);
    <select id="selectUser" parameterType="user">
          select * from user where username = #{username} and pwd = #{pwd}
    </select>

原文地址:https://www.cnblogs.com/ressso/p/12088649.html

时间: 2024-10-27 12:40:48

mybatis 接口绑定方案及多参数传递的相关文章

C++ Redis mset 二进制数据接口封装方案

需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在redis-cli中,mset的语法是这样的: /opt/colin$./redis-cli mset a 11 b 22 c 333 OK 按照这样的语法拼接后,直接使用hiredis字符串接口redisCommand传递: void msetNotBinary(redisContext *c, const vector<string> &v

三层交换机如何设置IP-MAC绑定?跨网段IP-MAC绑定方案。

交换机上配置IP-mac绑定,主要需要考虑两个因素: 该交换机是否开启DHCP服务? 是采用端口绑定还是ARP绑定? 端口绑定或者ARP绑定,只是强制了IP-MAC的对应关系.但是,对于自动获取IP地址的客户机而言,还需要在DHCP服务器上分配固定IP才可以:否则客户机重新获取IP后,就会联不了网.所以,一个完善的IP-MAC绑定方案,既要考虑DHCP的静态地址分配,还要考虑IP-MAC的实际绑定实现.对于三层交换机而言,分为两种情况: 1. 三层交换机作为DHCP服务器 以华为的S5700为例

局域网IP-MAC绑定方案

对局域网设备进行IP-MAC绑定是网络管理的一个重要手段,可以有效的防止IP盗用.IP滥用.IP地址冲突等异常情况. IP-MAC绑定可以采用多种方法来实现,本文中,我将介绍一些常用的局域网IP-MAC绑定方案. 1. 域的组策略禁止修改IP 给每台电脑设置固定IP地址,且不开放管理员权限(客户机无法自行修改).这个方案只能对电脑起作用,一般在域环境的局域网用的比较多.如图中的组策略配置. 2. 基于交换机端口绑定 交换机的端口设置IP-MAC绑定.该方案是最严格的IP-MAC绑定方案,但是需要

【转】MyBatis接口的简单实现原理

MyBatis接口的简单实现原理 用过MyBatis3的人可能会觉得为什么MyBatis的Mapper接口没有实现类,但是可以直接用? 那是因为MyBatis使用Java动态代理实现的接口. 这里仅仅举个简单例子来说明原理,不是完全针对MyBatis的,这种思想我们也可以应用在其他地方. 定义一个接口 public interface MethodInterface { String helloWorld(); } 实现动态代理接口 public class MethodProxy<T> im

生成跨语言的类型声明和接口绑定的工具(Djinni )

Djinni 是一个用来生成跨语言的类型声明和接口绑定的工具,主要用于 C++ 和 Java 以及 Objective-C 间的互通. 示例接口定义文件: 1 # Multi-line comments can be added here. This comment will be propagated 2 # to each generated definition. 3 my_enum = enum { 4 option1; 5 option2; 6 option3; 7 } 8 9 my_

防伪开票组件接口软件方案[开发文档]

 防伪开票组件接口软件方案 一.概况 对于自主或委托开发管理信息系统的企业,我们开发了Windows版防伪开票组件接口软件,将防伪税控开票功能嵌入企业销售软件内,为真正实现防伪税控防伪税控系统与企业管理信息系统的无缝连接创造了必要的条件. 组件调用软件基于 ActiveX规范,提供标准开票界面和后台命令两种接口方式,实现企业日常开具.作废和打印税控发票的功能,为需要实时打印发票或有专门开票要求的企业提供了适宜的解决方案. 对于可以采用通用开票界面的销售软件,推荐使用标准开票界面接口方式,此时

Mybatis 接口代理的实现

相信在开发中,尤其是mybatis 配置操作中,我们只需要提供一个mapper 接口,然后注入到service 中,就可以进行调用. 按我们的一般逻辑来说,我们并没有进行接口的实现,应该会报空指针异常,那么Mybatis 是如何进行操作的呢? 这主要是得于Spring 强大的扩展机制,进入正题: 1. Spring 提供了 BeanDefinitionRegistryPostProcessor 接口,通过这个接口的实现,可以自定义一些我们bean ,让Spring 在初始化的时候进行bean 的

java框架---MyBatis接口编程

MyBatis提供接口与配置文件动态绑定的功能 要求: 1.配置文件的namespace名称空间指定为接口的全类名 2.配置文件中的id唯一标识与接口中的方法对应(返回值类型对应,方法名对应,参数个数和类型对应) 接口代码: package com.bird.mybatis.dao; import com.bird.mybatis.bean.Employee; public interface EmployeeMapper { public Employee getEmpById(Integer

微信公众号用户与网站用户的绑定方案

现在很多网站都已经建立了一套完整的用户账号体系,基于这套体系,再做其他应用的用户扩展就非常方便.例如,有了微软的outlook账户,就可以登录win8,可以登录微软的邮箱,还可以登录skype.同样地,一个Apple ID可以享受苹果的所有服务.正所谓,一个账号,处处使用.对于企业,可能会有产品线通常有网站,app,微信公众号等.统一各产品线的账号体系,实现一个账号处处使用的目标是非常有必要的.网站和app使用同一个账号,不需要做任何多余的工作,客户只要有用户名密码即可登录.对于微信公众号,由于