使用mybatis框架实现带条件查询-多条件(传入Map集合)
我们发现我们可以通过传入javaBean的方式实现我们的需求,但是就两个条件,思考:现在就给他传入一个实体类,对系统性能的开销是不是有点大了。
现在改用传入Map集合的方式;
奥!对了,在创建map集合时候,居然报错了,The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class。
是因为myeclipse的jdk和你安装的jdk的版本不一致导致的,只要将两者调成一致的就可以了。
我这里将jdk的版本都调成了1.6的了,大家没有遇到这种问题最好了,如果遇到了,随便,只要将jdk的版本调成一致的就ok。
下面接着正题:
UserMapper.java
UserMapper.xml
1 <!-- 按照名称查询,用户角色,查询用户列表 mybatis给最基础的数据类型都内建了别名,对大小写是不敏感的 使用map集合的方式--> 2 <select id="getUserListByUserName3" parameterType="map" resultType="User" > 3 select * from smbms_user 4 where username like CONCAT ('%',#{userName1},'%') 5 and userRole = #{userRole1} 6 </select>
编写对应的测试类:
1 @Test 2 public void test7() { 3 String userNameString="赵"; 4 Integer userRole=2; 5 Map<String, String> map = new HashMap<String, String>(); 6 map.put("userName1", "赵"); 7 map.put("userRole1", "3"); 8 9 SqlSession sqlSession = null; 10 java.util.List<User> userList2 = new ArrayList<User>(); 11 try { 12 sqlSession = MyBatisUtil.createSqlSession(); 13 //使用mapper映射的方式实现 14 //userList2 = sqlSession.selectList("cn.smbms.dao.user.UserMapper.getUserListByUserName",userNameString); 15 //调用mapper接口的方式实现 16 userList2 = sqlSession.getMapper(UserMapper.class).getUserListByUserName3(map); 17 int size = userList2.size(); 18 mlogger.info("获取到的记录数是:" + size); 19 20 } catch (Exception e) { 21 // TODO: handle exception 22 } finally { 23 // 最后一定要注意:关闭会话 24 MyBatisUtil.closeSqlSession(sqlSession); 25 26 } 27 for (User user2 : userList2) { 28 mlogger.info("用户名:" + user2.getUserName() + ",密码:" + user2.getUserPassword()); 29 } 30 31 }
最终的运行结果:
查询数据库: