Mybatis(二)參數(Parameters)傳遞


Mybatis參數(Parameters)傳遞 

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>

 

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傳入。Mapkeyparam1param2,或者01,值就是參數的值。

 

//添加用戶
    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();
            }

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM