提示:这里简述项目相关背景:
mybatis查询数据
问题描述:
提示:这里描述项目中遇到的问题:
org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table ‘jt.demouser’ doesn’t exist The error may exist in mybatis/mappers/DemoUserMapper.xml The error may involve defaultParameterMap The error occurred while setting parameters SQL: select * from DemoUser Cause: java.sql.SQLSyntaxErrorException: Table ‘jt.demouser’ doesn’t exist原因分析一:
提示:xml配置文件SQL语句的表名和数据库的不一样
select * from DemoUser
解决方案:
提示:修改xml SQL语句的表名
问题描述:
提示:这里描述项目中遇到的问题:
org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table ‘jt.demouser’ doesn’t exist The error may exist in mybatis/mappers/DemoUserMapper.xml The error may involve defaultParameterMap The error occurred while setting parameters SQL: select * from DemoUser Cause: java.sql.SQLSyntaxErrorException: Table ‘jt.demouser’ doesn’t exist原因分析二:
提示:mybatis默认单值传参,多值需要封装
org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'sex' not found. Available parameters are [arg1, arg0, param1, param2]
解决方案一:
封装为实体对象
@Test
public void findSA(){
// 保证每个线程都能获取一个链接
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper =
sqlSession.getMapper(DemoUserMapper.class);
// 编程习惯:面向对象
DemoUser demoUser = new DemoUser();
demoUser.setSex("女").setAge(18);
List list = demoUserMapper.findSA(demoUser);
System.out.println(list);
// 关闭会话
sqlSession.close();
}
解决方案二:
封装为Map集合
@Test
public void findSA2() {
// 保证每个线程都能获取一个链接
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper =
sqlSession.getMapper(DemoUserMapper.class);
// 编程习惯:封装为Map集合
Map map = new HashMap<>();
map.put("sex", "女");
map.put("age", 18);
List list = demoUserMapper.findSA2(map);
System.out.println(list);
// 关闭会话
sqlSession.close();
}
解决方案三:
用@Param注解
@Test
public void findSA3() {
// 保证每个线程都能获取一个链接
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper =
sqlSession.getMapper(DemoUserMapper.class);
String sex = "女";
Integer age = 18;
List list = demoUserMapper.findSA3(sex, age);
System.out.println(list);
// 关闭会话
sqlSession.close();
}
}
// 编程习惯:用@Param注解 List总结:findSA3(@Param("sex") String sex,@Param("age") Integer age);
规则: mybatis如果遇到多值传参时,默认条件是采用下标的方式获取数据.
mybatis天生只支持单值传参,如果遇到多值的问题,则应该将多值封装为单值.



