
本文共 4442 字,大约阅读时间需要 14 分钟。
文章目录
1,单个参数:mybatis不会做特殊处理
#{参数名/任意名}:取出参数值。
按照的思路
我们只需要修改EmployeeMapper.java和EmployeeMapper.xml和测试类MyBatisTest.java即可EmployeeMapper.java
public interface EmployeeMapper { public Employee getEmpByName(String name);}
EmployeeMapper.xml
>
MyBatisTest.java
@Test public void test04() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //1、获取到的SqlSession不会自动提交数据 SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //单个参数 Employee employee=mapper.getEmpByName("zlj"); System.out.println(employee); }finally{ openSession.close(); } }
结果

结果我们知道在EmployeeMapper.xml中的查询语句中无论#[]中的值是否是EmployeeMapper.java中传入参数的值,仍然可以查询到结果,因为单个参数:mybatis不会做特殊处理
2,多个参数:mybatis会做特殊处理。
多个参数会被封装成 一个map,
key:param1…paramN,或者参数的索引也可以 value:传入的参数值 #{}就是从map中获取指定的key的值;EmployeeMapper.java
public interface EmployeeMapper { public Employee getEmpByIdAndLastName1(Integer id,String lastName); public Employee getEmpByIdAndLastName2(@Param("id")Integer id,@Param("lastName")String lastName); public Employee getEmpByIdAndLastName3(Integer id,String lastName);}
EmployeeMapper.xml
>
MyBatisTest.java
@Test public void test04() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //1、获取到的SqlSession不会自动提交数据 SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //多个参数 Employee employee2=mapper.getEmpByIdAndLastName2(1, "zlj"); System.out.println(employee2); Employee employee3=mapper.getEmpByIdAndLastName3(1, "zlj"); System.out.println(employee3); Employee employee1=mapper.getEmpByIdAndLastName1(1, "zlj"); System.out.println(employee1); }finally{ openSession.close(); } }
结果

结果可知道多个参数传进,多个参数会被封装成 一个map
key——》param1…paramN,或者参数的索引也可以 value——》:传入的参数值(#{param1}) #{}就是从map中获取指定的key的值; 多个参数:mybatis会做特殊处理
异常: org.apache.ibatis.binding.BindingException: Parameter ‘id’ not found. Available parameters are [1, 0, param1, param2] 操作: 方法: public Employee getEmpByIdAndLastName1(Integer id,String lastName); 取值:#{id},#{lastName}
如上操作就会报上述异常3,命名参数 :明确指定封装参数时map的key;@Param(“id”)
多个参数会被封装成 一个map, key:使用@Param注解指定的值 value:参数值 #{指定的key}取出对应的参数值
在上述中已经提到代码演示,这里不再赘述4,POJO
如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo; #{属性名}:取出传入的pojo的属性值
EmployeeMapper.java
public interface EmployeeMapper { //以下测试POJO演示 public Employee getEmpByPOJO(Employee employee);
EmployeeMapper.xml
>
MyBatisTest.java
@Test public void test04() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //1、获取到的SqlSession不会自动提交数据 SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //POJO演示 Employee employee=new Employee(1,"zlj","22.@qq","add"); Employee employee2=mapper.getEmpByPOJO(employee); System.out.println(employee2); }finally{ openSession.close(); } }
结果

结果说明,如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo; #{属性名}:取出传入的pojo的属性值
5,Map
如果多个参数不是业务模型中的数据,没有对应的pojo,不经常使用,为了方便,我们也可以传入map #{key}:取出map中对应的值
EmployeeMapper.java
public interface EmployeeMapper { //以下测试Map演示 public Employee getEmpByMap(Mapmap);}
EmployeeMapper.xml
>
MyBatisTest.java
@Test public void test04() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //1、获取到的SqlSession不会自动提交数据 SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //Map演示 Mapmap = new HashMap<>(); map.put("id", 2); map.put("lastName", "Tom"); map.put("tableName", "employee"); Employee employee = mapper.getEmpByMap(map); System.out.println(employee); }finally{ openSession.close(); } }
结果

结果说明我们成功传入了map的值,#{key}:取出map中对应的值
6,参数值的获取
7,#{}:更丰富的用法
发表评论
最新留言
关于作者
