mybatis 参数传递

1.单个参数

可以接受基本类型,对象类型,集合类型的值。这种情况MyBatis可直接使用这个参数,不需要经过任何处理。


<!-- 根据id查询数据表中的一条记录,并封装User对象 -->
<select id="selectById"  resultType="com.softjx.model.User">
 select t_id as id,t_username as username,t_password password from t_user where t_id=#{id}
</select>
 
 
<!--根据id查询数据表中的一条记录,使用了parameterType限定参数的类型,参数变量名可以随意定义,不受javabean中的属性控制-->
<select id="selectById1" parameterType="java.lang.Integer" resultType="com.softjx.model.User">
 select t_id as id,t_username as username,t_password password from t_user where t_id=#{id1}
</select>
 
<!--或用${value}-->
<!--根据id查询数据表中的一条记录,使用了parameterType限定参数的类型,参数变量名固定是value,不可更换-->
<select id="selectById1" parameterType="java.lang.Integer" resultType="com.softjx.model.User">
 select t_id as id,t_username as username,t_password password from t_user where t_id=${value}
</select>

ps:其中 v a l u e v a l u e {value}中的value是固定的,不能换!固定的,不能换!固定的,不能换! 如果传输类型是简单类型, { }中就只能使用value( 而#{ }中就随意了 )
固定是value的原因,请参阅:《深入了解MyBatis参数》

2.POJO

当这些参数属于我们业务POJO时,我们直接传递POJO。

<!-- 添加用户 -->
<insert id="insertUser">
  insert into t_user (t_username,t_password)
  values (#{username},#{password})
</insert>
 
 
<!-- 添加用户 -->
<!-- 参数可以省略,不管如何,变量名都是javabean中属性名 -->
<insert id="insertUser1" parameterType="com.softjx.model.User">
  insert into t_user (t_username,t_password)
  values (#{username},#{password})
</insert>

3.Map

我们也可以封装多个参数为map,直接传递。

public int insertUser2(Map<String ,Object> map);

<!-- 添加用户 -->
<!-- 参数是map,变量名随意,调用时,map的key要和变量名要一致 ,参数也可以省略-->
<insert id="insertUser2" parameterType="java.util.Map">
  insert into t_user (t_username,t_password) values (#{a},#{b});
</insert>
 
 
@Test
public void TestInserUser2() {
	System.out.println("添加一个用户");
	try {
	   UserMapper mapper=session.getMapper(UserMapper.class);
	   System.out.println(mapper);
	   Map<String,Object> map=new HashMap<String,Object>();
	   map.put("a", "lisi");
	   		map.put("b", "222222");
	   int count=mapper.insertUser2(map);
	   session.commit();//这里一定要提交,不然数据进不去数据库中 
	   //session.rollback();
	   System.out.println(count);
	} finally {
	   session.close();
	}
}

4.多个参数(顺序)
任意多个参数,都会被MyBatis重新包装成一个Map传入。Map的key是param1,param2,或者0,1,值就是参数的值。

//添加用户
public int insertUser3(String name,String pass);

<!-- 添加用户 -->
<!-- 带有多个参数,参数名 #{param1},#{param2},或者#{0},#{1},不能使用参数名-->
<insert id="insertUser3" parameterType="java.util.Map">
  insert into t_user (t_username,t_password)
  values (#{param1},#{param2})
</insert>
 
<insert id="insertUser3" parameterType="java.util.Map">
  insert into t_user (t_username,t_password)
  values (#{0},#{1})
</insert>
 
 
 
@Test
 public void TestInserUser3() {
     System.out.println("添加一个用户");
     try {
          UserMapper mapper=session.getMapper(UserMapper.class);
          System.out.println(mapper);
          int count=mapper.insertUser3("aaa","bbb");
          session.commit();//这里一定要提交,不然数据进不去数据库中 
          //session.rollback();
          System.out.println(count);
          } finally {
              session.close();
          }
 
 }

5.命名参数(注解)
为参数使用@Param起一个名字,MyBatis就会将这些参数封装进map中,key就是我们自己指定的名字。

//添加用户
public int insertUser4(@Param(“name”)String name,@Param(“pass”)String pass);

<!-- 添加用户 -->
<!-- 带有多个参数,使用@Param注解,参数名直接使用定义名, #{name},#{pass}或,#{param1},#{param2},不能用#{0},#{1}-->
<insert id="insertUser4" parameterType="java.util.Map">
  insert into t_user (t_username,t_password)
  values (#{name},#{pass})
</insert>
 
 
@Test
public void TestInserUser4() {
    System.out.println("添加一个用户");
    try {
        UserMapper mapper=session.getMapper(UserMapper.class);
        System.out.println(mapper);
        int count=mapper.insertUser4("song","555");
            session.commit();//这里一定要提交,不然数据进不去数据库中 
            //session.rollback();
            System.out.println(count);
        } finally {
            session.close();
        }
    }
}

发布了45 篇原创文章 · 获赞 2 · 访问量 2599

猜你喜欢

转载自blog.csdn.net/u013915286/article/details/104244347