MyBatis @Param注解的使用和参数的说明

1.为什么要使用@Param注解

在上篇博客中,我们以及将代码跑起来了,在跑起来后,我们是否思考过当方法中传递多个参数的时候,这个方法该怎么办,有人可能想到用逗号分开,但是发现会报错。就很神奇,说明MyBatis有专门的方法来解决多个简单参数赋值的方法。这就是我今天要说的@Param注解

2. @Param注解的使用情况

在什么情况使用@Param注解呢??  

1.当方法有多个参数时。(最常用)

2.想给方法的参数取别名。(可以将复杂的参数名称换个简单的)

3.当xml文件的sql语句含有占位符$($占位符稍后会讲解)

4.如果在动态 SQL 中使用了参数作为变量,那么也需要 @Param 注解,即使你只有一个参数。

 3.@Param注解的使用方法

@Param(value = "自定义名称") 数据类型  参数名称

@Param注解是由MyBatis提供的。   位置放到形参前面。   属性 value= 可以省略不写 。可能看的不是很明白,下面就说个例子

List<Student> selectNameAge(@Param(value = "myname") String name,
                            @Param("age") Integer age);

在这个例子中将参数"name" 取别名为“myname”。在xml文件中相关的写入的就是“myname”了。 下面是完整代码。

在StudentDao接口中写入方法

List<Student> selectNameAge(@Param(value = "myname") String name,
                            @Param("age") Integer age);

 在StudentDao.xml文件中

<!--   多个简单类型参数 当使用@Param(value)后在本
       配置文件中使用#{value名}  例如@Param(“myname”)
        在这里不能写#{name} 而是#{myname}-->
    <select id="selectNameAge" resultType="com.liuhaiyang.domain.Student">
        select *from student where name=#{myname} or age=#{age}
    </select>

 测试类

 @Test
    public void TestNameAge(){
        SqlSession session =MybatisUtils.getSqlSession();
        StudentDao dao=session.getMapper(StudentDao.class);
        List<Student> student=dao.selectNameAge("王五",22);
        student.forEach(stu -> System.out.println(stu));
    }

运行结果:

 

 4.方法的参数说明

方法的参数不仅仅只能是简单类型,它可以是类也可以是集合 ,但是map作为参数是不建议使用的。不管是那种参数都可以做增删改查操作。下面举两个例子。看着代码来理解会更容易。

StudentDao接口要添加的代码

//java对象作为参数
    List<Student> selectStudents(Student student);
    //用map作为参数  不建议使用
    List<Student> selectMap(Map<String,Object> map);
    // 修改操作
    int updateStudent(Student student);

StudentDao.xml文件要写的代码

<!-- 一个Java对象作为方法的参数,使用对象的属性作为参数值使用
            简单的语法 #{属性名},mybatis调用此属性的getXXX()方法来获取属性值
    -->
    <!--根据传入的参数name和age,查询传入参数name和age的人的个人信息-->
    <select id="selectStudents" resultType="com.liuhaiyang.domain.Student">
        select * from student where name=#{name} or age=#{age}
    </select>
    <!-- 下面是完整版本的,后面的内容基本是可以省略不写的
    <select id="selectStudents" resultType="com.liuhaiyang.domain.Student">
         select * from student where name=#{name,javaType=java.lang.String,jdbcType=VARCHAR}
                                 or age=#{age,javaType=java.lang.Integer,jdbcType=INTEGER}
    </select>-->


<!--    map作为传参  不建议使用-->
    <!--根据传入的参数name和age,查询他们的个人信息-->
    <select id="selectMap" resultType="com.liuhaiyang.domain.Student">
        select * from student where name=#{myname} or age=#{myage}
    </select>

<!--根据id修改数据库的name和age-->
    <update id="updateStudent">
        update student set name=#{name},age=#{age} where id=#{id}
    </update>

测试代码

 @Test
    public void selectObject(){
        SqlSession session =MybatisUtils.getSqlSession();
        StudentDao stu=session.getMapper(StudentDao.class);
        Student student=new Student();  
        student.setName("张三");  
        student.setAge(23);
        List<Student> st= stu.selectStudents(student);//查询名字叫张三 或者年龄等于23的人的个人信息
        st.forEach(s -> System.out.println(s));
        session.close();
    }
    @Test
    public void TestMap(){
        SqlSession session=MybatisUtils.getSqlSession();
        StudentDao dao=session.getMapper(StudentDao.class);
        Map<String,Object> map=new HashMap<>();
        map.put("myname","王五");
        map.put("myage",22);
       List<Student> stu= dao.selectMap(map);  //查询名字叫王五 或者年龄等于22的人的个人信息
        stu.forEach(s->System.out.println(s));
    }
    @Test
    public void Testupdate(){
        SqlSession session = MybatisUtils.getSqlSession();
        StudentDao dao=session.getMapper(StudentDao.class);
        Student student=new Student();
        student.setAge(23);
        student.setName("刘海洋");
        student.setId(10001);
        student.setEmail("liuhaiyang@qq.com");  //把id等于10001的人name改为“刘海洋”,age改为23
        int a=dao.updateStudent(student);
        session.commit();
        System.out.println(a);
        session.close();
    }

运行结果

selectStudents类

 selectMap类

updateStudent类

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值