MyBatis获取参数值的五种情况分析(推荐)

 更新时间:2024年11月21日 11:16:15   作者:雷神乐乐  
本文通过实例代码给大家介绍MyBatis获取参数值的五种情况分析,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

MyBatis获取参数值的两种方式:${}和#{}
${}本质:字符串拼接
#{}本质:占位符赋值

MyBatis获取参数值的各种情况:

1. mapper接口方法的参数为单个的字面量类型:

可以通过${}和#{}以任意的名称获取参数值,但是需要注意${}的单引号问题

ParameterMapper接口:

User getUserByUsername(String username);

ParameterMapper.xml:

<select id="getUserByUsername" resultType="User">
    <!-- select * from t_user where username = #{username};-->
    select * from t_user where username = '${username}';
</select>

ParameterMapperTest:

@Test
public void testGetUserByUsername() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    User user = mapper.getUserByUsername("admin");
    System.out.println(user);
}

2. mapper接口方法的参数为多个时:

此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储

a>以arg0,arg1...为键,以参数为值

b>以param1,param2...为键,以参数为值

一次只需要通过#{}和${}以键的方式访问即可,但是需要注意${}的单引号问题

ParameterMapper接口:

User checkLogin(String username, String password);

ParameterMapper.xml:

<select id="checkLogin" resultType="User">
    <!-- select * from t_user where username = '${arg0}' and password = '${arg1}';-->
    select * from t_user where username = #{arg0} and password = #{arg1};
</select>

ParameterMapperTest:

@Test
public void testCheckLogin() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    User user = mapper.checkLogin("admin", "123456");
    System.out.println(user);
}

3. 若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储:

只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题

ParameterMapper接口:

User checkLoginByMap(Map<String, Object> map);

ParameterMapper.xml:

<select id="checkLoginByMap" resultType="User">
    select *
    from t_user
    where username = #{username}
      and password = #{password};
</select>

ParameterMapperTest:

@Test
public void testCheckLoginByMap() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    HashMap<String, Object> map = new HashMap<>();
    map.put("username", "admin");
    map.put("password", "123456");
    User user = mapper.checkLoginByMap(map);
    System.out.println(user);
}

4. mapper接口方法的参数是实体类类型的参数:

只需要通过#{}和${}以属性值的方式访问值即可,但是需要注意${}的单引号问题

ParameterMapper接口:

int insertUser(User user);

ParameterMapper.xml:

<insert id="insertUser">
    insert into t_user
    values (null, #{username}, #{password}, #{age}, #{sex}, #{email});
</insert>

ParameterMapperTest:

@Test
public void testInsertUser() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    int num = mapper.insertUser(new User(null, "李四", "789789", 25, "男", "456123@qq.com"));
    System.out.println(num);
}

5. 使用@Param注解命名参数:

此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储

a>以@Param注解的值为键,以参数为值

b>以param1,param2...为键,以参数为值

因此只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题

ParameterMapper接口:

User checkLoginByParam(@Param("username") String username, @Param("password") String password);

ParameterMapper.xml:

<!--User checkLoginByParam(@Param("username") String username, @Param("password") String password);-->
<select id="checkLoginByParam">
    select *
    from t_user
    where username = #{username}
      and password = #{password};
</select>

ParameterMapperTest:

@Test
public void testCheckLoginByParam() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    User user = mapper.checkLoginByParam("admin", "123456");
    System.out.println(user);
}

总结:

上面的五种情况想要记清楚还是比较难的,所以我们可以分为两种情况:

一种是在参数中加上@Param

一种是使用属性值

到此这篇关于MyBatis获取参数值的五种情况的文章就介绍到这了,更多相关MyBatis获取参数值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解java关于对象的比较

    详解java关于对象的比较

    这篇文章主要为大家介绍了java关于对象的比较,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Spring如何集成ibatis项目并实现dao层基类封装

    Spring如何集成ibatis项目并实现dao层基类封装

    这篇文章主要介绍了Spring如何集成ibatis项目并实现dao层基类封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • idea 有时提示找不到类或者符号的解决

    idea 有时提示找不到类或者符号的解决

    这篇文章主要介绍了idea 有时提示找不到类或者符号的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Spring web集成rabbitmq代码实例

    Spring web集成rabbitmq代码实例

    这篇文章主要介绍了Spring web集成rabbitmq代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • spring validation多层对象校验教程

    spring validation多层对象校验教程

    这篇文章主要介绍了spring validation多层对象校验教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • java中的interface接口实例详解

    java中的interface接口实例详解

    这篇文章主要介绍了 java中的interface接口实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • Spring Boot整合FTPClient线程池的实现示例

    Spring Boot整合FTPClient线程池的实现示例

    这篇文章主要介绍了Spring Boot整合FTPClient线程池的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Spring Boot接口幂等插件用法示例解析

    Spring Boot接口幂等插件用法示例解析

    这篇文章主要介绍了Spring Boot接口幂等插件用法示例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 基于RestTemplate的使用方法(详解)

    基于RestTemplate的使用方法(详解)

    下面小编就为大家带来一篇基于RestTemplate的使用方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Java C++题解leetcode902最大为N的数字组合数位DP

    Java C++题解leetcode902最大为N的数字组合数位DP

    这篇文章主要为大家介绍了Java C++题解leetcode902最大为N的数字组合数位DP,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论