zoukankan      html  css  js  c++  java
  • Mybatis的几种传参方式

    • 前言
    • 单个参数
    • 多个参数
      • 使用索引【不推荐】
      • 使用@Param
      • 使用Map
      • POJO【推荐】
    • List传参
    • 数组传参
    • 总结

    单个参数

    单个参数的传参比较简单,可以是任意形式的,比如#{a}#{b}或者#{param1}但是为了开发规范,尽量使用和入参时一样

    UserInfo selectByUserId(String userId);

    XML如下:

    <select id="selectByUserId" resultType="cn.cb.demo.domain.UserInfo">
            select * from user_info where user_id=#{userId} and status=1
      </select>

    多个参数

    • 多个参数的情况下有很多种传参的方式,下面一一介绍。

    使用索引【不推荐】

    • 多个参数可以使用类似于索引的方式传值,比如#{param1}对应第一个参数,#{param2}对应第二个参数.......
    • Mapper方法如下:
    UserInfo selectByUserIdAndStatus(String userId,Integer status);

    XML如下:

    <select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
            select * from user_info where user_id=#{param1} and status=#{param2}
        </select>
    • 注意:由于开发规范,此种方式不推荐开发中使用。

    使用@Param

    • @Param这个注解用于指定key,一旦指定了key,在SQL中即可对应的key入参。
    • Mapper方法如下:
    UserInfo selectByUserIdAndStatus(@Param("userId") String userId,@Param("status") Integer status);

    XML如下:

    <select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
            select * from user_info where user_id=#{userId} and status=#{status}
        </select>

    使用Map

    • Mybatis底层就是将入参转换成Map,入参传Map当然也行,此时#{key}中的key就对应Map中的key
    • Mapper中的方法如下:
    UserInfo selectByUserIdAndStatusMap(Map<String,Object> map);

    XML如下:

    <select id="selectByUserIdAndStatusMap" resultType="cn.cb.demo.domain.UserInfo">
            select * from user_info where user_id=#{userId} and status=#{status}
        </select>

    测试如下:

    @Test
        void contextLoads() {
            Map<String,Object> map=new HashMap<>();
            map.put("userId","1222");
            map.put("status",1);
            UserInfo userInfo = userMapper.selectByUserIdAndStatusMap(map);
            System.out.println(userInfo);
        }

    POJO【推荐】

    • 多个参数可以使用实体类封装,此时对应的key就是属性名称,注意一定要有get方法。
    • Mapper方法如下:
    UserInfo selectByEntity(UserInfoReq userInfoReq);

    XML如下:

    <select id="selectByEntity" resultType="cn.cb.demo.domain.UserInfo">
            select * from user_info where user_id=#{userId} and status=#{status}
        </select>

    实体类如下:

    @Data
    public class UserInfoReq {
        private String userId;
        private Integer status;
    }

    List传参

    • List传参也是比较常见的,通常是SQL中的in
    • Mapper方法如下:
    List<UserInfo> selectList( List<String> userIds);

    XML如下:

    <select id="selectList" resultMap="userResultMap">
            select * from user_info where status=1
            and user_id in
            <foreach collection="list" item="item" open="(" separator="," close=")" >
                #{item}
            </foreach>
        </select>

    数组传参

    • 这种方式类似List传参,依旧使用foreach语法。
    • Mapper方法如下:
    List<UserInfo> selectList( String[] userIds);

    XML如下:

    <select id="selectList" resultMap="userResultMap">
            select * from user_info where status=1
            and user_id in
            <foreach collection="array" item="item" open="(" separator="," close=")" >
                #{item}
            </foreach>
        </select>
  • 相关阅读:
    CSS基础
    AXIS2 开发笔记
    Tomcat和Weblogic下ajax或get中文乱码
    Jetty和Tomcat的选择:按场景而定
    分页
    windows linux 下,获取java项目绝对路径的方法
    oracle SQL
    ArrayUtils
    Xcode 调试技巧
    Core Data持久化数据存储(1)
  • 原文地址:https://www.cnblogs.com/zhouheblog/p/13750068.html
Copyright © 2011-2022 走看看