zoukankan      html  css  js  c++  java
  • 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();
                }
    
        }
  • 相关阅读:
    Anagram
    HDU 1205 吃糖果(鸽巢原理)
    Codeforces 1243D 0-1 MST(补图的连通图数量)
    Codeforces 1243C Tile Painting(素数)
    Codeforces 1243B2 Character Swap (Hard Version)
    Codeforces 1243B1 Character Swap (Easy Version)
    Codeforces 1243A Maximum Square
    Codeforces 1272E Nearest Opposite Parity(BFS)
    Codeforces 1272D Remove One Element
    Codeforces 1272C Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/HawkFalcon/p/7986983.html
Copyright © 2011-2022 走看看