首页 > 其他分享 >Mybatis (五) Mybatis参数传递

Mybatis (五) Mybatis参数传递

时间:2023-01-14 22:10:27浏览次数:53  
标签:username map Map List 参数传递 user Mybatis password


Mybatis参数传递


☞ ​​博客导航​​,​​带你有序的阅读和学习!​


文章目录

  • ​​Mybatis参数传递​​

  • ​​概述​​
  • ​​单个参数​​
  • ​​多个参数​​
  • ​​方法1:使用方法参数下标​​
  • ​​方法2:使用注解 @Param 别名​​
  • ​​方法3:使用实体​​
  • ​​方法4:使用Map​​
  • ​​方法5:使用实体和@Param​​
  • ​​方法6:使用Map和@Param​​
  • ​​可迭代对象​​
  • ​​传递List​​
  • ​​使用Set​​
  • ​​传递数组​​
  • ​​传递Map​​
  • ​​传递List-Map​​

概述

参数传递在Mybatis中也是非常重要的。存在诸多情况,如下所介绍的单个参数,多个参数,对象,集合和数组等。

1.单个的参数Mybatis不会做特殊处理
#{这里随便写什么都可以} 它都能把这里面的值取到
2.传入对象POJO(普通的java类)..
#{对象的属性名称}
3.多个参数。Mybatis会做特殊处理。会把传入的参数自动封装成Map类型
Map 的key值就是从param1...paramN ..
map.put("param1",name)
map.put("param2,id")
@param("name") 可以使用这个注解 来自定义Map封装数据的key值。
4.直接传入Map
5.Collection(集合)类型(List,Set) ,数组。
Mybatis也会做特殊处理。。
如果是List或者Set 封装到map中
如果是数组
map.put("array",你传入的数组)

单个参数

Mapper接口的方法:

List<User> findUsersByUsername(String username);

Mapper.xml文件:

<select id="findUsersByUsername" resultType="user">
select
<include refid="Base_Column_List"/>
from tb_user
<where>
username = #{value}
</where>
</select>

注意:

其中方法名和id一致,#{}中的参数名与方法中的参数名k可以不一致, 映射结果的时候,select 后的字段列表要和bean中的属性名一致, 如果不一致的可以用 as 来补充,特殊的也可以再mybatis中启用驼峰,比如create_time 和 createTime;

多个参数

方法1:使用方法参数下标

Mapper接口的方法:

List<User> findUsersByUsernamePassword1(String username, String password);

对应的Mapper.xml:

<!--方法1.1-->
<select id="findUsersByUsernamePassword1" resultType="user" >
select * from tb_user where username = #{arg0} and password = #{arg1}
</select>

<!--方法1.2-->
<select id="findUsersByUsernamePassword1" resultType="user" >
select * from tb_user where username = #{0} and password = #{1}
</select>

注意:

有 些版本在使用上有不同,我使用的是 org.mybatis:mybatis:3.5.2版本,需要使用方法1.1。

方法2:使用注解 @Param 别名

Mapper接口的方法:

List<User> findUsersByUsernamePassword2(@Param("username") String username,
@Param("password") String password);

对应的Mapper.xml文件:

<select id="findUsersByUsernamePassword2" resultType="user">
select * from tb_user where username = #{username} and password = #{password}</select>

方法3:使用实体

Mapper接口的方法:

List<User> findUsersByUsernamePassword3(User user);

// 调用方式
@Test
public void testFindUsersByUsernamePassword3(){
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("admin");
user.setPassword("admin");
List<User> users = mapper.findUsersByUsernamePassword3(user);
System.out.println(users);
sqlSession.close();
}

Mapper.xml文件:

<select id="findUsersByUsernamePassword3" resultType="user" parameterType="user">
select * from tb_user where username = #{username} and password = #{password}
</select>

方法4:使用Map

Mapper接口的方法:

/*根据username和password查询*/
List<User> findUsersByUsernamePassword(Map map);

//-----调用方式
@Test
public void testFindUsersByUsernamePassword() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("username", "admin");
map.put("password", "admin");
List<User> users = mapper.findUsersByUsernamePassword(map);
System.out.println(users);
sqlSession.close();
}

/*
其中Map是mybatis自己配置好的直接使用就行。map中key的名字就是在#{}使用的个,map如何封装就不用了管了
*/

对应Mapper.xml文件:

<select id="findUsersByUsernamePassword" resultType="user" >
select * from tb_user where username = #{username} and password = #{password}
</select>

注意:

这里使用Map来读取参数,需要注意的是,使用Map可以像实体那样访问,这里的key就像实体的属性名。

方法5:使用实体和@Param

Mapper接口的方法:

List<User> findUsersByUsernamePassword4(@Param("user") User user);

对应Mapper.xml文件:

<select id="findUsersByUsernamePassword4" resultType="user">
select * from tb_user where username = #{user.username}
and password = #{user.password}
</select>

注意:

如果使用注解结合实体的方式来传参数的话,那么就需要使用实体.属性名的方式来读取参数。

方法6:使用Map和@Param

Mapper接口的方法:

List<User> findUsersByUsernamePassword5(@Param("map") Map map);

对应的Mapper.xml文件:

<select id="findUsersByUsernamePassword5" resultType="user">
select * from tb_user where username = #{map.username}
and password = #{map.password}
</select>

使用方法和方法5类似,不再赘述。

可迭代对象

传递List

前面的动态SQL中使用到了传递List的情况,这小节主要把几种迭代对象都使用一遍。

Mapper接口方法:

List<User> findUsersByIds(List<Integer> id);

对应的Mapper.xml文件:

<!--select * from tb_user WHERE id in ( ? , ? , ? ) -->
<select id="findUsersByIds" resultType="user">
select * from tb_user
<where>
id in
<foreach collection="list" item="ite" open="(" separator="," close=")">
#{ite}
</foreach>
</where>
</select>

注意:List集合可以使用list,也可以使用collection。

使用Set

Mapper接口的方法:

List<User> findUsersByIds1(Set<Integer> ids);

对应的Mapper.xml文件

<select id="findUsersByIds2" resultType="user">
select * from tb_user where id in
<foreach collection="collection" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

注意:Set集合没有像List那样,Set只能使用collection。

传递数组

Mapper接口的方法:

List<User> findUsersByIds2(Integer[] ids);

对应的Mapper.xml文件

<select id="findUsersByIds1" resultType="user">
select * from tb_user
where id in
<foreach collection="array" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

传递Map

使用Map来做保存操作:

void saveUserByMap1(Map<String,Object> map);

对应的Mapper.xml文件:

<select id="saveUserByMap1">
insert into tb_user (user_id,username,password) values
(#{user_id},#{username},#{password});
</select>

单元测试:

@Test
public void testSaveUserByMap1(){
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("user_id","root");
map.put("username","root");
map.put("password","root");
mapper.saveUserByMap1(map);
sqlSession.close();
}

传递List-Map

这里使用List和Map结合使用实现批量操作

Mapper接口文件的方法:

void saveUserByMap(List<Map<String,Object>> listMap);

对应的Mapper.xml文件:

<!--insert into tb_user (user_id,username,password)values (?,?,?) , (?,?,?) -->
<select id="saveUserByMap">
insert into tb_user (user_id,username,password)values
<foreach collection="collection" item="item" separator=",">
(#{item.userId},#{item.username},#{item.password})
</foreach>
</select>

单元测试:

@Test
public void testSaveUserByMap(){
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> map = new HashMap<>();
map.put("userId","mybatis1");
map.put("username","mybatis1");
map.put("password","mybatis1");

Map<String,Object> map1 = new HashMap<>();
map1.put("userId","mybatis2");
map1.put("username","mybatis2");
map1.put("password","mybatis2");
list.add(map);
list.add(map1);
mapper.saveUserByMap(list);
sqlSession.close();
}

源码地址:

​https://gitee.com/ooyhao/JavaRepo_Public/tree/master/Mybatis​


标签:username,map,Map,List,参数传递,user,Mybatis,password
From: https://blog.51cto.com/u_12131813/6007897

相关文章

  • Mybatis (三) Mybatis映射文件
    Mybatis映射文件☞博客导航,带你有序的阅读和学习!文章目录​​Mybatis映射文件​​​​基本CRUD​​​​增加​​​​增加并返回ID​​​​删除​​​​更新​​​​查询​......
  • Shiro+SpringBoot+Mybatis+Redis实现权限系统
     这个项目涉及到的技术:SpringBoot,Thymeleaf,MyBaits,Redis,Shiro,JavaMail,EasyUI,Excel导入、导出 下面展示一下界面: 主页:  用户列表:  角色权限授予: 资源列表:  用户角......
  • mybatis 传入多个list
    mybatis传入多个list集合做参数,很多文章的介绍都是不能实现的,千篇一律的复制,有很大的误导性,这里说一下如何实现:这里建议你传递对象过来,比如Person对象,里面加入Listlist1;L......
  • Mybatis-plus条件构造器QueryWrapper的简单用法
    Mybatis-plus条件构造器QueryWrapper的简单用法1.首先来看下QueryWrapper有哪些常用方法查询方式 说明setSqlSelect 设置SELECT查询字段where WHERE语句,拼接+?WHE......
  • org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis
    前言今天运行代码,以前好好的,今天突然就报空指针,然后附加这个错误,错误原因可能很多,这里补充一个新的。org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg......
  • MyBatis choose 和 bind
    1.前言本小节我们将一起学习choose和bind标签。choose标签是if标签的增强版,适用于更加复杂的条件判断逻辑;而bind标签则可以在OGNL上下文环境中新绑定一个变量,供......
  • 46、商品服务---品牌管理---关联属性的删除&mybatisplus的foreach
    1、controller层注意Post请求前端传过来json数据,后端必须加上@RequestBody来解析同时这个VO是我们自己编写的,用来接受前端数据,然后再serviceImpl再重新给相应的实体类赋......
  • 整合mybatis实现简单的增删改查
    mybatis配置相关代码配置<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://......
  • 学习笔记——Mybatis中缓存机制
    2023-01-12一、Mybatis中缓存机制1、一级缓存(1)概述:一级缓存(即本地缓存或SqlSession级别缓存)(2)特点:①一级缓存默认开启②不能关闭③可以清空(3)缓存原理①当第一次获......
  • MyBatis4
      表关联=左连接,右连接,全连接,内连接1.准备表Teacher教师表列名类型备注tea_idint主键tea_namevarchar(32)名称tea_professi......