mybatis传参

1. 概念

  • mybatis的传参即通过dao的方法映射mapper.xml配置文件中的方法操作数据库
  • 无论传递的参数是什么样的,最后mybtis都会将传入的转换为map
  • mybatis传参可以分为两个部分
    • 参数的数量
    • 参数的类型

2. 按参数的数量

2.1 单个参数传递
  • @param可以不用写,如果写上就要求和mapper文件中的参数一致

    public List<XXBean> getXXBeanList(@param("id")String id);    
    
        <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">
            select * from tableName t where t.id= #{id}
        </select>  
2.2 多个参数传递
  • 方案一:多个参数传递不能使用parameterType,#{index}是第几个就用第几个的索引,索引从0开

    public List<XXXBean> getXXXBeanList(String xxId, String xxCode);  
    
        <select id="getXXXBeanList" resultType="XXBean">
            select t.* from tableName where id = #{0} and name = #{1}
        </select> 
  • 方案二:基于注解
    public List<XXXBean> getXXXBeanList(@Param("id")String id, @Param("code")String code);  
    
        <select id="getXXXBeanList" resultType="XXBean">
            select t.* from tableName where id = #{id} and name = #{code}
        </select> 
  • 方案三:map封装参数
    public List<XXXBean> getXXXBeanList(HashMap map);  
    
        //#{}中的值为map中的key
        <select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean">
            select 字段... from XXX where id=#{xxId} code = #{xxCode}
        </select>  
  • 方案四:list封装参数
    public List<XXXBean> getXXXBeanList(List<String> list); 
    
        <select id="getXXXBeanList" resultType="XXBean">
            select * from XXX where id in
            <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
                #{item}
            </foreach>
        </select>
  • 方案五:传递string和list两种参数
    //将参数放入map
    map.put("name",kasi);
    map.put("list",list);
    
    <select id="getSysInfo" parameterType="java.util.Map" resultType="XXBean">
      select * from user  WHERE name = #{name } and id in
            <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
    </select>

3. 按传递参数的类型

  • Mybatis的parameterType属性,用于对应的mapper接口方法接受的参数类型
3.1 简单数据类型
  • 传递简单参数常用写法如下

    public List<XXBean> getXXBeanList(Integer id); 
    
    <select id="getXXXBeanList" parameterType="java.lang.Integer " resultType="XXBean">
        select * from tableName t where t.id= #{id}
    </select>
  • 当有if语句时,需要修改参数名

    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
        select * from tb_user
            <if test="_parameter != null">    //将原本的"userId"换成"_parameter",此处还有其他方法,参见其他文章
                where id = #{userId,jdbcType=INTEGER}
            </if>
    </select>
3.2 POJO类型
  • 普通POJO

    <select id="getXXXBeanList" parameterType="com.voion.shiro.User" resultType="XXBean">
        select * from table_t where id= #{id}    //直接写user的属性值即可
    </select>
  • 包装POJO类
    public class UserVo {
        private User user;    //封装user类
        private String name;    //普通属性
    }
    
    <select id="getXXXBeanList" parameterType="com.voion.shiro.UserVo" resultType="XXBean">
        select * from table_t where id= #{user.id} and name=#{name}
    </select>
3.3 集合
  • list和array

    • list和array的区别只在于collection为list或者array

      <select id="selectUserInList" resultType="User">
          select * from table where id in
              <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
                  #{item}
              </foreach>
      </select>
  • map
    • 注意:当map中有List或者array集合时,在遍历时collection的值为list或array在map中的key

      //将参数放入map
      map.put("name",kasi);
      map.put("nameList",nameList);    //list为List<String>集合
      
      <select id="getSysInfo" parameterType="java.util.Map" resultType="XXBean">
            select * from user WHERE name = #{name } and id in
          <foreach collection="nameList" item="item" index="index" open="(" close=")" separator=",">
              #{item}
          </foreach>
      </select>
    • 此处还有另一种写法,将dao接口传参用@Param标注时,mapper中的参数都需要写成"标注的值.key"形式
      //dao接口
      void findUser(@Param("params")Map<String,Object> map)
      
      //mapper.xml
      <select id="getSysInfo" parameterType="java.util.Map" resultType="XXBean">
         select * from user WHERE name = #{params.name} and id in
          <foreach collection="params.nameList" item="item" index="index" open="(" close=")" separator=",">
              #{item}
          </foreach>
      </select>

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/kasi/p/10293944.html

时间: 2024-10-30 19:56:40

mybatis传参的相关文章

SpringBoot整合Mybatis传参的几种方式

转自https://blog.csdn.net/irelia_/article/details/82347564 在SpringBoot整合Mybatis中,传递多个参数的方式和Spring整合Mybatis略微有点不同,下面主要总结三种常用的方式 一.顺序传参法 Mapper层: 传入需要的参数 public interface GoodsMapper { public Goods selectBy(String name,int num); }1234Mapper.xml: *使用这种方式,

Mybatis传参方式

传递多个参数的四种方式: 顺序传参:public User selectUser(String name,int deptId); <select id="selectUser" resultType="user">select * from user where user_name=#{0} and dept_id = #{1}</select> #{}里面的数字代表你穿如参数的顺序.不建议使用.sql层表达不直观 @Param 注解传参:

mybatis传参的几种方式

1,@Param @参考文章 @Select("select s_id id,s_name name,class_id classid from student where  s_name= #{aaaa} and class_id = #{bbbb}")  public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id); @Select(....)注解的作

Java Mybatis 传参方式

一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean"> select t.* from tableName t where t.id= #{id} </select> 其中方法名和ID一致,

mybatis 传参为 Integer 时 ,Mapper 文件 中判断 条件 问题。

<if test="valiStatus==null || valiStatus=='' || valiStatus==4 "> b.work_permit_card_cert is not null and b.work_permit_card_cert!=1 and b.delete_flag =0 </if> <if test="valiStatus==0"> u.user_type = 0 and b.work_permi

传参在mybatis的sql映射文件中正确获取

1.单个参数: 非自定义对象 传参:getStuById(Integer id): 取值:#{id} 单个基本类型参数,随便取值都行:#{ok} 对象: 传参:saveStudent(Student student) 取值:#{属性名} 2.多个参数: 传参:getStudentByLastNameAndAge(String lastName,Integer age) 取值:#{参数名}不好使:报错提示可用的参数是[0,1,param1,param2] 可用的取值方式: 1)#{参数索引} #{

Mybatis 中在传参时,${} 和#{} 的区别

介绍 MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和java自定义类型. 在SQL中引用这些参数的时候,可以使用两种方式#{parameterName}或者${parameterName}. #{} #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 例如:order by #{parameterName} //或取Map中的value#{Key}也是一样操作. 假设传入参数是“

Mybatis中传参包There is no getter for property named &#39;XXX&#39; in &#39;class java.lang.String&#39;

一.发现问题 <select id="queryStudentByNum" resultType="student" parameterType="string"> select num,name,phone from student <where> <if test = " num!=null and num!='' "> AND num = #{num} </if> <

Mybatis批量和传参

MyBatis中批量插入 方法一: <insert id="insertbatch" parameterType="java.util.List"> <selectKey keyProperty="fetchTime" order="BEFORE" resultType="java.lang.String"> SELECT CURRENT_TIMESTAMP() </selec