flsh

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();
}

 

posted on 2022-08-28 12:16  小鱼洗香香  阅读(164)  评论(0编辑  收藏  举报

导航