栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis参数详解(四天学会MyBatis之第五天)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis参数详解(四天学会MyBatis之第五天)

目录

1.parameterType

2.dao接口方法参数一个简单类型的参数

3.dao接口方法中有多个简单类型的参数

4.dao接口方法使用一个对象作为参数

5.dao接口中多个简单类型的参数,使用位置

6.dao接口参数是一个Map


参数就是通过java程序把数据传入到mapper文件中的sql语句。参数主要是指dao接口方法的形参

1.parameterType

parameterType:表示参数的类型,指定dao方法的形参数据类型。这个形参的数据类型是给mybatis使用。mybatis是给sql语句的参数赋值时使用。

PreparedStatement.setXXX(位置, 值)

要想理解这里必须对JDBC中的PreparedStatement有足够的了解,推荐看我之前写的一篇文章

一文学会JDBC(两万字,适用于新手)_ypxcan的博客-CSDN博客

我们来看mapper文件中select查询语句

    
        select id, name, email, age from student where id = #{studentId}
    

 我们在测试类中测试一下

发现是可以执行的

但是我们发现一个问题,好像parameterType不写也是可以的,没错,parameterType不是强制的,mybatis通过反射机制是可以得到参数类型的,绝大多数情况下我们不需要写这个参数。

2.dao接口方法参数一个简单类型的参数

如果dao接口中方法的形参是一个简单类型,那么mapper文件中,获取这个参数值,使用#{任意字符}

简单类型:八种基本类型 + String

我们来讲一个例子,首先在dao接口中定义一个方法

package com.lu.dao;

import com.lu.entity.Student;

public interface StudentDao {

    Student selectStudentByEmail(String email);
}

在mapper文件中来写查询代码





    
    
    
        select id, name, email, age from student where name = #{studentName} or age = #{studentAge}
    

在测试类中测试

    @Test
    public void testSelectByNameOrAge() {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao dao = session.getMapper(StudentDao.class);
        List students = dao.selectByNameOrAge("张三", 25);
        students.forEach(student -> System.out.println(student));
        session.close();
    }

控制台输出:

报错了,mybatis不能识别多个参数,所以这时候我们就需要使用@Param注解

该注解的使用位置在dao接口中

List selectByNameOrAge(@Param("myname") String name, @Param("myage") Integer age);

 当使用了@Param后,例如@Param("myname"),在mapper文件中,使用#{命名的参数},

例如#{myname},那么mapper文件中就需要改成

    
        select id, name, email, age from student where name = #{name} or age = #{age}
    

这里我们只写了name和age,那么测试类中就可以这么写

    @Test
    public void testSelectByObject() {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao dao = session.getMapper(StudentDao.class);

        Student student = new Student();
        student.setName("张三");
        student.setAge(25);
        List students = dao.selectByObject(student);
        students.forEach(stu -> System.out.println(stu));

        session.close();
    }

控制台输出:

可以看到可以正常输出

我们必须明白我们的参数不一定使我们定义的Student实体类,也可以是其他类,只要该类的属性有set和get方法即可

5.dao接口中多个简单类型的参数,使用位置

参数位置:dao接口中方法的形参列表,从左往右,参数位置是0,1,2...

语法格式:#{arg0},#{arg1}

下面来讲一个例子:

我们首先在接口中定义一个方法

    
    List selectByPosition(String name, Integer age);

 mapper文件中

    
        select id, name, email, age from student where name = #{myname} or age = #{myage}
    

 测试类中:

    @Test
    public void testSelectByMap() {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao dao = session.getMapper(StudentDao.class);

        //使用Map传递参数
        Map data = new HashMap<>();
        data.put("myname", "张三");
        data.put("myage", 20);
        List students = dao.selectStudentByMap(data);
        students.forEach(student -> System.out.println(student));

        session.close();
    }

控制台输出:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号