
MyBatis使用PageHelper MyBatis的注解式开发十六、MyBatis使用PageHelper16.1 limit分页16.3 PageHelper插件第一步引入依赖第二步在mybatis-config.xml文件中配置插件第三步编写Java代码十七、MyBatis的注解式开发17.1 Insert17.2 Delete17.3 Update17.4 Select十六、MyBatis使用PageHelper16.1 limit分页mysql的limit后面两个数字第一个数字startIndex起始下标。下标从0开始。第二个数字pageSize每页显示的记录条数假设已知页码pageNum还有每页显示的记录条数pageSize第一个数字可以动态的获取吗startIndex (pageNum - 1) * pageSize所以标准通用的mysql分页SQLselect*fromtableName......limit(pageNum-1)*pageSize,pageSize使用mybatis应该怎么做模块名mybatis-012-pagepackagecom.powernode.mybatis.mapper;importcom.powernode.mybatis.pojo.Car;importorg.apache.ibatis.annotations.Param;importjava.util.List;publicinterfaceCarMapper{/** * 通过分页的方式获取Car列表 * param startIndex 页码 * param pageSize 每页显示记录条数 * return */ListCarselectAllByPage(Param(startIndex)IntegerstartIndex,Param(pageSize)IntegerpageSize);}?xml version1.0 encodingUTF-8 ?!DOCTYPEmapperPUBLIC-//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmappernamespacecom.powernode.mybatis.mapper.CarMapperselectidselectAllByPageresultTypeCarselect * from t_car limit #{startIndex},#{pageSize}/select/mapperpackagecom.powernode.mybatis.test;importcom.powernode.mybatis.mapper.CarMapper;importcom.powernode.mybatis.pojo.Car;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Test;importjava.util.List;publicclassPageTest{TestpublicvoidtestPage()throwsException{SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(Resources.getResourceAsStream(mybatis-config.xml));SqlSessionsqlSessionsqlSessionFactory.openSession();CarMappermappersqlSession.getMapper(CarMapper.class);// 页码IntegerpageNum2;// 每页显示记录条数IntegerpageSize3;// 起始下标IntegerstartIndex(pageNum-1)*pageSize;ListCarcarsmapper.selectAllByPage(startIndex,pageSize);cars.forEach(car-System.out.println(car));sqlSession.commit();sqlSession.close();}}执行结果获取数据不难难的是获取分页相关的数据比较难。可以借助mybatis的PageHelper插件。16.3 PageHelper插件使用PageHelper插件进行分页更加的便捷。第一步引入依赖dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.3.1/version/dependency第二步在mybatis-config.xml文件中配置插件typeAliases标签下面进行配置pluginsplugininterceptorcom.github.pagehelper.PageInterceptor/plugin/plugins第三步编写Java代码ListCarselectAll();selectidselectAllresultTypeCarselect * from t_car/select关键点在查询语句之前开启分页功能。在查询语句之后封装PageInfo对象。PageInfo对象将来会存储到request域当中。在页面上展示。TestpublicvoidtestPageHelper()throwsException{SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(Resources.getResourceAsStream(mybatis-config.xml));SqlSessionsqlSessionsqlSessionFactory.openSession();CarMappermappersqlSession.getMapper(CarMapper.class);// 开启分页PageHelper.startPage(2,2);// 执行查询语句ListCarcarsmapper.selectAll();// 获取分页信息对象PageInfoCarpageInfonewPageInfo(cars,5);System.out.println(pageInfo);}执行结果PageInfo{pageNum2, pageSize2, size2, startRow3, endRow4, total6, pages3, listPage{counttrue, pageNum2, pageSize2, startRow2, endRow4, total6, pages3, reasonablefalse, pageSizeZerofalse}[Car{id86, carNum‘1234’, brand‘丰田霸道’, guidePrice50.5, produceTime‘2020-10-11’, carType‘燃油车’}, Car{id87, carNum‘1234’, brand‘丰田霸道’, guidePrice50.5, produceTime‘2020-10-11’, carType‘燃油车’}], prePage1, nextPage3, isFirstPagefalse, isLastPagefalse, hasPreviousPagetrue, hasNextPagetrue, navigatePages5, navigateFirstPage1, navigateLastPage3, navigatepageNums[1, 2, 3]}对执行结果进行格式化PageInfo{ pageNum2, pageSize2, size2, startRow3, endRow4, total6, pages3, listPage{counttrue, pageNum2, pageSize2, startRow2, endRow4, total6, pages3, reasonablefalse, pageSizeZerofalse} [Car{id86, carNum1234, brand丰田霸道, guidePrice50.5, produceTime2020-10-11, carType燃油车}, Car{id87, carNum1234, brand丰田霸道, guidePrice50.5, produceTime2020-10-11, carType燃油车}], prePage1, nextPage3, isFirstPagefalse, isLastPagefalse, hasPreviousPagetrue, hasNextPagetrue, navigatePages5, navigateFirstPage1, navigateLastPage3, navigatepageNums[1, 2, 3] }十七、MyBatis的注解式开发mybatis中也提供了注解式开发方式采用注解可以减少Sql映射文件的配置。当然使用注解式开发的话sql语句是写在java程序中的这种方式也会给sql语句的维护带来成本。官方是这么说的使用注解来映射简单语句会使代码显得更加简洁但对于稍微复杂一点的语句Java 注解不仅力不从心还会让你本就复杂的 SQL 语句更加混乱不堪。 因此如果你需要做一些很复杂的操作最好用 XML 来映射语句。使用注解编写复杂的SQL是这样的原则简单sql可以注解。复杂sql使用xml。模块名mybatis-013-annotation打包方式jar依赖mybatismysql驱动junitlogback配置文件jdbc.properties、mybatis-config.xml、logback.xmlpojocom.powernode.mybatis.pojo.Carmapper接口com.powernode.mybatis.mapper.CarMapper17.1 Insertpackagecom.powernode.mybatis.mapper;importcom.powernode.mybatis.pojo.Car;importorg.apache.ibatis.annotations.Insert;publicinterfaceCarMapper{Insert(valueinsert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType}))intinsert(Carcar);}packagecom.powernode.mybatis.test;importcom.powernode.mybatis.mapper.CarMapper;importcom.powernode.mybatis.pojo.Car;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Test;publicclassAnnotationTest{TestpublicvoidtestInsert()throwsException{SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(Resources.getResourceAsStream(mybatis-config.xml));SqlSessionsqlSessionsqlSessionFactory.openSession();CarMappermappersqlSession.getMapper(CarMapper.class);CarcarnewCar(null,1112,卡罗拉,30.0,2000-10-10,燃油车);intcountmapper.insert(car);System.out.println(插入了几条记录count);sqlSession.commit();sqlSession.close();}}17.2 DeleteDelete(delete from t_car where id #{id})intdeleteById(Longid);TestpublicvoidtestDelete()throwsException{SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(Resources.getResourceAsStream(mybatis-config.xml));SqlSessionsqlSessionsqlSessionFactory.openSession();CarMappermappersqlSession.getMapper(CarMapper.class);mapper.deleteById(89L);sqlSession.commit();sqlSession.close();}17.3 UpdateUpdate(update t_car set car_num#{carNum},brand#{brand},guide_price#{guidePrice},produce_time#{produceTime},car_type#{carType} where id#{id})intupdate(Carcar);TestpublicvoidtestUpdate()throwsException{SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(Resources.getResourceAsStream(mybatis-config.xml));SqlSessionsqlSessionsqlSessionFactory.openSession();CarMappermappersqlSession.getMapper(CarMapper.class);CarcarnewCar(88L,1001,凯美瑞,30.0,2000-11-11,新能源);mapper.update(car);sqlSession.commit();sqlSession.close();}17.4 SelectSelect(select * from t_car where id #{id})Results({Result(columnid,propertyid,idtrue),Result(columncar_num,propertycarNum),Result(columnbrand,propertybrand),Result(columnguide_price,propertyguidePrice),Result(columnproduce_time,propertyproduceTime),Result(columncar_type,propertycarType)})CarselectById(Longid);TestpublicvoidtestSelectById()throwsException{SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(Resources.getResourceAsStream(mybatis-config.xml));SqlSessionsqlSessionsqlSessionFactory.openSession();CarMappercarMappersqlSession.getMapper(CarMapper.class);CarcarcarMapper.selectById(88L);System.out.println(car);}执行结果
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。