IDEA Java Mybatis传参

本文介绍了Mybatis查询数据库时的五种传参方式,重点讲解了常用的命名传参和对象传参,同时提到了不常用的简单类型传参、位置传参和Map传参及其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis查询数据库进行传参的方式有5种,常用的有两种,其他三种都不常用。现在从简单的一一介绍一下。

第一种:传一个简单类型的参数。不常用。

    注:mybatis把java的基本数据类型和String都叫简单类型。

语法: #{任意字符}

接口中:

 

 public Student selectStudentById(int id);

 

mapper文件中:

 <select id="selectStudentById" resultType="com.gx.pojo.Student">

    select * from student where student_id=#{id}

</select>

 

测试:

public void testSelectStudentById(){

    //获取SqlSession对象

    SqlSession sqlSession = MyBatisUtil.getSqlSession();

    //使用mybatis动态代理

    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

    //执行sql,查询student_id为1003的学生

    Student student = studentDao.selectStudentById(1003);

    //输出

    System.out.println("一个简单类型传参查询的学生="+student);

}

 

结果:

第二种:命名传参,使用到@Param,在接口方法中使用。

    语法:@Param("myName") String name
    接口:
public List<Student> selectMultiParam(@Param("myName") String name, @Param("myAge") int age);

mapper文件:

<select id="selectMultiParam" resultType="com.gx.pojo.Student">

    select * from student where name=#{myName} or age=#{myAge} 

</select>

测试:

public void testSelectMultiParam(){

    //获取SqlSession对象

    SqlSession sqlSession = MyBatisUtil.getSqlSession();

    //使用mybatis动态代理

    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

    //执行sql

    List<Student> listStudent = studentDao.selectMultiParam("鲁班七号",17);

    //关闭SqlSession

    sqlSession.close();

    //遍历

    for (Student stu : listStudent) {

        System.out.println("命名参数查询的学生="+stu);

    }

}

 

结果:

第三种:使用java对象

语法:#{对象属性名称}

接口:

     
public List<Student> selectMultiObject(Student student);

mapper文件:有两种方式,一种详细写法(不常用),还有一种是简化写法(常用)代码下注释有。

注:javaType:Java对象的全限定名称;jdbcType:数据库对应类型名称

<select id="selectMultiObject" resultType="com.gx.pojo.Student">

    select * from student where

              /*name=#{name,javaType=java.lang.String,jdbcType=VARCHAR} or

                  age=#{age,javaType=java.lang.Integer,jdbcType=INTEGER}*/

                  name=#{name} or age=#{age}

     </select>

 

测试:

public void testSelectMultiObject(){
    //获取SqlSession对象
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    //使用mybatis动态代理
    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
    //定义参数
    Student student = new Student();
    student.setName("鲁班大师");
    student.setAge(18);
    //执行sql
    List<Student> listStudent = studentDao.selectMultiObject(student);
    //关闭SqlSession
    sqlSession.close();
    //遍历
    for(Student stu : listStudent){
        System.out.println("对象传参查询的学生="+stu);
    }
}

 

结果:

第四种: 位置传参(按位置获取参数)

语法:

    mybatis.3.4版本以前#{0},#{1}
        mybatis.3.4版本以后#{arg0},#{arg1}

例如:#{0}对应name

 

接口:

public List<Student> selectMultiPosition(String name,Integer age);

 

mapper文件:

<select id="selectMultiPosition" resultType="com.gx.pojo.Student">

    select * from student where name=#{arg0} or age=#{arg1}

</select>

 

测试:

public void testSelectMultiPosition(){

    //获取SqlSession对象

    SqlSession sqlSession = MyBatisUtil.getSqlSession();

    //使用mybatis动态代理

    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

    //执行sql

    List<Student> listStudent = studentDao.selectMultiPosition("鲁班七号",17);

    //关闭SqlSession

    sqlSession.close();

    //遍历

    for(Student stu : listStudent){

        System.out.println("位置传参查询的学生="+stu);

    }

}

结果:

第五种:Map 传参

语法:Map<String,Object> map

接口:

     
public List<Student> selectMultiMap(Map<String,Object> map);

mapper文件:

<select id="selectMultiMap" resultType="com.gx.pojo.Student">

    select * from student where name=#{name} or age=#{age}

</select>

测试:

public void testSelectMultiMap(){

    //获取SqlSession对象

    SqlSession sqlSession = MyBatisUtil.getSqlSession();

    //使用mybatis动态代理

    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

    //定义查询条件

    Map<String,Object> map = new HashMap<>();

    map.put("name","鲁班七号");

    map.put("age",17);

    //执行sql

    List<Student> listStudent = studentDao.selectMultiMap(map);

    //关闭SqlSession

    sqlSession.close();

    //遍历

    for(Student stu : listStudent){

        System.out.println("Map传参查询的学生="+stu);

    }

}

结果:

    总结:

        两种常用传参方法:命名传参、对象传参

        三种不常用的方法:

1)、一个简单参数传参方式

缺点:因为名字可以不一样,所以容易忘记

2)、位置传参

缺点:容易混淆参数位置

3)、Map传参

缺点:可读性差

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值