当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 23:01:47 Java

{}和${}的区别在于,{}的本质是占位符赋值,而${}的本质是字符串拼接。${}使用字符串拼接来拼接sql,如果是字符串类型或者日期类型的字段。赋值时,需要手动加上单引号{},使用占位符赋值拼接sql。这时候给字符串类型或者日期类型的字段赋值的时候,可以自动加上单引号。如何使用${}和#{}获取Parameter值获取单个字面量类型参数这时候可以使用#{}和${}获取任意名称的参数值(最好看名称).注意${}需要手动加上单引号来写mapper接口:publicclassUserMapper{//通过idUsergetUserById(Integerid)查询用户信息;}复制代码写映射文件:SELECT*FROMuserWHERE`id`=#{id}复制代码或SELECT*FROMuserWHEREid='${id}'复制代码Multipleliteraltypeparameters如果mapper接口中有多个方法参数,MyBatis会自动将这些参数放在一个arg0的map集合中,arg1...作为键和参数作为值;使用param1,param2...作为键,参数作为值;因此,你只需要通过${}和#{}访问map集合的key,就可以得到对应的values。注意${}需要手动加上单引号。使用arg或参数。需要注意的是,arg是从arg0开始的,param是从param1开始的。写mapper接口:publicclassUserMapper{//按姓名和年龄查询用户信息UsergetUserByNameAndAge(Stringname,Integerage);}复制代码写映射文件:SELECT*FROMuserWHEREname=#{arg0}ANDage=#{arg1}复制代码或SELECT*FROMuserWHEREname='${param1}'ANDage='${param2}'复制代码图集类型参数如果mapper接口中的方法需要多个参数,这时候可以手动创建一个Map集合,将这些数据放到Map中只需要通过${}和#{}访问Map集合的key即可获取对应的值,注意${}需要手动加单引号写mapper接口:publicclassUserMapper{//通过Map集合获取用户信息UsergetUserByMap(Mapmap);}复制代码写入映射文件:SELECT*FROMuserWHEREname=#{name}ANDpassword=#{password}复制代码或选择*FROMuserWHEREname='${name}'ANDpassword='${password}'复制代码编写测试类:@Testpublicvoidtest(){SqlSessionsqlSession=newSqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml")).openSession(true);UserMappermapper=sqlSession.getMapper(UserMapper.class);Mapmap=newHashMap<>();map.put("name","张三");map.put("password","123456");Useruser=mapper.getUserByMap(map);System.out.println(user);}如果mapper复制实体类类型的参数interface当方法参数为实体类对象时,可以使用${}和#{}通过访问实体类对象中的属性名来获取属性值。注意${}需要手动加单引号写mapper接口:publicclassUser{//通过entityclass添加用户信息voidaddUser(Useruser);}复制代码INSERTINTOuserVALUES(null,#{name},#{age},#{sex},#{account},#{password})复制代码或INSERTINTOuserVALUES(null,'${name}','${age}','${sex}','${account}','${password}')SELECT*FROMuserWHEREname=#{name}ANDpassword=#{password}复制代码或者SELECT*FROMuserWHEREname='${name}'ANDpassword='${password}'复制代码编写测试类:@Testpublicvoidtest(){SqlSessionsqlSession=newSqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml")).openSession(true);UserMappermapper=sqlSession.getMapper(UserMapper.class);mapper.getUserByParam("张三","123456");}处理的情况:实体类类型的参数使用@Param来标识参数