五、MyBatis获取参数值的两种方式以及传参情况

简介: ${}的本质就是字符串拼接,#{}的本质就是占位符赋值。

MyBatis获取参数值的两种方式:${}和#{}

(1) ${}的本质就是字符串拼接,#{}的本质就是占位符赋值。

(2) ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号。

<select id="selectPersonByName" resultType="Person">
        select * from t_person where name = '${name}'
</select>

(3) #{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号。

    <select id="selectPersonByName" resultType="Person">
        <!--select * from t_person where name = '${name}'-->
        select * from t_person where name = #{name}
    </select>

传参情况

演示环境

      以下演示均已#{}方式获取参数。

数据库表

2345_image_file_copy_89.jpg

pojo

2345_image_file_copy_90.jpg

映射接口

2345_image_file_copy_91.jpg

1.单个字面量类型的参数

      以查询为例,通过name查出一条数据。

接口方法

public interface PersonMapper {
    //按name查询
    Person selectPersonByName(String name);
}

映射文件

<select id="selectPersonByName" resultType="Person">
        select * from t_person where name = #{name}
</select>

测试方法

    PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        mapper.selectPersonByName("zhangsan");

说明

      当参数是一个的时候#{}中可以填写任意值,比如下方的写法也是可以获取的,但最好写的见名知意。

<select id="selectPersonByName" resultType="Person">
        select * from t_person where name = #{aaa}
</select>

2.多个字面量类型的参数

      以按name和age两个参数进行查询,当然多个参数也是类似的写法,只是我演示所用的表只有两个数据项。

接口方法

public interface PersonMapper {
    //按name和age进行查询
    Person selectPersonByNameAge(String name,Integer age);
}

映射文件

(1)方式一

<select id="selectPersonByNameAge" resultType="Person">
        select * from t_person where name = #{arg0} and age=#{arg1}
</select>

(2)方式二

<select id="selectPersonByNameAge" resultType="Person">
        select * from t_person where name = #{param1} and age=#{param2}
</select>

(3)方式三

<select id="selectPersonByNameAge" resultType="Person">
        select * from t_person where name = #{arg0} and age=#{param2}
</select>

测试方法

    PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        mapper.selectPersonByNameAge("zhangsan",20);

说明

      若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1…为键,以参数为值;以param1,param2…为键,以参数为值;

      因此只需要通过#{}访问map集合的键就可以获取相对应的值。

      注意${}需要手动加单引号,param是从1开始的。

3.map集合类型的参数

      这次以插入一条数据为例,插入name=“李四” age=23。

接口方法

public interface PersonMapper {
    //Map
    int insertPersonMap(Map<String,Object> map);
}

映射文件

    <insert id="insertPersonMap">
        insert into t_person values(#{key1},#{key2})
    </insert>

测试方法

    PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
    HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("key1","李四");
        map.put("key2",23);
        mapper.insertPersonMap(map);

说明

      若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中只需要通过和#{}访问map集合的就可以获取相对应的值,注意${}需要手动加单引号

4.实体类类型的参数

      以插入一个Person对象为例,new Person(“wangwu”,66)

接口方法

public interface PersonMapper {
    //传参对象
    int insertPerson(Person person);
}

映射文件

 <insert id="insertPerson">
        insert into t_person values(#{name},#{age})
</insert>

测试方法

    PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        mapper.insertPerson(new Person("wangwu",66));

说明

      若mapper接口中的方法参数为实体类对象时,此时可以使用#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号。

5.使用@Param标识参数

删除年龄为66岁的。

接口方法

public interface PersonMapper {
    //@param
    int deletePersonByAge(@Param("Abb") Integer age);
}

映射文件

(1)方式一

    <delete id="deletePersonByAge">
    <!--最好见名知意,这里为了演示-->
        delete from t_person where age=#{Abb}
    </delete>

(2)方式二

    <delete id="deletePersonByAge">
        delete from t_person where age=#{param1}
    </delete>

测试方法

    PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        mapper.deletePersonByAge(66);

说明

      可以通过@Param注解标识mapper接口中的方法参数。

(1)此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;

(2)以param1,param2…为键,以参数为值;只需要通过和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。

相关文章
|
6月前
|
XML SQL Java
Mybatis 传参方式
多个参数,那也就是使用注解@Param取名字解决即可。
35 1
|
6月前
|
SQL Java 数据库连接
初识MyBatis(搭建MyBatis、简单增删改查、核心配置文件讲解及获取参数值)
初识MyBatis(搭建MyBatis、简单增删改查、核心配置文件讲解及获取参数值)
115 0
|
6月前
|
SQL Java 数据库连接
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
770 0
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
|
6月前
|
SQL Java 数据库连接
Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式
【1月更文挑战第3天】 一、核心配置文件详解 二、默认的类型别名 三、MyBatis的增删改查 四、MyBatis获取参数值的两种方式 1、单个字面量类型的参数 2、多个字面量类型的参数 3、map集合类型的参数 4、实体类类型的参数 5、使用@Param标识参数
109 2
Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式
|
15天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
5月前
|
SQL Java 数据库连接
MYBATIS获取参数值
MYBATIS获取参数值
MYBATIS获取参数值
|
1月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
32 10
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
4月前
|
Java 数据库连接 mybatis
Mybatis查询传递单个参数和传递多个参数用法
Mybatis查询传递单个参数和传递多个参数用法
65 11
|
4月前
|
SQL
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注