java 获取传入参数_参数获取和参数传递

1、SQL语句中获取参数的两种方式

1)#{key}:获取参数的值,预编译到SQL中。安全。相当于PreparedStatement,利用通配符.

2) ${key}:获取参数的值,拼接到SQL中。有SQL注入问题🔗。相当于Statement,涉及到字符串的拼接,字符串部分一定要注意单引号问题。

select eid,ename,age,sex from emp where eid = ${eid} and ename ='${ename}'

2、不同的参数类型 #{} 和 ${} 的不同取值方式:

1)当传输参数为单个String或者基本数据类型和其包装类

#{}:可以以任意的名字获取参数;

${}:只能以${value}或者${_parameter}获取

select eid,ename,age,sex from emp where eid = ${_parameter}

2)当传输参数为JavaBean时

#{} 和${} 都能够通过属性名直接获取属性值,但还是要注意${} 的单引号问题。

insert into emp values(null, '${ename}', ${age}, '${sex}')

3)当传输多个参数时(以两个参数为例子),mybatis会默认将这些参数放在map集合中:

①键为0,1,2,3...,N-1,以参数为值

②键为param1,param2,param3,....,paramN,以参数为值

#{}:#{0} 、#{1}; 或者 #{param1}、#{param2};

${}:${param1}、${param2},注意${} 的单引号问题

select eid,ename,age,sex from emp where eid = ${param1} and ename = '${param2}'

4)当传输Map参数时

#{}和${} 都可以通过键的名字直接获取值,但注意${} 的单引号问题(需要手动创建map键值对传入)

select eid,ename,age,sex from emp where eid = ${eid} and ename = '${ename}'

5)命名参数

可以通过 @Param("key") 在参数上加上注解,指定键的名字。

#{}和${} 都可以通过键的名字直接获取值,但注意${} 的单引号问题。

select eid,ename,age,sex from emp where eid = #{eid} and ename = #{ename}

6)Collection/Array

会被MyBatis封装成一个map传入, Collection对应的key是collection,Array对应的key是array. 如果确定是List集合,key还可以是list.

packagecom.atguigu.mapper;importjava.util.Map;importorg.apache.ibatis.annotations.Param;importcom.atguigu.bean.Emp;public interfaceParamMapper {//添加员工信息

voidinsertEmp(Emp emp);//根据eid获取员工信息

Emp getEmpByEid(String eid);//根据eid和ename查询员工信息

Emp getEmpByEidAndEname(String eid, String ename);//根据map查询员工信息

Emp getEmpByMap(Mapmap);//根据eid和ename查询员工信息

Emp getEmpByEidAndEnameByParam(@Param("eid")String eid, @Param("ename")String ename);

}

packagecom.atguigu.test;importjava.io.IOException;importjava.io.InputStream;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Test;importcom.atguigu.bean.Emp;importcom.atguigu.mapper.EmpMapper;importcom.atguigu.mapper.ParamMapper;public classTestParam {

@Testpublic void testCRUD() throwsIOException {

InputStream is= Resources.getResourceAsStream("mybatis-config.xml");

SqlSessionFactory sqlSessionFactory= newSqlSessionFactoryBuilder().build(is);//SqlSession sqlSession = sqlSessionFactory.openSession();//需要手动处理事务

SqlSession sqlSession = sqlSessionFactory.openSession(true);//自动处理事务

ParamMapper mapper = sqlSession.getMapper(ParamMapper.class);//1

Emp emp = mapper.getEmpByEid("1");

System.out.println(emp);//2

Emp emp = new Emp(null, "admin", 23, "男");

mapper.insertEmp(emp);

System.out.println(emp.getEid());//3

Emp emp = mapper.getEmpByEidAndEname("1", "张三");

System.out.println(emp);//4

Map map = new HashMap<>();

map.put("eid", "1");

map.put("ename", "张三");

Emp emp=mapper.getEmpByMap(map);//5

Emp emp = mapper.getEmpByEidAndEnameByParam("1", "张三");

System.out.println(emp);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值