Mybatis的ResultMap与limit分页查询
ResultMap主要解决的是:属性名和字段不一致
如果在pojo中设置的是一个名字,在数据库上又是另一个名字,那么查询出来的结果或者其他操作的结果就为null。
//在pojo中 private String password; private String uname; //在userMapper中 selcet uname,pwd from user; //显示结果 //password==null; //uname==123;
解决办法:
可以手动映射:resultMap
//返回值类型为:resultMap <select id="selectUserById" resultMap="UserMap"> select id , name , pwd from user where id = #{id} </select> //编写resultMap,实现手动映射 <resultMap id="UserMap" type="User"> <!-- id为主键 --> <id column="id" property="id"/> <!-- column是数据库表的列名 , property是对应实体类的属性名 --> <result column="name" property="name"/> <result column="pwd" property="password"/> </resultMap>
limit分页查询
limit语法:
SELECT * FROM table LIMIT stratIndex,pageSize; //stratIndex:从第几个字段开始查询 pageSize:查询多少个字段 SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 #为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. #如果只给定一个参数,它表示返回最大的记录行数目: SELECT * FROM table LIMIT 5; //检索前 5 个记录行 #换句话说,LIMIT n 等价于 LIMIT 0,n。
mapper:
<select id="selectUser" parameterType="map" resultType="user"> select * from user limit #{startIndex},#{pageSize} </select>
接口:
//选择全部用户实现分页 List<User> selectUser(Map<String,Integer> map);
测试类
//分页查询 , 两个参数startIndex , pageSize @Test public void testSelectUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); int currentPage = 1; //第几页 int pageSize = 2; //每页显示几个 Map<String,Integer> map = new HashMap<String,Integer>(); map.put("startIndex",(currentPage-1)*pageSize); //起始位置=(当前页面-1)* 显示多少个字段 map.put("pageSize",pageSize); List<User> users = mapper.selectUser(map); for (User user: users){ System.out.println(user); } session.close(); }