1、mybatis分页
1、用limit实现分页
(1)接口
List<User> getUserListByLimit(Map<String,Integer> map);
(2)xml配置
<select id="getUserListByLimit" resultMap="userMap" parameterType="map">
select * from user limit #{startIndex},#{pageSize}
</select>
(3)测试
@Test
public void getUserListByLimit() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> map = new HashMap<>();
map.put("startIndex", 2);
map.put("pageSize", 3);
List<User> userListByLimit = userMapper.getUserListByLimit(map);
for (User user : userListByLimit) {
System.out.println(user);
}
sqlSession.close();
}
2、用RowBounds实现分页
(1)接口
List<User> getUserListByRowBounds();
(2)xml配置
<select id="getUserListByRowBounds" resultMap="userMap">
select * from user
</select>
(3)测试
@Test
public void getUserListByRowBounds(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
RowBounds rowBounds = new RowBounds(1,2);
List<User> userList = sqlSession.selectList("com.francis.dao.UserMapper.getUserListByRowBounds", null, rowBounds);
for (User user : userList) {
logger.info(user);
}
sqlSession.close();
}
3、pageHelper插件实现分页
这是一款很方便的分页插件,使用时记得回来补上笔记
2、使用注解开发
(1)将上一个项目复制过来,并做出如下改变
去掉UserMapper.xml,并在mybatis的主配置文件中删除相应内容,同时,删除log4j的配置文件,将主配置文件中的日志实现改为标准的日志工厂。
准备工作完成!开始开发
(1)编写接口
package com.francis.dao;
import com.francis.pojo.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
/**
* @author ZQ
* @create 2021-04-29-15:52
*/
public interface UserMapper {
@Select("select * from user ")
List<User> getUserList();
}
(2)在主配置文件中配置mapper
<mappers>
<mapper class="com.francis.dao.UserMapper"/>
</mappers>
(3)测试
@Test
public void getUserList(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
可以发现,之前存在的属性名和字段名不一致的问题没有解决,故这种方式只能完成一些简单的功能,不推荐使用。
1、CRUD
在刚开始学习mybatis的时候提到过,mybatis的增删改需要手动提交事务,对应的数据才会持久化到数据库,那是因为我们在实例化sqlSession的时候,没有将autoCommit的值设置为true,其默认值为false导致的。所以我们可以在获取sqlSession的工具类中,将autoCommit设置为true。
至于CRUD能举一反三,就补贴代码了。