分页查询是查询中常用的,一般都是查询到数据量大的时候使用,比如查询到100条数据,但是也面只允许一次显示10条数据,这里就需要用到分页查询
这里是那了一点之前写的配合页面的分页查询代码,实现起来实际上大同小异,可以参考一下
下面就按照整体的过程将代码放入
Mapper
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="a"> <!--分页查询--> <select id="selByPage" resultType="com.lin.pojo.User"> select id, login_name loginName, login_pswd loginPswd, name, birthday, reg_time regTime from tb_user_info limit #{start},#{size} </select> <!--查询总记录数--> <select id="countUser" resultType="int"> select COUNT(*) from tb_user_info </select> </mapper>
Service
public interface UserService { /** * 分页查询 * * @param page 当前页数 * @param size 每页显示的记录数 * @return */ Pagination<User> queryByPage(String page, String size); }
ServiceImpl
import com.bjsxt.pojo.Pagination; import com.bjsxt.pojo.User; import com.bjsxt.service.UserService; import com.bjsxt.util.MyBatisUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; public class UserServiceImpl implements UserService { /** * 分页查询 * * @param page 当前页数 * @param size 每页显示的记录数 * @return */ @Override public Pagination<User> queryByPage(String page, String size) { //获取sqlsession 对象 SqlSession session = MyBatisUtil.getSession(); //查询总记录数 int totalCount = session.selectOne("a.countUser"); //创建分页对象 Pagination<User> pagination = new Pagination<>(page, size, totalCount); //进行分页查询 List<User> list = session.selectList("a.selByPage", pagination); //将结果存到分页对象中 pagination.setList(list); //关闭资源 session.close(); //返回 return pagination; } }
servlet
@WebServlet("/userList.action") public class UserServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取从前台传来的分页参数 String page = req.getParameter("page"); String size = req.getParameter("size"); // 创建service对象 UserService userService = new UserServiceImpl(); // 调用方法得到查询结果 Pagination<User> pagination = userService.queryByPage(page,size); // 存放到作用域 req.setAttribute("pagination", pagination); // 页面跳转 req.getRequestDispatcher("/index.jsp").forward(req, resp); } }
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
PageHelper是一款好用的开源免费的mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美。原本以为分页插件,应该是很简单的,然而PageHelper比我想象的要复杂许多,它做的很强大,也很彻底,强大到使用者可能并不需要这么多功能,彻底到一参可以两用。但是,我认为,作为分页插件,完成物理分页任务是根本,其它的很
forearch另外一个动态SQL通用的必要操作是迭代一个集合,通常是构建在IN条件中的.正常的sql语句中使用in的例子select*fromtb_userwhereidin(1,2,3,4)在mysql中,就将后面的查询的条件(1,2,3,4)封装成一个集合传入,并且用forearch处理接口代码packagecom.lin.mapper;importcom.lin.pojo.User;imp
官方解决方案https://github.com/baomidou/mybatis-plus/issues/3132github.com/baomidou/mybatis-plus/issues/3132@Slf4j@MappedTypes({Object.class})@MappedJdbcTypes(JdbcType.VARCHAR)publicclassDbJsonTypeHandlere
这里演示的是多对一多:学生一:班级多个学生一个班级,通过查询学生后再查询班级业务装配模式,实际上就是mapper层做单表查询操作,在service层做手动装配,实现关联查询的结果思路:①首先实体之间的关系,学生之于班级是多对一所以在学生的实体类从传入一个Class对象用于封装班级信息②然后分别定义学生的查询操作和班级的查询操作③在service层中创建两个mapper对象,进行业务装配,首先先查询
表结构学生表(t_student),字段有id,name,age,gender,cid.班级表(t_class)字段有id,name,room语句:--班级表createtablet_class(idint(3)primarykeyauto_increment,namevarchar(20)notnull,roomvarchar(30));--学生表createtablet_student(idi
之前我们用的实体类的属性名和我们表中的列名实际上是一致的,但是实际开发过程中这样的情况比较少,之前是为了做演示所以才使用一致,方便查看,但实际开发过程中,这样的情况相对的比较少,所以就要使用下面这个标签标签实际上就是解决列名和属性名不一致的问题在mybatis中存在一个机制叫做自动映射机制(auto_mapping)自动映射实际上就算mybatis中会将数据库中同名的列名和实
mybatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。mybatis3中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。默认情况下是没有开启缓存的,除了局部的session缓存,可以增强变现而且处理循环依赖也是必须的。要开启二级缓存,你需要在你的SQL映射文件中添加一行:cache;mybatis的一级缓存是session缓存作用到SqlSession对象,二级缓
include这个标签一般是用来实现sql语句复用的比如select*fromtb_user这个*包含了id,username,password*虽然方便了我们,但实际上麻烦都交给了程序,所以面对多次复用的语句可以配合sql标签提取处理来,具体处理为运行sql语句查看
近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往mybatis中批量插入数据。mapperconfiguration是用foreach循环做的,差不多是这样。(由于项目保密,以下代码均为自己手写的demo代码)insertintoUSER(id,nam
这是一个挺有意思的讨论话题。如果你运行下面的代码Integera=1000,b=1000;System.out.println(a==b);//1Integerc=100,d=100;System.out.println(c==d);//2你会得到falsetrue基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们
扫一扫关注公众号
添加我为好友,拉您入交流群!
请使用微信扫一扫!