• 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();
                }
    
        }
  • 相关阅读:
    Unix压测工具学习
    C#获取北京时间
    MySql游标的使用以及5000万大表加索引
    【博客园客户端】博客园Android客户端更新:离线下载、本地收藏、RSS阅读
    Protobuf
    时间戳签名和或证书无法验证或已损坏(已解决)
    Vue插槽的理解和使用
    工作学习高效法则
    ES6 Promise用法小结
    绩效考核互评打分怎么操作?
  • 原文地址:https://www.cnblogs.com/HawkFalcon/p/7986983.html
Copyright © 2020-2023  润新知